2011-10-07 6 views
2

간단한 게임을 작성하여 PyQt를 배우고 싶습니다. 첫 번째 위젯에는 "새 게임", "종료"등과 같은 버튼이 있습니다. 메뉴 위젯에서 새로운 위젯으로 전환하는 방법을 이해하는 데 문제가 있습니다.여러 파일의 PyQt 위젯

예를 들어 새 게임을 클릭하면 이전 위젯을 대체하고 사용자 이름을 묻는 새로운 위젯이 표시됩니다. 내가 지금 접근하고있는 방법은

Form2 = QtGui.QWidget() 
ui2 = uiNewGame() 
ui2.setupUi(Form2) 
Form2.show() 
내가 모든 코드를 요구하고 있지 않다

, 단지는 ... newGameButton이 서브 루틴에 갈 것 누르면 일단 다음

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

같은 것입니다 내가 위의 코드가 쪼그리고 앉지 않기 때문에 어떻게 문제에 접근해야하는지에 대한 설명.
감사합니다.

답변

4

폼 사이를 전환하려면 QStackedWidget을 사용할 수 있습니다. 당신은 단지 당신이 인 QDialog 위젯을 사용할 수있는 사용자에게 이름을 물어보고 싶은 경우

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() 

: 아래에서 은 작업 샘플 코드를 찾을 수 있습니다.

+0

대단히 감사합니다. =) – spibop