鱼C论坛

 找回密码
 立即注册
查看: 2994|回复: 0

PyQt5项目来自不同py文件中的自定义信号与槽函数如何写绑定语句?

[复制链接]
发表于 2022-9-18 21:31:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近遇到个问题想请教下各位高手,不胜感激!

程序有2个窗体,分别是主窗体M和功能窗体A,主窗体M的类定义在m.py文件中,功能窗体A的类定义在a.py文件中
在主窗体M中点击菜单项打开窗体A,在窗体A中点击按钮执行槽函数,槽函数完成一系列任务后,还需要根据情况判断是否让主窗体的按钮和菜单项点亮
现在的思路是:在窗体A中自定义一个信号,当满足条件时就发射信号,信号与主窗体M中自定义的槽函数绑定,该槽函数执行主窗体的按钮和菜单项点亮操作

网上查找的做法是所有内容都写在了一个py文件里:
Class A(QObject):
    此处省略 功能窗体A的定义及部分业务逻辑
    ...
    #自定义信号
    customize_signal=pyqtSignal()

    def f1():
        if conditional is True:
            ...
            #发射信号
            self.customize_signal.emit()

Class M(QObject):
    此处省略 主窗体M的定义及部分业务逻辑
    ...
    #自定义槽函数
    def do_customize_signal(self):
        self.ui.pushButton_calculate.setEnabled(True)
        self.ui.action_calculate.setEnabled(True)

if __name__=='__main__':
    aa=A()
    mm=M()
    #将自定义信号绑定到槽函数
    aa.customize_signal.connect(mm.do_customize_signal)

现在的问题是 我的设计是主窗体M和功能窗体A这2个类在2个py文件中,且在m.py中已经import a.py了,所有的功能实现都在各自类定义里面完成,创建app程序时(app=QtWidgets.QApplication(sys.argv))只生成一个M类实例并显示就完了,没有额外业务逻辑。那么,如何才能将a.py中的自定义信号与m.py中的槽函数绑定呢?需要在a.py中import m.py并创建类实例吗(app中已创建M类实例,此处再创建是不是冗余了)?互相import感觉怪怪的。
另外,我的M类和A类是继承自QMainWindow类,而不是QObject类,是不是就不能做自定义信号这事了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 18:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表