Я пытаюсь организовать свой код в классы. В приведенном ниже примере B
и C
должны наследовать имена кнопок pu sh от A
, чтобы при нажатии кнопки отображали оператор. Чтобы заставить это работать должным образом, мне пришлось создать Dummy
и наследовать B
и C
, а затем создать в экземпляре Dummy
. Не похоже, что это то, как я должен это делать. Есть ли «лучший» или «более приемлемый» способ использования нескольких классов в PyQt5?
inheritance.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'inheritance.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(452, 246)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.b_pushButton = QtWidgets.QPushButton(self.centralwidget)
self.b_pushButton.setGeometry(QtCore.QRect(40, 50, 151, 81))
self.b_pushButton.setObjectName("b_pushButton")
self.c_pushButton = QtWidgets.QPushButton(self.centralwidget)
self.c_pushButton.setGeometry(QtCore.QRect(230, 50, 151, 81))
self.c_pushButton.setObjectName("c_pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 452, 22))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.b_pushButton.setText(_translate("MainWindow", "B"))
self.c_pushButton.setText(_translate("MainWindow", "C"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Основной скрипт:
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication
from inheritance import Ui_MainWindow
class A(QMainWindow):
def __init__(self):
super(A, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
class B(A):
def __init__(self):
super(B, self).__init__()
self.ui.b_pushButton.clicked.connect(self.pushB)
def pushB(self):
print('You pushed the "B" button')
print()
class C(A):
def __init__(self):
super(C, self).__init__()
self.ui.c_pushButton.clicked.connect(self.pushC)
def pushC(self):
print('You pushed the "C" button')
print()
class Dummy(B, C):
pass
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Dummy()
main.show()
sys.exit(app.exec_())