有时我们需要在子类计算完成后,回调主类的方法显示数据;
这时我们可以用以下方式,python 确实方便;
1. 子类:
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
# 子类
class SubClass:
def __init__(self, main_instance):
self.main_instance = main_instance # 保存主类实例的引用
def trigger_main_function(self):
# 调用主类的函数
self.main_instance.main_function()
2.主类
# 主类
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt Callback Example")
# 创建按钮并设置布局
self.button = QPushButton("Call SubClass")
self.button.clicked.connect(self.call_subclass_function)
central_widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(self.button)
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
# 实例化子类
self.sub_class_instance = SubClass(self)
def call_subclass_function(self):
print("MainWindow: Calling SubClass function...")
self.sub_class_instance.trigger_main_function()
def main_function(self):
print("MainWindow: main_function called by SubClass")
3.主函数:
# 主程序入口
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
4.工作原理:
-
主类
MainWindow
:- 实例化子类
SubClass
,并将自身实例传递给子类。 - 定义了一个函数
main_function
,供子类调用。
- 实例化子类
-
子类
SubClass
:- 在初始化时接收主类的实例引用。
- 通过保存的主类实例调用
main_function
。
-
按钮交互:
- 单击按钮时,触发主类的
call_subclass_function
。 call_subclass_function
调用子类的trigger_main_function
,进而调用主类的main_function
。
- 单击按钮时,触发主类的
这样实现了子类通过回调访问主类的方法。如果你需要更复杂的逻辑,可以扩展这种模式,比如通过信号与槽实现。