дочерние формы (появляющиеся по событию)

Модератор: Модераторы разделов

KukMan
Сообщения: 92
ОС: Kubuntu 7.10

дочерние формы

Сообщение KukMan »

Нужно чтобы по событию выводилась еще одна форма (в новом окне). Как это сделать? ссылочкой поделитесь...
вот что я пытался сделать методом тыка

Код: Выделить всё

    def getName(self):
        self.child = QtGui.QWidget(self.ui.centralwidget)
        self.child.setObjectName("child")
        self.label5 = QtGui.QLabel(self.child)
        self.label5.setGeometry(QtCore.QRect(20,210,57,18))
        self.label5.setObjectName("label5")
        self.label5.setText("Hello World")
        self.show()

но ничего не происходило (даже ошибок)...
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: дочерние формы

Сообщение KukMan »

я даже не знаю, как к этому подходить. скажите хоть, что искать в гугле?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: дочерние формы

Сообщение eduard_pustobaev »

Пайтон не знаю. Но если делать виджет без предка, то он как раз в виде нового окна появляется.
Т.е. QtGui.QLabel() без (self.child)...

На C++:

Код: Выделить всё

widget = new QWidget();
label5 = new QLabel(widget); -> на виджете, нет нового окна
label5 = new QLabel(); -> новое окно с лейблом
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: дочерние формы

Сообщение Liksys »

Ой, товарищь, неправильно усе...
Надо наследоваться, создать класс от Qt.QDialog...
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: дочерние формы

Сообщение KukMan »

а не могли бы написать рабочую функцию (желательно на питоне) с новым окном, где QLabel = "Hello World"?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: дочерние формы

Сообщение eduard_pustobaev »

Liksys писал(а):
03.11.2007 23:46
Ой, товарищь, неправильно усе...
Надо наследоваться, создать класс от Qt.QDialog...

Да необязательно. Хотя да, QDialog для того и предназначен.

KukMan писал(а):
04.11.2007 00:33
а не могли бы написать рабочую функцию (желательно на питоне) с новым окном, где QLabel = "Hello World"?

Код: Выделить всё

#include <QApplication>
#include <QLabel>
#include <QWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QWidget *w = new QWidget();
    QLabel *lb = new QLabel("InNewWindow");
    QLabel *lb2 = new QLabel("OnWidget", w);

    w->show();
    lb->show();
    return app.exec();
}

С пайтоном - к Liksys...
В дисгармонии со вселенной.
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: дочерние формы

Сообщение KukMan »

ну смотрите. мне нужно, чтобы было два независимых окна (к примеру пока есть диалог открытия файла - то главное окно не доступно), но когда закрывается родительское - закрывается и дочерное...

В СИях совсем не шарю:( Есть сингал clicked(), который вызывает функцию (к примеру NewWindow). И нужно чтобы эта функция вызывала новую форму, которая сохранена в, к примеру, child.py (конвертирован с child.ui тулзой pyuic4). Вот нужен код этой функции. Спрашивал на канале #qt на freenode - одни говорят через QWidget, другие через QDialog. Кому верить?
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: дочерние формы

Сообщение eduard_pustobaev »

KukMan писал(а):
04.11.2007 00:42
ну смотрите. мне нужно, чтобы было два независимых окна (к примеру пока есть диалог открытия файла - то главное окно не доступно), но когда закрывается родительское - закрывается и дочерное...

Ну что нельзя было сразу с этого начать? А что не так делает QFileDialog?
В дисгармонии со вселенной.
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: дочерние формы

Сообщение KukMan »

не нада сильно бить.. я только учусь....
Я толком не знаю что делает QFileialog и QWidget.
Я себе представляю, что QFileDialog делает дополнительное окно, которое в следствии своей работы должно возвратить какойто результат (к примеру как QFileOpenDialog или както так), что мне не совсем подходит (посколько родительское окно будет недоступно.
Спасибо сказали:
Аватара пользователя
eduard_pustobaev
Сообщения: 2629
Статус: Ленивец
ОС: Arch/Debian.

Re: дочерние формы

Сообщение eduard_pustobaev »

Угук. Всё ясно, только непонятно одно, а именно где правда?
Тут:
мне нужно, чтобы было два независимых окна (к примеру пока есть диалог открытия файла - то главное окно не доступно)

или тут:
что мне не совсем подходит (посколько родительское окно будет недоступно


Для доступно/недоступно в QDialog есть метод setModal(bool). Так вот, если setModal(true), а оно по-умолчанию для диалогов, то остальные окна приложения недоступны, пока диалог не закроется. Если же setModal(false), то остальные окна приложения доступны во время работы диалога.
Таким образом что так, что эдак нужно наследовать от диалога.
В дисгармонии со вселенной.
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: дочерние формы

Сообщение Liksys »

Код: Выделить всё

from PyQt4 import Qt
import sys

#####
class HelloDialog(Qt.QDialog) :
    def __init__(self, parent=None) :
        Qt.QDialog.__init__(self, parent)

        self.setWindowTitle("Hello Dialog")

        self.main_layout = Qt.QVBoxLayout()
        self.setLayout(self.main_layout)

        #####

        self.hello_label_layout = Qt.QHBoxLayout()
        self.main_layout.addLayout(self.hello_label_layout)

        self.close_button_layout = Qt.QHBoxLayout()
        self.main_layout.addLayout(self.close_button_layout)

        #####

        self.hello_label = Qt.QLabel("Hello, PtQt4!")
        self.hello_label_layout.addWidget(self.hello_label)

        self.close_button = Qt.QPushButton("Close")
        self.close_button_layout.addStretch()
        self.close_button_layout.addWidget(self.close_button)

        #####

        self.connect(self.close_button, Qt.SIGNAL("clicked()"), self.hide)


#####
class MainWindow(Qt.QMainWindow) :
    def __init__(self, parent=None) :
        Qt.QMainWindow.__init__(self, parent)

        self.setWindowTitle("Dialog Example")

        self.main_widget = Qt.QWidget()
        self.setCentralWidget(self.main_widget)

        self.main_layout = Qt.QVBoxLayout()
        self.main_widget.setLayout(self.main_layout)

        #####

        self.hello_dialog = HelloDialog()

        #####

        self.show_hello_dialog_button = Qt.QPushButton("Show Hello Dialog")
        self.main_layout.addWidget(self.show_hello_dialog_button)

        self.exit_button = Qt.QPushButton("Exit")
        self.main_layout.addWidget(self.exit_button)

        #####

        self.connect(self.show_hello_dialog_button, Qt.SIGNAL("clicked()"), self.hello_dialog.show)
        self.connect(self.exit_button, Qt.SIGNAL("clicked()"), self.exit)


    ### Private ###

    def exit(self) :
        sys.exit()


#####
app = Qt.QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
app.exec_()
Спасибо сказали:
KukMan
Сообщения: 92
ОС: Kubuntu 7.10

Re: дочерние формы

Сообщение KukMan »

Спасибо огромнейшее за код...А вы его запускали? У меня пишет ошибку unexpected indent
Пока ищу, в чем ошибка. Никаких соображений:(
Нашол - запустил - обрадовался. Ошибка была в отступе предыдущей строки. Спасибо за код. буду мучать дальше
Спасибо сказали: