<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:'times new roman', 'new york', times, serif;font-size:12pt"><div>Adam and Phil, thanks for your time. &nbsp;I think I almost understand--but, I still have some confusion.</div><div><br></div><div>Adam, if I follow your suggestion, then parents must really know their children well in order for signalling to work. &nbsp;Which can be the case sometimes. &nbsp;But, what I would like is:</div><div><br></div><div>B generates a custom event (rather than a signal). &nbsp;Upon that event, C can take an action. &nbsp;I think it would be cleaner if neither B nor C required the mediation of A. &nbsp; Why do this? &nbsp;Suppose A has 15 distinct children that need to be triggered upon a signal from B? &nbsp;Or, suppose the heirarchy changes so that instead we have:</div><div><br></div><div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;A</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / &nbsp; &nbsp; &nbsp;\</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B &nbsp; &nbsp; &nbsp; D</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; / &nbsp;\</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C &nbsp;E</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\</div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F</div><div>Now, if a method in C still needs to be triggered based on something that happens in B, then code in A has to be rewritten, along with new code added to D.
 &nbsp;Suppose that I create a new window F that also needs to be triggered by something in B? &nbsp;</div><div><br></div><div>Whereas the essential relationship (communication wise) is still fundamentally between B and C.&nbsp;</div><div>So, it sounds like the signal slot pattern is not the way I want to go, because unless I directly connect B and C then the communication pathway is fragile. &nbsp;</div><div><br></div><div>But, if I generate an EVENT (sorry for the language sloppiness earlier) B, it will go up to A and disappear, unless I propagate it down to the leaves (which could be dangerous). &nbsp; So, the question is, whether or not there's a common bus/dispatcher in which B can put some information and whoever wants to be triggered by it, can?</div><div><br></div><div><br></div><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><br><div style="font-family:arial, helvetica, sans-serif;font-size:13px"><font size="2"
 face="Tahoma"><hr size="1"><b><span style="font-weight: bold;">From:</span></b> Adam W. &lt;awasilenko@gmail.com&gt;<br><b><span style="font-weight: bold;">Cc:</span></b> pyqt@riverbankcomputing.com<br><b><span style="font-weight: bold;">Sent:</span></b> Friday, September 4, 2009 7:53:17 PM<br><b><span style="font-weight: bold;">Subject:</span></b> Re: [PyQt] A simple question about signals and slots<br></font><br>
I keep forgetting to CC the newsgroup...<br><br>Anyway, I think you're still melting the two terms together.<br><br>&gt; what I'm asking is if there's a mechanism in pyqt to emit an event in B<br><br>What you want to do is connect the signal from B to slot C, and signal<br>C to slot B in the namespace of A, not in the namespace of B and C.<br>This is the way its done in all the examples in Summerfield's book.<br>The only event you need to worry about is if there is no signal for<br>move (which I don't think there is), then you need to use an event<br>handler to make your own signal.<br><br>&gt; which can be detected in C....<br><br>Signals are not "detected".&nbsp; After you connect a signal to a slot, and<br>said signal is emitted, the slot immediately gets called.&nbsp; There is no<br>listening needed.<br><br>I hope that makes some sort of sense.&nbsp; If not I can try to rephrase it.<br><br>- Adam<br><br>On Fri, Sep 4, 2009 at 7:32 PM, William&lt;<a
 ymailto="mailto:abecedarian314159@yahoo.com" href="mailto:abecedarian314159@yahoo.com">abecedarian314159@yahoo.com</a>&gt; wrote:<br>&gt; You are correct, what I want is an event. &nbsp;For example, the user does an<br>&gt; action in one window (for example, moving a rectangle around) and when they<br>&gt; are done, it emits an event<br>&gt; (for example,<br>&gt; self.emit(SIGNAL("rectangleMoved"),'moved')<br>&gt; )<br>&gt; , which another window can listen for and when it detects the event, can act<br>&gt; (for example, update a plot). &nbsp;I can do this if the window is higher in the<br>&gt; heirarchy for example if window A in my diagram acts upon an event generated<br>&gt; by B, what I don't know is a clean way for C to receive events generated by<br>&gt; A. &nbsp;I could directly connect things in B and C, but tight coupling seems<br>&gt; likely to lead to less maintainable code. &nbsp;I could &nbsp;let the event pass up to<br>&gt; A and then have
 A connect down to C, but having "god" classes also seems<br>&gt; like a step away from the road to maintainability. &nbsp;So, what I'm asking is<br>&gt; if there's a mechanism in pyqt to emit an event in B, which can be detected<br>&gt; in C....<br>&gt; Thanks,<br>&gt; William<br>&gt; ________________________________<br>&gt; From: Adam W. &lt;<a ymailto="mailto:awasilenko@gmail.com" href="mailto:awasilenko@gmail.com">awasilenko@gmail.com</a>&gt;<br>&gt; To: William &lt;<a ymailto="mailto:abecedarian314159@yahoo.com" href="mailto:abecedarian314159@yahoo.com">abecedarian314159@yahoo.com</a>&gt;<br>&gt; Sent: Friday, September 4, 2009 7:17:35 PM<br>&gt; Subject: Re: [PyQt] A simple question about signals and slots<br>&gt;<br>&gt; If B and C are under the same namespace as A, you can connect Signals<br>&gt; with one of these:<br>&gt; s.connect(w, SIGNAL("signalSignature"), functionName)<br>&gt; s.connect(w, SIGNAL("signalSignature"),
 instance.methodName)<br>&gt; s.connect(w, SIGNAL("signalSignature"), instance, SLOT("slotSignature"))<br>&gt; where s and w are QObjects with s usually being self (in your example<br>&gt; the A object), and w the object whose signal you want to connect.<br>&gt;<br>&gt; But I think you're confusing the signals and slots with events and<br>&gt; event handlers.<br>&gt;<br>&gt; Paraphrasing from Mark Summerfield's book: Qt has two communication<br>&gt; mechanisms: a low-level event-handling mechanism which is similar to<br>&gt; those provided by all other GUI libraries, and a high-level mechanism<br>&gt; which Trolltech have coined "signals and slots".&nbsp; Every QObject<br>&gt; supports some predefined signals/slots.&nbsp; You can create your own<br>&gt; signals and slots too.&nbsp; If you need an even that is not available as a<br>&gt; signal, like capturing a keypress, then you need to use events.<br>&gt;<br>&gt; If a signal is not connected to a slot
 of function, thats the end of<br>&gt; the road for it.&nbsp; However its unhandled events that climb the parent<br>&gt; latter till it eventually hits top window and is discarded.<br>&gt;<br>&gt; Hope that helps,<br>&gt; - Adam<br>&gt;<br>&gt; On Fri, Sep 4, 2009 at 6:38 PM, William&lt;<a ymailto="mailto:abecedarian314159@yahoo.com" href="mailto:abecedarian314159@yahoo.com">abecedarian314159@yahoo.com</a>&gt; wrote:<br>&gt;&gt; Hi! &nbsp;I have what I hope is a simple question about signals and slots. &nbsp;As<br>&gt;&gt; I<br>&gt;&gt; understand it,<br>&gt;&gt; if events aren't acted upon, then they propogate upwards. &nbsp;But suppose you<br>&gt;&gt; have something like this:<br>&gt;&gt; &nbsp;&nbsp; &nbsp;A<br>&gt;&gt; &nbsp;/ &nbsp; &nbsp; \<br>&gt;&gt; B &nbsp; &nbsp; C<br>&gt;&gt;<br>&gt;&gt; Where B and C are children of A. &nbsp;How does B send a signal to C? &nbsp;I'd like<br>&gt;&gt; to keep B and C decoupled<br>&gt;&gt; (for example, B and C
 could be dockwidgets, or even other main windows).<br>&gt;&gt; Is there something like <a target="_blank" href="http://wx.py">wx.py</a>.dispatcher?<br>&gt;&gt;<br>&gt;&gt; Thanks,<br>&gt;&gt; William<br>&gt;&gt;<br>&gt;&gt; _______________________________________________<br>&gt;&gt; PyQt mailing list &nbsp; &nbsp;<a ymailto="mailto:PyQt@riverbankcomputing.com" href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br><span>&gt;&gt; <a target="_blank" href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a></span><br>&gt;&gt;<br>&gt;<br>&gt;<br><br>_______________________________________________<br>PyQt mailing list&nbsp; &nbsp; <a ymailto="mailto:PyQt@riverbankcomputing.com" href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br><a href="http://www.riverbankcomputing.com/mailman/listinfo/pyqt"
 target="_blank">http://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><br></div></div><div style="position:fixed"></div></div><br>



      </body></html>