Señal de PyQt con argumentos de tipo arbitrario / PyQt_PyObject equivalente para señales de nuevo estilo

Tengo un objeto que debería indicar que un valor ha cambiado al emitir una señal con el nuevo valor como argumento. El tipo de valor puede cambiar, por lo que no estoy seguro de cómo escribir el tipo de señal. Sé que puedo lograr esto utilizando señales antiguas como esta:

self.emit(SIGNAL("valueChanged(PyQt_PyObject)"), newvalue) 

¿Pero cómo escribiría esto usando señales de nuevo estilo?

Soy consciente de una pregunta anterior relacionada con esto pero no se dio una respuesta “real” allí.

Primero, el objeto del que está emitiendo necesita la señal definida como un atributo de su clase :

 class SomeClass(QObject): valueChanged = pyqtSignal(object) 

Observe que la señal tiene un argumento de tipo objeto , que debería permitir que pase cualquier cosa. Entonces, debería poder emitir la señal desde dentro de la clase utilizando un argumento de cualquier tipo de datos:

 self.valueChanged.emit(anyObject) 

Soy un principiante y esta es la primera pregunta que bash responder, así que disculpas si no he entendido bien la pregunta …

El siguiente código emite una señal que envía un objeto Python personalizado, y la ranura usa esa clase para imprimir “Hola mundo”.

 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()