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.
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
getValuefunctions you’re getting the value straight from the object; are you aware that the value is passed as a parameter with thevalueChanged(int)signal? If you change yourgetValuefunctions 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 thegetValuefunction all together and issue your print statement in the helper function.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
lines above to
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.