2011-10-07 150 views
2

我想通過寫一個簡單的遊戲來學習PyQt。第一個小部件會有像「新遊戲」,「退出」等按鈕,我無法理解如何從該菜單小部件轉換到新的小部件。PyQt小部件在多個文件

例如,如果我點擊新遊戲,我將如何顯示一個新的小部件替換舊小部件並詢問用戶的姓名?我現在是接近它的方式是一樣的東西

Form = QtGui.QWidget() 
ui = uiMainMenu() 
ui.setupUi(Form) 
Form.show() 

那麼一旦newGameButton按下它會去一個子程序...

Form2 = QtGui.QWidget() 
ui2 = uiNewGame() 
ui2.setupUi(Form2) 
Form2.show() 

我不要求所有的代碼,只是一個關於我應該如何解決問題的解釋,因爲上面的代碼沒有做下蹲。
謝謝!

回答

4

如果你想在窗體之間切換,那麼你可以使用QStackedWidget。 下面你可以找到一個工作示例代碼:

import sys 
from functools import partial 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 


class Form1(QWidget): 
    showForm2Signal = pyqtSignal() 

    def __init__(self, parent=None): 
     super(Form1, self).__init__(parent) 
     self.newGameButton = QPushButton("New Game", self) 
     self.quitButton = QPushButton("Quit", self) 
     layout = QVBoxLayout(self) 
     layout.addWidget(QLabel("<html>My Game<br>Start Page</html>")) 
     layout.addWidget(self.newGameButton) 
     layout.addWidget(self.quitButton) 
     self.newGameButton.clicked.connect(self.showForm2Signal.emit) 
     self.quitButton.clicked.connect(qApp.quit) 


class Form2(QWidget): 
    showForm1Signal = pyqtSignal() 

    def __init__(self, parent=None): 
     super(Form2, self).__init__(parent) 
     self.backButton = QPushButton("Back", self) 
     layout = QVBoxLayout(self) 
     layout.addWidget(QLabel("New Game Started!")) 
     layout.addWidget(self.backButton) 
     self.backButton.clicked.connect(self.showForm1Signal.emit) 


class MainWidget(QWidget): 
    def __init__(self, parent=None): 
     super(MainWidget, self).__init__(parent) 
     self.stack = QStackedWidget() 
     layout = QVBoxLayout(self) 
     layout.addWidget(self.stack) 
     self.form1 = Form1(self) 
     self.form2 = Form2(self) 
     self.stack.addWidget(self.form1) 
     self.stack.addWidget(self.form2) 
     self.form1.showForm2Signal.connect(partial(self.stack.setCurrentWidget, 
               self.form2)) 
     self.form2.showForm1Signal.connect(partial(self.stack.setCurrentWidget, 
               self.form1)) 
     self.stack.setCurrentWidget(self.form1) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = MainWidget() 
    w.show() 
    app.exec_() 
    sys.exit() 

如果只想問名用戶,那麼你可以使用QDialog的小部件。

+0

非常感謝=) – spibop