2015-03-31 103 views
0

通過在我的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) 它的作品!

我在做什麼錯?請幫助我。

回答

2

當你實例化MainWindow你傳入一個父項。 Qwidget如果您未指定父級,則僅創建一個新窗口。

這當然是故意的。如果QWidgets與父母在新窗口中顯示,那麼你永遠不會建立一個GUI。想象一下,每個小部件都在自己的窗口中!

QMainWindowQDialog是專門設計爲既有父母,又創建一個新的窗口。你應該使用它們。