Сигнал PyQt с аргументами произвольного типа / эквивалент PyQt_PyObject для сигналов нового стиля

У меня есть объект, который должен сигнализировать, что значение изменилось путем испускания сигнала с новым значением в качестве аргумента. Тип значения может измениться, и поэтому я не уверен, как писать тип сигнала. Я знаю, что я могу согласиться с этим, используя сигналы старого стиля:

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

но как я могу написать это, используя сигналы нового стиля?

Я знаю о предыдущем вопросе, связанном с этим, но никакого «реального» ответа там не было.

2 Solutions collect form web for “Сигнал PyQt с аргументами произвольного типа / эквивалент PyQt_PyObject для сигналов нового стиля”

Во-первых, для объекта, который вы испускаете, требуется сигнал, определяемый как атрибут его класса :

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

Обратите внимание, что у сигнала есть один аргумент объекта типа, который должен пропускать что-либо. Затем вы должны иметь возможность испускать сигнал из класса, используя аргумент любого типа данных:

 self.valueChanged.emit(anyObject) 

Я новичок, и это первый вопрос, на который я пытаюсь ответить, поэтому извиняюсь, если я неправильно понял вопрос …

Следующий код испускает сигнал, который отправляет пользовательский объект 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() 
  • Qt не позволяет мне создать пункт меню, названный в честь моего приложения, со строками «О», «Предпочтения» или «Завершить?».
  • Иконка окна Exe в PyQt4
  • Пример CodeEditor в pyqt
  • Можно ли запросить QQbject PyQt4, чтобы определить, был ли поврежден основной экземпляр C ++?
  • Как отсортировать элементы в Qt QListview с помощью Qt.UserRole
  • PySide: QMetaObject.connectSlotsByName испускает предупреждения «Нет соответствующего сигнала ...», но все еще работает ..?
  • Python: QWidget: должен создать QApplication перед QPaintDevice
  • Обертка C ++ Qt-виджета для использования в Python с PySide
  • Python - лучший язык программирования в мире.