On Sunday 04 May 2008, Lance Gamet wrote:
Hi,
about 3 years ago I did a bit of Qt3 and 4 on C++, now I am trying to do
something in python.
A QMainWindow subclass as my mainwindow. Its basically a frame with no
widgets of its own.
Several QWidget subclasses each representing a mode of the program, these
widgets should appear in the mainwindow depending on what part of the
program is being used.
I have made the main window and a couple of widgets with designer-qt4 and
generate a Ui_Whatever.py with pyuic4 and subclass that.
My problem is I cant get my widgets to appear in the main window.
My MainWindow.py looks like (imports etc skipped):
class MainWindow(QMainWindow, Ui_MainWindow):
def __init___(self):
QMainWindow.__init__(self)
self.setupUi(self)
def newTeamWizardMode(self):
Widget = QWidget()
self.newTeamWizard = CreateNewTeamWizard(Widget)
self.newTeamWizard.setGeometry(QRect(0,0,90, 160))
self.newTeamWizard.setObjectName("newTeamWizard")
self.newTeamWizard.show()
My CreateNewTeamWizard is defined like so:
class CreateNewTeamWizard(QWidget, Ui_CreateNewTeamWizard):
def __init___(self, parent = None):
QWidget.__init__(self, parent)
self.setupUi(self)
In my main program i make the main window and try and add the widget like
this:
app = Qt.QApplication(sys.argv)
mainWindow = MainWindow()
app.connect(app, Qt.SIGNAL("lastWindowClosed()"), app, Qt.SLOT("quit
()"))
mainWindow.newTeamWizardMode()
mainWindow.show()
One thing i tried was changing the CreateNewTeamWizard in
MainWindow.newTeamWizardMode to CreateNewTeamWizard(Widget, self) to
provide the main window as the parent but I get the following error:
self.newTeamWizard = CreateNewTeamWizard(Widget, self)
TypeError: argument 2 of QWidget() has an invalid type
I have looked for examples, but everything I have found is a bit too
simple. Creating a single window or widget, displaying it as the programs
main window and exiting when the window is closed.
I havent found anything to tell me how to make a widget appear in a
mainwindow how I want.
Any tips?
I think QMainWindow.setCentralWidget() is what you are looking for.
If someone can point me to a nice open source program that uses pyqt4
that might help.
The eric4 IDE probably covers most things you'll ever need.
Phil