Python PyQt4从QDialog新的QWidget窗口打开

时间:2015-03-31 09:21:23

标签: python window pyqt qwidget qdialog

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

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 MainWindow(QtGui.QWidget)class MainWindow(QtGui.QDialog)class MainWindow(QtGui.QMainWindow) 它有效!

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

1 个答案:

答案 0 :(得分:2)

当您实例化MainWindow时,您传入了父母。如果您没有指定父母,Qwidget只会打开一个新窗口。

这当然是故意的。如果在新窗口中显示父母QWidgets,那么您永远无法构建GUI。想象一下,让每个小部件都在其自己的窗口中!

QMainWindowQDialog专门设计为拥有父级,并创建一个新窗口。你应该使用它们。