pyqt4中的构建按钮在单击其中一个时运行相应的python文件

问题描述 投票:0回答:1

我正在尝试编写一个在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覆盖

python pyqt4
1个回答
0
投票

问题是,无论同时调用centralWidgetsetupEF01,您都在创建和设置新的GUI(setupEF02)。这将导致“覆盖” 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)

也就是说,您似乎正在尝试根据pyuic的输出编写自己的代码,给定了从Qt Designer保存的UI文件,这简直是[[错误。您甚至都不应该查看这些文件(事实上,它的标题清楚地表明了您永远不要编辑它们,尽管我可以理解混乱的地方)。

相反,您应该做的是在Designer中创建并保存GUI(如果需要),然后按照PyQt建议的操作进行操作,如here所述。可能看起来有些让人不知所措,但是我可以告诉你这是最好的方法,因为使用pyuic输出创建自己的代码(特别是如果您不熟悉Qt的话)确实不是一个好方法。
© www.soinside.com 2019 - 2024. All rights reserved.