QMainwindow не отображается, когда я нажимаю кнопку qpushbutton в QWidget

У меня есть QWidget (форма входа) и QMainWindow (основная форма). проблема в том, что когда я щелкнул qpushbutton в qwidget, QmainWindow должен появиться, но этого не происходит.

class Ui_frmInicial(QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.resize(400, 250)
        self.btnOpen = QtGui.QPushButton(self)
        self.btnOpen.setGeometry(QtCore.QRect(110, 170, 111, 41))
        self.btnOpen.clicked.connect(self.btnOpen_clicked)
    def btnOpen_clicked(self):
        print('ok ')
        #mform = Ui_mainForm()
        #mform.show()
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    ui = Ui_frmInicial()
    ui.show()
    sys.exit(app.exec_())

а другой класс:

class Ui_mainForm(QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        print('ok')
        self.resize(928, 695)
        QtCore.QMetaObject.connectSlotsByName(self)

в чем будет ошибка? Я запускаю проект из Ui_frmInicial. В консоли я показываю "ok" в функции init (), но окно qmainwindow не отображается. заранее спасибо


person GSandro_Strongs    schedule 19.03.2015    source источник


Ответы (1)


Вы должны убедиться, что открываемое вами окно не удаляется сразу после вызова show.

Я бы посоветовал вам определить окно в основной области и инициализировать форму с его помощью:

class Ui_frmInicial(QWidget):
    def __init__(self, window):                         #window parameter
        QtGui.QWidget.__init__(self)
        self.resize(400, 250)
        self.btnOpen = QtGui.QPushButton(self)
        self.btnOpen.setGeometry(QtCore.QRect(110, 170, 111, 41))
        self.btnOpen.clicked.connect(lambda c: window.show()) #lambda callback

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Ui_mainForm()                              #window definition
    ui = Ui_frmInicial(window)                          #ui initialisation
    ui.show()
    sys.exit(app.exec_())

Или хотя бы как участник формы.

person tynn    schedule 19.03.2015
comment
Большое спасибо, но у меня произошла ошибка. Я изменился на def __init __ (self, window): Когда я запускаю в консоли, говорит Traceback (последний вызов последний): window.show () NameError: глобальное имя 'window' не определено. Пожалуйста помогите. заранее спасибо. - person GSandro_Strongs; 20.03.2015
comment
Я добавил комментарии, где изменил ваш код. Я думаю, вы только что что-то упустили из виду. - person tynn; 20.03.2015
comment
Я изменил код, например: self.btnOpen.clicked.connect (btnOpen_clicked) и def btnOpen_clicked (self): lambda c: self.window.show () Я помещаю сюда, потому что в будущем я буду вести бизнес логично . QMAinwindow еще не появляется. Правильно ли помещать лямбда-код в эту функцию? - person GSandro_Strongs; 20.03.2015
comment
Если вы установили self.window в своем __init__, вам просто нужно опустить лямбду. Так что btnOpen_clicked(self): self.window.show() смог сделать свое дело. - person tynn; 20.03.2015
comment
спасибо много. что я добавляю, если хочу скрыть первую форму. отображаются основные окна, а другое мне не нужно? . заранее спасибо. - person GSandro_Strongs; 20.03.2015
comment
Просто позвоните self.hide() после self.window.show(). Или как-нибудь измените настройки, чтобы можно было полностью удалить форму. Просто попробуйте сами, и, если это не сработает, задайте новый вопрос, посвященный этой новой проблеме. Удачи тебе! - person tynn; 20.03.2015