Python 多文件中的PyQt小部件

Python 多文件中的PyQt小部件,python,pyqt,Python,Pyqt,我想通过编写一个简单的游戏来学习PyQt。第一个小部件会有“新游戏”、“退出”等按钮。我很难理解如何从菜单小部件转换到新的小部件 例如,如果我要单击“新建游戏”,如何显示一个新的小部件来替换旧的小部件并询问用户名?我现在接近它的方式是 Form = QtGui.QWidget() ui = uiMainMenu() ui.setupUi(Form) Form.show() 然后,一旦按下NewGame按钮,它将转到一个子例程 Form2 = QtGui.QWidget() ui2 = uiNe

我想通过编写一个简单的游戏来学习PyQt。第一个小部件会有“新游戏”、“退出”等按钮。我很难理解如何从菜单小部件转换到新的小部件

例如,如果我要单击“新建游戏”,如何显示一个新的小部件来替换旧的小部件并询问用户名?我现在接近它的方式是

Form = QtGui.QWidget()
ui = uiMainMenu()
ui.setupUi(Form)
Form.show()
然后,一旦按下NewGame按钮,它将转到一个子例程

Form2 = QtGui.QWidget()
ui2 = uiNewGame()
ui2.setupUi(Form2)
Form2.show()
我并不是要所有的代码,只是要解释我应该如何处理这个问题,因为上面的代码并没有做下蹲操作。

谢谢

如果您想在表单之间切换,那么可以使用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()
导入系统 从functools导入部分 从PyQt4.QtGui导入* 从PyQt4.QtCore导入* 类别Form1(QWidget): showForm2Signal=pyqtSignal() def uuu init uuu(self,parent=None): 超级(Form1,self)。\uuuuu初始化\uuuuuu(父级) self.newGameButton=QPushButton(“新游戏”,self) self.quitButton=QPushButton(“退出”,self) 布局=QVBoxLayout(自身) layout.addWidget(QLabel(“我的游戏
起始页”)) layout.addWidget(self.newGameButton) layout.addWidget(self.quitButton) self.newGameButton.clicked.connect(self.showForm2Signal.emit) self.quitButton.clicked.connect(qApp.quit) 类别Form2(QWidget): showForm1Signal=pyqtSignal() def uuu init uuu(self,parent=None): 超级(Form2,self)。\uuuuu初始化\uuuuuu(父级) self.backButton=QPushButton(“后退”,self) 布局=QVBoxLayout(自身) layout.addWidget(QLabel(“新游戏开始!”) layout.addWidget(self.backButton) self.backButton.clicked.connect(self.showForm1Signal.emit) 类MainWidget(QWidget): def uuu init uuu(self,parent=None): 超级(MainWidget,self)。\uuuu初始化\uuuuu(父级) self.stack=QStackedWidget() 布局=QVBoxLayout(自身) 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(部分)(self.stack.setCurrentWidget, 自我介绍(表格二) self.form2.showForm1Signal.connect(部分)(self.stack.setCurrentWidget, 自我保护(表格一) self.stack.setCurrentWidget(self.form1) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app=QApplication(sys.argv) w=MainWidget() w、 show() app.exec() sys.exit() 如果您只想向用户询问姓名,则可以使用QDialog小部件