其他分享
首页 > 其他分享> > pyqt信号与对象实例一起发出或无

pyqt信号与对象实例一起发出或无

作者:互联网

我想有一个pyqt信号,该信号可以使用python“ object”子类参数或None发出.例如,我可以这样做:

valueChanged = pyqtSignal([MyClass], ['QString'])

但不是这个:

valueChanged = pyqtSignal([MyClass], ['None'])
TypeError: C++ type 'None' is not supported as a pyqtSignal() type argument type

或这个:

valueChanged = pyqtSignal([MyClass], [])
TypeError: signal valueChanged[MyObject] has 1 argument(s) but 0 provided

我还尝试了无引号和c等效的“ NULL”.但是似乎都不起作用.我需要做些什么才能使这项工作?

解决方法:

尝试失败的原因有两个.

首先,pyqtSignal的type参数接受python类型对象或给出C对象名称的字符串(即Qt类).

因此,要将None用作参数类型,必须传递type(None)而不是字符串“ None”.

其次,“无”是一种特殊情况,以允许使用信号的默认过载而无需显式选择签名.

因此,如果您这样创建信号:

valueChanged = QtCore.pyqtSignal([MyClass], [type(None)])

然后尝试发出这样的信号:

self.valueChanged[type(None)].emit(None)

您将收到如下错误:

TypeError: Window.valueChanged[MyClass].emit():
argument 1 has unexpected type 'NoneType'

因此,使用valueChanged [type(None)]实际上会导致选择默认签名([MyClass]),然后将收到不匹配的参数None.

标签:pyside,pyqt,python
来源: https://codeday.me/bug/20191101/1979892.html