paf*_*fcu 9 python qt signals pyqt
我有一个对象应该通过发出一个以新值作为参数的信号来表示值已经改变.值的类型可以改变,因此我不确定如何写入信号类型.我知道我可以使用这样的旧式信号来解释这个:
self.emit(SIGNAL("valueChanged(PyQt_PyObject)"), newvalue)
Run Code Online (Sandbox Code Playgroud)
但是我怎么用新式信号写这个呢?
Luk*_*uke 19
首先,您发出的对象需要定义为其类属性的信号:
class SomeClass(QObject):
valueChanged = pyqtSignal(object)
Run Code Online (Sandbox Code Playgroud)
注意,信号有一个类型为object的参数,它应该允许任何东西通过.然后,您应该能够使用任何数据类型的参数从类中发出信号:
self.valueChanged.emit(anyObject)
Run Code Online (Sandbox Code Playgroud)
我是初学者,这是我试图回答的第一个问题,如果我误解了这个问题,请道歉......
以下代码发出一个发送自定义Python对象的信号,插槽使用该类打印"Hello World".
import sys
from PyQt4.QtCore import pyqtSignal, QObject
class NativePythonObject(object):
def __init__(self, message):
self.message = message
def printMessage(self):
print(self.message)
sys.exit()
class SignalEmitter(QObject):
theSignal = pyqtSignal(NativePythonObject)
def __init__(self, toBeSent, parent=None):
super(SignalEmitter, self).__init__(parent)
self.toBeSent = toBeSent
def emitSignal(self):
self.theSignal.emit(toBeSent)
class ClassWithSlot(object):
def __init__(self, signalEmitter):
self.signalEmitter = signalEmitter
self.signalEmitter.theSignal.connect(self.theSlot)
def theSlot(self, ourNativePythonType):
ourNativePythonType.printMessage()
if __name__ == "__main__":
toBeSent = NativePythonObject("Hello World")
signalEmitter = SignalEmitter(toBeSent)
classWithSlot = ClassWithSlot(signalEmitter)
signalEmitter.emitSignal()Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13419 次 |
| 最近记录: |