Python PyQt4 从 QDialog 打开新的 QWidget window

Python PyQt4 open from QDialog new QWidget window

通过在我的 QDialog window 中按下 QPushButton,我想打开一个新的 QWidget window。 我的代码:

from PyQt4 import QtGui
import sys


class MainWindow(QtGui.QWidget):

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.setWindowTitle("Main Window")


class FirstWindow(QtGui.QDialog):

    def __init__(self, parent=None):
        super(FirstWindow, self).__init__(parent)

        self.createWindow()

    def createWindow(self):
        btn = QtGui.QPushButton('Open New Window', self)
        btn.move(10, 10)

        self.openNewWindow = MainWindow(self)
        btn.clicked.connect(self.openMainWin)

        self.setGeometry(250,250, 150,50)
        self.setWindowTitle("First Window")
        self.show()

    def openMainWin(self):
        self.openNewWindow.show()


if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    firstwin = FirstWindow()
    sys.exit(app.exec_())

当我 运行 代码按下按钮时没有任何反应。

但是当我将 class 从 class MainWindow(QtGui.QWidget)class MainWindow(QtGui.QDialog)class MainWindow(QtGui.QMainWindow) 有效!

我做错了什么?!请帮助我。

当您实例化 MainWindow 时,您会传入一个父对象。 Qwidget 仅在您未指定父项时创建新的 window。

这当然是故意的。如果 QWidgets 和父级显示在新的 windows 中,那么您将永远无法构建 GUI。想象一下,每个小部件都属于自己 window!

QMainWindowQDialog 专门设计用于同时拥有一个父级,并创建一个新的 window。你应该使用它们。