python - 在派生类中执行基类重写方法
问题描述
我有一个 PyQt5 应用程序,该应用程序有一个 QToolBox,它由 2 个不同用户界面的页面组成。
因此,对于 MainWindow 本身,我创建了一个名为BPAPOIApp
class 的基类来执行可能直接对 MainWindow 执行的任何操作。
我还创建了另一个派生类,它BPAPOIApp
为每个 QToolBox 页面继承了该类,因为它们中的每一个都有要完成的单独操作。
在基类中,我有一个方法调用def init_signals
来启动与基类相关的所有动作信号,同时我想def init_signals
在两个派生类中都有另一个(QToolBox 中的 2 页),这意味着该方法将被覆盖。是否有适当的方法来启动init_signals
所有类(基类和派生类)的方法,因为它们都在等待不同的事件发生。
下面是一些相关的代码。
class BPAPOIApp(QWidget):
def __init__(self):
super(BPAPOIApp, self).__init__()
self._widget = QWidget()
self._ui = Ui_Form()
self._widget.setWindowFlag(Qt.FramelessWindowHint)
self._ui.setupUi(self._widget)
self._ui.label.hide()
self.init_signals()
def init_signals(self):
self._ui.close_tbtn.clicked.connect(lambda: self._widget.hide())
self._ui.information.clicked.connect(self.information_display)
self._ui.toolBox.currentChanged.connect(self.reset_info)
def information_display(self):
self._ui.label.setText('Test text')
self._ui.label.show()
下面是BPAApp
课程。
class BPAApp(BPAPOIApp):
def __init__(self):
super(BPAApp, self).__init__()
self.init_signals()
def init_signals(self):
super().init_signals() # try to instantiate base class signals here
self._ui.radio_btn1.toggled.connect(self.option_selected)
self._ui.radio_btn2.toggled.connect(self.option_selected)
if __name__ == '__main__':
bpa = BPAApp()
当我触发information
按钮(self._ui.information)
时,标签没有显示在界面中,这里可能有什么问题?
解决方案
无需self.init_signals()
在派生类中调用,BPAApp.__init__()
因为它已经在父类中被调用BPAPOIApp.__init__()
。当父类调用它时,MRO会将它指向最派生的实现,即派生的BPAApp.init_signals()
(反过来又调用父类BPAPOIApp.init_signals()
)。
推荐阅读
- excel - 在 IF 公式中返回空白而不是 FALSE
- python - QGraphicsItem.setTransformations 不能按预期工作(也:PySide2 与 PyQt5 之间的差异)
- javascript - 在谷歌图表中从第一个点到最后一个点画一条线
- excel - Excel 帮助:动态范围 + 数据验证
- javascript - 从 JavaScript/Typescript 中的异步方法返回对象
- jmeter - Jmeter getHeaderManager() 命令向请求中添加太多标头
- linux - 阻止所有内部流量,除了来自单个端口上特定 IP 的传入流量
- flutter - 在 null 上调用了 getter,但小部件仍然可以正常构建
- deployment - 尽管拥有 gcloud 权限,但我无法部署
- excel - VBA Excel:在另一个工作簿上获取单击的单元格的地址