I'm reading Rapid GUI Programming - Mark Summerfield with Python and QT pg 131. Basically the mechanism is an event table which maps a 'signal' to a 'function/slot' -correct?
self.connect(dial, SIGNAL("valueChanged(int)"), spinbox.setValue) Here, dial.valueChanged -> spinbox.setValue s.connect(w, SIGNAL("signalSignature"), functionName) s.connect(w, SIGNAL("signalSignature"), instance.methodName) s.connect(w, SIGNAL("signalSignature"), instance, SLOT("slotSignature")) Here, w.signalSignature -> functionName -> instance.methodName -> instance.slotSignature If signalSignature is a C++ implemented thingy then we got to pass type info as part of the mapping so "signalSignature(int, float, const char *). PyQT signals are any type and any number of args.. If the Slot-function is implemented in C++ it's better to use the SLOT() mechanism: self.connect(dial, SIGNAL("valueChanged(int)"), spinbox, SLOT("setValue(int)")) Here, we are mapping dial.valueChanged(int) --> spinbox.setValue(int) ---- The part i found tricky was this: class ZeroSpinBox(QSpinBox): zeros = 0 def __init__(self, parent=None): super(ZeroSpinBox, self).__init__(parent) self.connect(self, SIGNAL("valueChanged(int)"), self.checkzero) def checkzero(self): if self.value() == 0: self.zeros += 1 self.emit(SIGNAL("atzero"), self.zeros) ZeroSpinBox.valueChanged -> ZeroSpinBox.checkzero? Why is he mapping back to himself? Shouldn't it be widget-to-widget? Then he raises a signal 'atzero' with one arg - the lack of a atzero() implies it's a 'short-circuit' signal so self.zeroes is a python data type. And in the book he says: ####################### Here is how we connect to the signal in the form’s __init__() method: zerospinbox = ZeroSpinBox() ... self.connect(zerospinbox, SIGNAL("atzero"), self.announce) Again, we must not use parentheses because it is a short-circuit signal. And for completeness, here is the slot it connects to in the form: def announce(self, zeros): print "ZeroSpinBox has been at zero %d times" % zeros ########################### Whaaa...t?? Could someone explain what exactly is his grand design besides being awfully circuitous? So he has some other Form thingy.. and in that he sets up another mapping from ZeroSpinBox.atzero --> ZeroSpinBox.announce ???? where's announce and atzero defined? -- https://mail.python.org/mailman/listinfo/python-list