当我点击qpushbutton进入QWidget时,QMainwindow没有显示

时间:2015-03-19 21:10:39

标签: python-2.7 pyqt qwidget qmainwindow qpushbutton

我有一个QWidget(登录表单)和QMainWindow(主表单)。问题是当我点击qwushbutton进入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运行项目。在控制台中,我在 init ()函数中显示'ok',但qmainwindow没有显示。提前致谢

1 个答案:

答案 0 :(得分: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_())

或者至少作为表格的一员。