单击pyqt4中运行相应python文件的build按钮之一

单击pyqt4中运行相应python文件的build按钮之一,python,pyqt4,Python,Pyqt4,我正在尝试编写一个程序,在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 cl

我正在尝试编写一个程序,在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按钮显示


EF02似乎覆盖了EF01按钮。问题是,无论何时调用
setupEF01
setupEF02
,您都在创建和设置一个新的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建议的操作,如所述。这似乎有点让人不知所措,但我可以告诉你,这是最好的方法,因为使用pyuic输出创建自己的代码(特别是如果你是Qt新手的话)确实不是一个好方法