构建PyQt4中的按钮,在单击其中一个时运行相应的Python文件

2024-10-03 15:24:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个程序,在pyqt4中构建两个按钮,当单击其中一个按钮时,它将运行相应的python文件。但是我只能显示一个按钮,我的代码怎么了

#!/usr/bin/env python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import ef01, ef02, ef03, ef04, ef05, ef06, ef07, ef08, ef09, ef10, ef11, ef12, basement

class Ui_MainWindow(object):
    def setupMainWindow(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(320, 410)
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    def setupEF01(self, MainWindow):
        _translate = QCoreApplication.translate
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QRect(60, 30, 80, 30))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        QMetaObject.connectSlotsByName(MainWindow)
        self.pushButton.setText(_translate("MainWindow", "EF01"))
        self.pushButton.clicked.connect(self.runEF01)
    def runEF01(self):
        ef01.GoToPose()
    def setupEF02(self, MainWindow):
        _translate = QCoreApplication.translate
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QRect(180, 30, 80, 30))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        QMetaObject.connectSlotsByName(MainWindow)
        self.pushButton.setText(_translate("MainWindow", "EF02"))
        self.pushButton.clicked.connect(self.runEF02)
    def runEF02(self):
        ef02.GoToPose()

    def runAll(self):
        self.setupMainWindow(MainWindow)
        self.setupEF01(MainWindow)
        self.setupEF02(MainWindow)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    #MainWindow = QWdget()
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.runAll()
    MainWindow.show()
    sys.exit(app.exec_())

我想用两个按钮构建一个UI,当单击其中一个按钮时,它可以运行相应的python文件。但现在只有EF02按钮显示

似乎EF01按钮已被EF02覆盖


Tags: 文件fromimportselfdefsys按钮translate
1条回答
网友
1楼 · 发布于 2024-10-03 15:24:39

问题是,无论何时调用setupEF01setupEF02,您都在创建和设置一个新的GUI(即centralWidget)。这将导致“覆盖”QMainWindow的现有(如果有)“主”中心小部件。
您不应该为所需的每个按钮设置centralWidget,而是将其添加到现有按钮中

基于您自己的代码,这是您应该如何实现它的

class Ui_MainWindow(object):
    def setupMainWindow(self, MainWindow):
        _translate = QCoreApplication.translate
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(320, 410)
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        MainWindow.setCentralWidget(self.centralwidget)

        self.pushButton1 = QPushButton(self.centralwidget)
        self.pushButton1.setGeometry(QRect(60, 30, 80, 30))
        self.pushButton1.setObjectName("pushButton")
        self.pushButton1.setText(_translate("MainWindow", "EF01"))
        self.pushButton1.clicked.connect(self.runEF01)

        self.pushButton2 = QPushButton(self.centralwidget)
        self.pushButton2.setGeometry(QRect(180, 30, 80, 30))
        self.pushButton2.setObjectName("pushButton2")
        self.pushButton2.setText(_translate("MainWindow", "EF02"))
        self.pushButton2.clicked.connect(self.runEF02)

    def runEF01(self):
        ef01.GoToPose()

    def runEF02(self):
        ef02.GoToPose()

    def runAll(self):
        self.setupMainWindow(MainWindow)

也就是说,如果从Qt Designer保存一个UI文件,那么看起来您正试图基于pyuic的输出编写自己的代码,这显然是错误的
你甚至不应该看那些文件(事实上,它的标题中明确指出,你永远不应该编辑它们,而我可以理解这种混淆)

相反,您应该做的是在Designer中创建并保存GUI(如果需要),然后按照PyQt建议的操作,如here所述。这似乎有点让人不知所措,但我可以告诉你,这是最好的方法,因为使用pyuic输出创建自己的代码(特别是如果你是Qt新手的话)确实不是一个好方法

相关问题 更多 >