【问题标题】:PyQt widgets in multiple files多个文件中的 PyQt 小部件
【发布时间】:2011-10-07 17:22:02
【问题描述】:

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

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

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

然后一旦按下 newGameButton 就会进入一个子程序...

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

我不是要所有代码,只是解释我应该如何解决这个问题,因为上面的代码没有做深蹲。
谢谢!

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    如果你想在表单之间切换,那么你可以使用 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 小部件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-13
      • 2018-08-14
      • 2017-08-29
      • 1970-01-01
      • 2013-05-08
      • 2011-06-17
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多