pyqt5 继承python类可以传递信号函数吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pyqt5 继承python类可以传递信号函数吗相关的知识,希望对你有一定的参考价值。

参考技术A 可以。
在pyqt5编程过程中,经常会遇到输入或选择多个参数的问题,把多个参数写到一个窗口中,主窗口会显得很臃肿,所以,一般是添加一个按钮,调用对话框,在对话框中进行参数的选择,关闭对话框将参数返回给主窗口

pyqt提供了一些标准的对话框类,用于输入数据,修改数据,更改应用的设置等,常见的有QFileDialog,QInputDialog,QColorDialog, QFontDialog等,在不同的窗口之间传参数有两种常用的方式,一种在自定义对话框之间通过属性传参,另一种在窗口之间使用信号与槽机制传参,这里主要介绍第一种

单一窗口的数据传递实例

对于具有单一窗口的程序来说,一个控件的变化会影响另一个控件的变化,这中变化利用信号与槽的关系非常容易解决

PyQt5 支持不从 QObject 继承的类中的信号

【中文标题】PyQt5 支持不从 QObject 继承的类中的信号【英文标题】:PyQt5 support for signals in classes not inheriting from QObject 【发布时间】:2017-04-26 12:55:59 【问题描述】:

在“PyQt4 和 PyQt5 之间的差异”部分 (http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html),我可以阅读以下行:

与 PyQt4 不同,PyQt5 支持在未从 QObject 子类化的类中定义属性、信号和槽(即在 mixins 中)。

但是,在“支持信号和插槽”部分 (http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html),我可以阅读:

新信号只能在 QObject 的子类中定义。它们必须是类定义的一部分,并且不能在类定义后作为类属性动态添加。

是我误解了什么还是两句话相互矛盾?

【问题讨论】:

第二次引用正确:) 【参考方案1】:

注意 in mixins 部分。这意味着您可以执行以下操作:

from PyQt5.QtCore import pyqtSignal, QObject

class SignalMixin:
    sig = pyqtSignal()

class Obj(SignalMixin, QObject):
    pass

o = Obj()
o.sig.connect(lambda: print('foo'))
o.sig.emit()

【讨论】:

以上是关于pyqt5 继承python类可以传递信号函数吗的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5快速入门PyQt5信号槽机制

qt 关于信号槽传递的参数问题

python pyqt5 自定义信号和槽

Python需要disconnect信号吗

PyQt5 支持不从 QObject 继承的类中的信号

Python PyCharm利用PyQt5使QPlainTextEdit支持拖放文件,类提升,重写QPlainTextEdit类