当我将 qpushbutton 单击到 QWidget 中时,QMainwindow 不显示

QMainwindow doesn't show when I clicked a qpushbutton into a QWidget

我有一个 QWidget(登录表单)和 QMainWindow(主表单)。问题是当我在 qwidget 中点击一个 qpushbutton 时,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是:

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

会出现什么错误?我 运行 来自 Ui_frmInicial 的项目。在控制台中,我将 print 'ok' 显示到 init() 函数中,但 qmainwindow 未显示。提前致谢

您需要确保,您正在打开的 window 不会在调用 show 后立即被删除。

我建议,您在主作用域中定义 window 并用它初始化表单:

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_())

或者至少作为表单的成员。