[PyKDE] Using UI files in your app with PyQt4

Detlev Offenbach detlev at die-offenbachs.de
Tue Jan 24 21:28:03 GMT 2006


Please disregard the question. I just found it. Should better go to bed.

Detlev

Am Dienstag, 24. Januar 2006 22:23 schrieb Detlev Offenbach:
> I just installed the latest PyQt4 snapshot, which includes your new
> autoconnect feature. I compiled a .ui file and tried to find some trace of
> this feature. However, I didn't succeed (maybe I am getting tiered). How
> does your autoconnect feature work with compiled .ui files?
>
> Detlev
>
> Am Sonntag, 22. Januar 2006 15:19 schrieb Torsten Marek:
> > Hello all,
> >
> > with the latest pyuic snapshot (should appear somewhere next week) and
> > latest PyQt4/sip snapshot, signal autoconnect now works, which was the
> > last big point for pyuic.
> > If you want to use pyuic code in your own application rather than
> > generating the code statically, there are several possibilities, which I
> > will list here:
> >
> > .: Just load a user interface and display it:
> >
> > import sys
> > from PyQt4 import QtGui
> > from PyQt4.uic import Loader
> >
> > app = QtGui.QApplication(sys.argv)
> > # this is the hard part
> > widget = Loader.loadUi("demo.ui")
> > widget.show()
> > app.exec_()
> >
> > ## eos
> >
> > .: Use a user interface with your own class, incl. signal autoconnect
> >
> > import sys
> > from PyQt4 import QtGui
> > from PyQt4.uic import Loader
> >
> > # the class has to have the same base class as your UI
> > class DemoImpl(QtGui.QDialog):
> >     def __init__(self, *args):
> >         QtGui.QWidget.__init__(self, *args)
> > 	# just pass self
> >         Loader.loadUi("demo.ui", self)
> >
> >     def on_button1_clicked(self):
> >         for s in "This is a demo".split(" "):
> > 	    # self.list is a QListWidget
> >             self.list.addItem(s)
> >
> > app = QtGui.QApplication(sys.argv)
> > widget = DemoImpl()
> > widget.show()
> > app.exec_()
> >
> > ## eos
> >
> > .: Create a type on the fly and use it as a base class (slightly more
> > involved)
> >
> > import sys
> > import cStringIO
> > from PyQt4 import QtCore, QtGui
> > # this time, we use the code generator
> > from PyQt4.uic import Compiler
> >
> > def compileToType(filename):
> >     code_string = cStringIO.StringIO()
> >     widget_info = Compiler.compileUi(file(filename, "r"), code_string)
> >     # the buffer code_string now contains the generated Python code
> >     widget_module = compile(code_string.getvalue(), filename, "exec")
> >     exec widget_module
> >     return locals()[widget_info["uiclass"]]
> >
> > app = QtGui.QApplication(sys.argv)
> > # ui is a class (the same you would get with 'pyuic4 demo.ui'
> > ui = compileToType("demo.ui")
> >
> > class DemoImpl(QtGui.QDialog, ui):
> >     def __init__(self, *args):
> >         QtGui.QWidget.__init__(self, *args)
> >         self.setupUi(self)
> >
> >     def on_button1_clicked(self):
> >         for s in "This is a demo".split(" "):
> >             self.list.addItem(s)
> >
> > form = DemoImpl()
> > form.show()
> > app.exec_()
> >
> > ## eos
> >
> > best regards
> >
> > Torsten

-- 
Detlev Offenbach
detlev at die-offenbachs.de




More information about the PyQt mailing list