Python PyQt 子类中回调主类的函数,回调

有时我们需要在子类计算完成后,回调主类的方法显示数据;

这时我们可以用以下方式,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.工作原理:

  1. 主类 MainWindow

    • 实例化子类 SubClass,并将自身实例传递给子类。
    • 定义了一个函数 main_function,供子类调用。
  2. 子类 SubClass

    • 在初始化时接收主类的实例引用。
    • 通过保存的主类实例调用 main_function
  3. 按钮交互:

    • 单击按钮时,触发主类的 call_subclass_function
    • call_subclass_function 调用子类的 trigger_main_function,进而调用主类的 main_function

这样实现了子类通过回调访问主类的方法。如果你需要更复杂的逻辑,可以扩展这种模式,比如通过信号与槽实现。

相关推荐
郝学胜-神的一滴12 小时前
系统设计:新鲜事系统扩展与优化
java·python·职场和发展·php·软件工程·软件构建
思绪无限12 小时前
YOLOv5至YOLOv12升级:零售柜商品检测软件的设计与实现(完整代码+界面+数据集项目)
人工智能·python·深度学习·目标检测·计算机视觉·零售柜商品检测·yolov12
zl_dfq12 小时前
Python学习6 之 【Lambda表达式、列表与元组、推导式】
python
kishu_iOS&AI12 小时前
深度学习 —— 正则化&批量归一化BN
人工智能·pytorch·python·深度学习
天天进步201512 小时前
Python全栈项目实战:自建高效多媒体处理工具
开发语言·python
waterHBO12 小时前
python + fast-wahisper 读取麦克风,实现语音转录,而且是实时转录。
开发语言·python
reasonsummer12 小时前
【教学类-160-09】20260417 AI视频培训-练习010“豆包AI视频《熊猫找朋友》+豆包图片风格:水墨画”
python·音视频·豆包视频
JaydenAI12 小时前
[FastMCP设计、原理与应用-15]挂载一个MCP服务器就像挂载一个目录一样容易
python·ai编程·ai agent·mcp·fastmcp
甄心爱学习12 小时前
【项目实训(个人4)】
前端·vue.js·python
西兰先森12 小时前
使用Antv G6渲染neo4j知识图谱数据
python·知识图谱·neo4j