Я изучаю PyQt5, и я попытался создать расширенные виджеты. Я также изучаю ООП, поэтому мне не хватает опыта для этого проекта.Как реорганизовать эти базовые классы (PyQt5)
Моя конечная цель состоит в том, чтобы иметь главные виджеты, которые могут отключать/включать некоторые подчиненные виджеты. До сих пор мне нужны проверки и переключатели.
Так что я попытался создать абстрактный класс, который содержит расширенное поведение виджетов (управление состояния виджетов ведомых):
class QDisablingWidget():
__metaclass__ = ABCMeta
def __init__(self):
self.slaveWidgets = []
self.slaveStateWhenMasterIsEnabled = {}
def addSlaveWidget(self, slaveWidget, isEnabledWhenMasterIsEnabled=True):
[...]
def updateSlaveStatus(self):
[...]
Затем я создаю свои расширенные классы виджетов:
class QDisablingCheckBox(QtWidgets.QCheckBox, QDisablingWidget):
def __init__(self, text=None, parent=None, isInMutexGroup=False):
super(QtWidgets.QCheckBox, self).__init__()
super(QDisablingWidget, self).__init__()
if text:
self.setText(text)
if parent:
self.setParent(parent)
self.isInMutexGroup = isInMutexGroup
# Click signal handling
self.stateChanged.connect(self.updateSlaveStatus)
class QDisablingRadioButton(QtWidgets.QRadioButton, QDisablingWidget):
def __init__(self, text=None, parent=None, isInMutexGroup=False):
super(QtWidgets.QRadioButton, self).__init__()
super(QDisablingWidget, self).__init__()
if text:
self.setText(text)
if parent:
self.setParent(parent)
self.isInMutexGroup = isInMutexGroup
# Click signal handling
self.toggled.connect(self.updateSlaveStatus)
Вы уже можете увидеть проблему: Мне нужно подключить мой self.updateSlaveStatus
так я добавил его в конструкторе выводит правильные сигналы (stateChanged
и toggled
) d классов. Недавно я также добавил isInMutexGroup
аргумент по ряду причин реализации, и я понимаю, что я повторение кода в обеих производных классов ...
Это первый раз, когда я пытаюсь использовать ООП «для реальной» (первой попытки множественное наследование и абстрактный класс), поэтому, даже если я знаю, что нарушаю красоту концепции ООП, я не знаю, что делать, чтобы получить хорошую иерархию классов ...
Так что, в основном, я ищу решение на этом примере. Но я также ищу рекомендации, общие советы, учебные пособия и т. Д. На самом деле все, что могло мне помочь!
Благодарим за помощь.