2013-04-25 10 views
5

Ich habe gerade mit Pyg4 begonnen. Ich folgte ein Tutorial (http://zetcode.com/tutorials/pyqt4/) Eine Sache, die mir Rätsel dieser Teil ist:Mehrere Fenster in PyQt4?

def main(): 
    app = QtGui.QApplication(sys.argv) 
    ex = GUI() 
    sys.exit(app.exec()) 

Und der Grund dafür erklären ich hier:

Ich habe ein kleines Programm aus, das vier weitere Fenster öffnet sich mit Ausnahme das erste Hauptfenster. Also habe ich versucht zu replizieren, was ich mit Haupt-Fenster arbeitete und erstellt eine Klasse für jedes neue Fenster und versuchte, mit dem oben genannten zu tun. Derzeit sieht es so aus:

Wie Sie sehen können, habe ich es geändert. Wenn ich die erste Zeile in der Funktion unkommentiert verlassen würde, würde das Programm abstürzen. Ich habe versucht, ohne die sys.exit (app.exec_())-Teil, aber das würde nur das neue Fenster schließen Millisekunden, nachdem es angezeigt wurde. So läuft und läuft alles. Nur das im Befehlsfenster wird eine Fehlermeldung angezeigt. Ich weiß nicht, wie ich das beheben kann, da ich die letzte Zeile nicht entfernen kann, und ich weiß nicht, was ich ersetzen soll "app" mit.

Ich weiß, dass ich die neuen Fenster wahrscheinlich von Anfang an falsch mache, aber ich weiß nicht, wie ich diese Fenster vom ursprünglichen Fenster aus auf andere Weise öffnen kann. Ich konnte nichts anderes zur Arbeit bringen, und das läuft und läuft zumindest jetzt. Also das einzige Problem ist Fehlermeldungen in der Aufforderung, es wäre schön, sie loszuwerden :)

Danke für jede Hilfe (kompliziert und einfach)!

vergessen zu erwähnen, habe ich die Klassen wie folgt beginnen:

class GUI(QtGui.QMainWindow): 
    def __init__(self): 
     super(GUI, self).__init__() 
     self.initUI() 

und

class Settings(QtGui.QWidget): 
    def __init__(self): 
     super(Settings, self).__init__() 
     ...here goes some more... 
     self.initUI2() 

und ich öffne Einstellungen-Fenster von main2 Aufruf()

Antwort

6

Sie müssen erstellen und nur eine QApplication in Ihrem Programm.

Denken Sie daran, dass die GUI-Programmierung ereignisgesteuert ist, zuerst Widgets deklarieren und dann die Hauptschleife mit app.exec() ausführen, wenn der Benutzer Ihre Anwendung beendet, app.exec() zurückgibt.

Der QApplication-Zweck besteht darin, Benutzerereignisse zu behandeln und sie mit Qt-Signalen an Ihren Code weiterzugeben. Ich schlage vor, Sie überprüfen Qt documentation, es ist sehr komplett, auch wenn es C++ - Programmierer zielt.

So zum Beispiel eine Möglichkeit, zwei Widgets wäre zu erstellen:

def main(): 
    app = QtGui.QApplication(sys.argv) 

    ex = QtGui.QWidget() 
    ex.show() 
    ex2 = QtGui.QWidget() 
    ex2.show() 

    sys.exit(app.exec()) 
+0

Danke, dass einige Dinge nicht klar. Aber ich kann nicht alle Fenster gleichzeitig anzeigen. Zuerst wird das QMainWindow beim Start angezeigt, und von da hängt es ab, was geöffnet wird, da ich verschiedene Optionen in der Menüleiste auswählen kann. Ein Hilfefenster oder ein Einstellungsfenster zum Beispiel. –

+1

@right_there: Sie müssen Ihr Einstellungsfenster als Antwort auf ein Ereignis erstellen (oder zumindest anzeigen), siehe das Tutorial, das Sie über Ereignisse verfolgt haben: http://zetcode.com/tutorials/pyqt4/eventsandsignals/ – Julien

+0

Oh, ich ' hab das gemacht! Ich möchte hier nicht den ganzen Code schreiben, es sind 560 Zeilen. Ich habe alles funktioniert, das Fenster geöffnet, wenn ich auf die Knöpfe klicke.Ich habe eine nette GUI mit Menüleiste, ich habe alle Schaltflächen im Einstellungsfenster usw. angeordnet. Es ist nur, dass es Fehlermeldungen über das, was ich im ersten Post beschrieben habe, und ich weiß nicht, wie man alles ändert. Vielleicht sollte ich hier mehr Code zur Verfügung stellen? –