кнопки сборки в pyqt4 запускают соответствующие файлы python при нажатии на один из них - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь написать программу для сборки двух кнопок в 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_())

Я хочу создать пользовательский интерфейс с двумя кнопками, и при нажатии на одну из них он может запускать соответствующие файлы Python. Но теперь показала только кнопка EF02.

Кажется, что кнопка EF01 закрыта EF02

1 Ответ

0 голосов
/ 19 октября 2019

Проблема в том, что вы создаете и настраиваете новый графический интерфейс (centralWidget) всякий раз, когда вы вызываете оба setupEF01 или 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, который просто неверен .
Вы даже не должны смотреть на эти файлы (на самом деле, в заголовке четко указано, что вы никогда не должны редактироватьих, хотя я могу понять путаницу).

Вместо этого вам следует создать и сохранить графический интерфейс в Designer (если вам нужно), а затем следовать предложенному PyQt поведению, как объяснено здесь . Это может показаться немного ошеломляющим, но я могу вам сказать, что это лучший способ сделать это, так как использование вывода pyuic для создания собственного кода (особенно если вы новичок в Qt) действительно не очень хороший подход.

...