PyQt将信号连接到多个插槽


问题内容

我努力学习PyQt,从rapid gui programming with python and qt目前的学习SignalsSlots

以下是我的代码的一小段:

self.connect(self.dial, SIGNAL("valueChanged(int)"),self.spinbox.setValue) #1
self.connect(self.dial, SIGNAL("valueChanged(int)"),self.getValue_dial)    #2
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.dial.setValue)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.getValue_spinbox)

def getValue_dial(self):
        print self.dial.value()

def getValue_spinbox(self):
        print self.dial.value()

我想在这里实现的是呼叫2在插槽一次是spinbox.setValuegetValue_dialdial对象,一旦ValueChanged(int)信号被发射。

上面的代码成功执行,没有任何错误,并且print更改了相应的值。

现在我的问题是上述方法适合于为单个信号调用多个插槽吗?

可以将以上两个语句(1&2)合并为一个语句。

这是我完整代码的链接。


问题答案:

您的操作方式很好。如果您要做的事情很多,则可以连接到一个为您处理所有事情的新功能。

我注意到在您连接的getValue函数中,您直接从对象中获得了价值。您是否知道该值与valueChanged(int)信号一起作为参数传递?如果将getValue函数更改为接受附加参数,则无需直接从对象获取值。当然,您可以getValue一起删除该函数,并在helper函数中发布打印语句。

self.connect(self.dial, SIGNAL("valueChanged(int)"), self.dial_value_changed)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.spinbox_value_changed)

def dial_value_changed(self, value):
    self.spinbox.setValue(value)
    self.getValue_dial(value)

def spinbox_value_changed(self, value):
    self.dial.setValue(value)
    self.getValue_spinbox(value)

def getValue_dial(self, value):
        print value

def getValue_spinbox(self, value):
        print value

同样,这也取决于偏好,信号和插槽都有一种新样式,可以使代码更易于阅读。它将改变

self.connect(self.dial, SIGNAL("valueChanged(int)"), self.dial_value_changed)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.spinbox_value_changed)

以上行

self.dial.valueChanged.connect(self.dial_value_changed)
self.spinbox.valueChanged.connect(self.spinbox_value_changed)

但是对于最初的问题以及您正在做的两件事,我将信号连接两次而不是具有辅助功能。