PyQt connect SIGNAL to multiple SLOT
pyqt4, python, qt
Solution
The way you're doing it is fine. If you had quite a few things to do you could connect to a new function that handles everything for you.
I notice in your connected `getValue` functions you're getting the value straight from the object; are you aware that the value is passed as a parameter with the `valueChanged(int)` signal? If you change your `getValue` functions to accept an additional parameter there will be no need to get the value directly from the object. Of course you could do away with the `getValue` function all together and issue your print statement in the helper function.
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
Also, and this is down to preference, there is a new style for signals and slots which can make the code a little easier to read. It would change the
self.connect(self.dial, SIGNAL("valueChanged(int)"), self.dial_value_changed)
self.connect(self.spinbox, SIGNAL("valueChanged(int)"),self.spinbox_value_changed)
lines above to
self.dial.valueChanged.connect(self.dial_value_changed)
self.spinbox.valueChanged.connect(self.spinbox_value_changed)
But for the original question and for the two things you're doing I'd just connect the signal twice rather than have a helper function.
Problem
I am trying to learn `PyQt` from `rapid gui programming with python and qt` and currently learning `Signals` and `Slots`. Below is a short snippet of my code: ``` 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() ``` What I am trying to achieve here is call `2` SLOTS at once that is `spinbox.setValue` and `getValue_dial` for `dial` object as soon as `ValueChanged(int)` signal is emitted. The above code executes successfully without any errors and `print` the appropriate values as they are changed. Now my question is the above way appropriate to call multiple slots for a single signal.? Can the above two statements(1 & 2) be combined into a single statement. Here is the link for my complete code.