我正在尝试编写一个在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覆盖
问题是,无论同时调用centralWidget
或setupEF01
,您都在创建和设置新的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文件,这简直是[[错误。您甚至都不应该查看这些文件(事实上,它的标题清楚地表明了您永远不要编辑它们,尽管我可以理解混乱的地方)。