【问题标题】:PyQt signal with arguments of arbitrary type / PyQt_PyObject equivalent for new-style signals具有任意类型参数的 PyQt 信号 / PyQt_PyObject 等效于新型信号
【发布时间】:2010-12-23 22:44:40
【问题描述】:

我有一个对象,它应该通过发出一个以新值作为参数的信号来表示值已更改。值的类型可以改变,所以我不确定如何编写信号类型。我知道我可以使用这样的旧式信号来完成此操作:

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

但是我将如何使用新式信号来编写这个?

我知道a previous question 与此相关,但那里没有给出“真实”的答案。

【问题讨论】:

    标签: python qt pyqt signals


    【解决方案1】:

    首先,您发出的对象需要将信号定义为其的属性:

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

    请注意,信号有一个 object 类型的参数,它应该允许任何东西通过。然后,您应该能够使用任何数据类型的参数从类中发出信号:

    self.valueChanged.emit(anyObject)
    

    【讨论】:

      【解决方案2】:

      我是初学者,这是我试图回答的第一个问题,如果我误解了这个问题,请原谅......

      以下代码发出一个发送自定义 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()

      【讨论】:

      • 这可能可行,但比使用我在原始问题中展示的旧式 API 更难看。
      猜你喜欢
      • 2011-04-14
      • 1970-01-01
      • 2014-11-14
      • 2012-02-11
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      相关资源
      最近更新 更多