Linking Python to multiple qt forms
trzewiczek
trzewiczek at trzewiczek.info
Mon Jan 11 18:54:54 EST 2010
On 01/11/2010 11:57 PM, Zabin wrote:
> Hey!
>
> I am new to PyQt programming and am trying to activate a secondary qt
> form from a primary form. I am unsure as to how this will work as i am
> using pyuic4 to convert .ui file to .py and then importing it by:
>
> from SimLCM_GUI import Ui_main
>
> I am unsure as to how the self.ui....commands will function if there
> are two such .ui files.
>
> Thanks in advance for any advice!
>
> Cheers
> Zabin
>
The easiest way for me was to create three classes - two for each form
created in QDesigner and one that holds them as objects. If you want to
switch from one to another you can emit a SIGNAL to the form's SLOT
setVisible(bool) to hide it and another to the other to show it. My
code looks sth like that:
#
# imports
from options_ui import Ui_options
from main_ui import Ui_main
#
# class for the first ui form
class OptionsPanel(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_options()
self.ui.setupUi(self)
#
# class for the second ui form
class MainPanel(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_main()
self.ui.setupUi(self)
#
# holder class for the panels
class MyApp(QtGui.QWidget):
def __init__(self, parent = None):
QtGui.QWidget.__init__(self, parent)
self.setWindowTitle("My App")
self.options_panel = OptionsPanel(self)
self.main_panel = MainPanel(self)
QtCore.QObject.connect(self, QtCore.SIGNAL("main(bool)"),
self.main_panel, QtCore.SLOT("setVisible(bool)"))
QtCore.QObject.connect(self, QtCore.SIGNAL("options(bool)"),
self.options_panel, QtCore.SLOT("setVisible(bool)"))
self.showMain()
#
# functions that toggle the views
def showOptions(self):
self.emit(QtCore.SIGNAL("main(bool)"), False)
self.emit(QtCore.SIGNAL("options(bool)"), True)
def showMain(self):
self.emit(QtCore.SIGNAL("options(bool)"), False)
self.emit(QtCore.SIGNAL("main(bool)"), True)
As I said - that works for me. If there's a better way, being a new to
PyQt4 I'm looking for it as well!
Best from Poland,
trzewiczek
More information about the Python-list
mailing list