Thanks!<br><br>loadUiType is the way I wanted it to go. The key point I was missing was that ui wouldn&#39;t be a child object of self. The only catch seems to be that TestWindow has to inherit from QMainWindow, which is specified in the ui xml and thus there is no way to know which class it is a priori (except, of course, that I made the ui file). I guess the proper way would be to have TestWindow inherit from widget_class, etc. etc.<br>
<br>Thanks again,<br>Peter<br><br><div class="gmail_quote">On Sun, May 16, 2010 at 7:58 PM, David Boddie <span dir="ltr">&lt;<a href="mailto:david@boddie.org.uk">david@boddie.org.uk</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">On Sat May 15 22:55:42 BST 2010, Peter O&#39;Malley wrote:<br>
<br>
&gt; I&#39;ve created a simple window in Designer but can&#39;t get the<br>
&gt; connectSlotsByName function to connect up the button correctly when I&#39;ve<br>
&gt; loaded the UI with uic.loadUi. I can connect the button manually, or I can<br>
&gt; use pyuic and it works, but I can&#39;t for the life of me figure out why this<br>
&gt; won&#39;t connect. I&#39;ve looked all through the mailing list archives and<br>
&gt; google, but no I can&#39;t find my way out of it.<br>
<br>
</div>It seems that you are doing something different in the two cases you<br>
mention. In the case where you use pyuic, you import the generated module<br>
and instantiate the class it contains. This is instantiated and you set up<br>
the UI and connections with the setupUi() call.<br>
<div class="im"><br>
&gt; import testui<br>
&gt;<br>
&gt; class TestWindow (QtGui.QMainWindow):<br>
&gt;     def __init__(self):<br>
&gt;         QtGui.QMainWindow.__init__(self)<br>
&gt;         self.ui = testui.Ui_MainWindow()<br>
&gt;         self.ui.setupUi(self)<br>
&gt;         self.show()<br>
<br>
</div>Now, when you use the uic module, you are instantiating an instance of a<br>
widget, not just a class containing boilerplate code to set up widgets and<br>
connections.<br>
<div class="im"><br>
&gt; class TestWindow (QtGui.QMainWindow):<br>
&gt;     def __init__(self):<br>
&gt;         QtGui.QMainWindow.__init__(self)<br>
&gt;         self.ui = uic.loadUi(&quot;test.ui&quot;)<br>
&gt;         QtCore.QMetaObject.connectSlotsByName(self)<br>
&gt;         #self.ui.maxButton.clicked.connect(self.on_maxButton_clicked)<br>
&gt;         self.ui.show()<br>
<br>
</div>Calling QMetaObject.connectSlotsByName(self) won&#39;t help because ui isn&#39;t a<br>
child object of self as far as Qt&#39;s object system is concerned. In any case,<br>
ui now contains another QMainWindow instance and you don&#39;t really want that.<br>
<br>
What you may be able to do is to use uic.loadUiType() instead:<br>
<br>
class TestWindow(QtGui.QWidget):<br>
<div class="im">    def __init__(self):<br>
        QtGui.QMainWindow.__init__(self)<br>
</div>        ui_class, widget_class = uic.loadUiType(&quot;test.ui&quot;)<br>
        ui = ui_class()<br>
        ui.setupUi(self)<br>
<br>
Here, loadUiType() returns a class containing the code to set up the UI and<br>
the class to use if you are going to derive a new class using multiple<br>
inheritance. Instead, we just instantiate the UI class and call setupUi() to<br>
set up the UI and connections. Just as with the pyuic approach, you don&#39;t<br>
have to set up the connections with connectSlotsByName() because setupUi()<br>
will do that.<br>
<br>
I&#39;m not sure if this approach is the way people typically do things with the<br>
uic module. It&#39;s been a long time since I used it. Certainly, you have a lot<br>
of freedom to try different approaches to get the result you want.<br>
<font color="#888888"><br>
David<br>
</font><div><div></div><div class="h5">_______________________________________________<br>
PyQt mailing list    <a 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></blockquote></div><br>