从QDialog窗口打开Python PyQt4新的QWidget窗口

问题描述:

通过在我的QDialog窗口中按下QPushButton,我想打开一个新的QWidget窗口。 我的代码:从QDialog窗口打开Python PyQt4新的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) 它的作品!

我在做什么错?请帮助我。

当你实例化MainWindow你传入一个父项。 Qwidget如果您未指定父级,则仅创建一个新窗口。

这当然是故意的。如果QWidgets与父母在新窗口中显示,那么你永远不会建立一个GUI。想象一下,每个小部件都在自己的窗口中!

QMainWindowQDialog是专门设计为既有父母,又创建一个新的窗口。你应该使用它们。