2013-04-25 11 views
5

Ho appena iniziato a usare pyqt4. Ho seguito un tutorial (http://zetcode.com/tutorials/pyqt4/) Una cosa che i puzzle me è questa parte:Più finestre in PyQt4?

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

E la ragione di questo spiego qui:

ho fatto un piccolo programma che si apre più quattro finestre ad eccezione di la prima finestra principale. Così ho provato a replicare ciò che vedevo funzionava con la finestra principale e ho creato una classe per ogni nuova finestra e ho cercato di fare come in precedenza. Attualmente appare così:

def main2(): 
    #app = QtGui.QApplication(sys.argv) 
    ex2 = Settings() 
    sys.exit(app.exec()) 

Come potete vedere, l'ho modificato. Se avessi lasciato la prima riga nella funzione non commentata, il programma si sarebbe bloccato. Ho provato a fare a meno del file sys.exit (app.exec_()) ma ciò renderebbe la nuova finestra chiusa dopo pochi millisecondi. In questo modo, però, tutto funziona e funziona. Solo questo nella finestra di comando, viene visualizzato un messaggio di errore. Non so come risolvere questo problema, dal momento che non riesco a rimuovere l'ultima riga e non so cosa sostituire l'app "" con.

So che probabilmente sto facendo la finestra sbagliata dall'inizio, ma non so come rendere queste finestre aperte dalla finestra originale in nessun altro modo. Non sono stato in grado di ottenere nient'altro per funzionare, e questo almeno funziona e funziona proprio ora. Quindi l'unico problema sono i messaggi di errore nel prompt, sarebbe bello sbarazzarsi di loro :)

Grazie per qualsiasi aiuto (quelli complicati e facili)!

dimenticato di dire, ho fatto le lezioni iniziano in questo modo:

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

e

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

e Impostazioni-finestra ho aperto chiamando Principale2()

risposta

6

È necessario creare un e solo una QApplicazione nel tuo programma.

Tenere presente che la programmazione della GUI è basata su eventi, dichiarare prima i widget e quindi eseguire il ciclo principale con app.exec(), quando l'utente chiude la domanda, resi app.exec().

Lo scopo di QApplicazione è gestire gli eventi utente e propagarli al codice con i segnali Qt. Ti suggerisco di controllare Qt documentation, è molto completo, anche se si tratta di programmatori C++.

Così, per esempio, un modo per creare due widget sarebbe:

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

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

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

Grazie, che non chiaro alcune cose. Ma non posso mostrare tutte le finestre contemporaneamente. Innanzitutto è la QMainWindow che deve essere mostrata all'avvio, e da lì dipende ciò che verrà aperto, dal momento che posso scegliere diverse opzioni nella barra dei menu. Ad esempio una finestra di aiuto o una finestra delle impostazioni. –

+1

@right_there: è necessario creare (o almeno mostrare) la finestra delle impostazioni in risposta a un evento, vedere il tutorial che hai seguito sugli eventi: http://zetcode.com/tutorials/pyqt4/eventsandsignals/ – Julien

+0

Oh, I ' ce l'ho fatta! Semplicemente non voglio mettere tutto il codice qui, è come 560 linee. Ho tutto funzionante, la finestra si apre quando clicco sui pulsanti.Ho una bella GUI con barra dei menu, ho sistemato tutti i pulsanti nella finestra delle impostazioni ecc. È solo che getta messaggi di errore su ciò che ho descritto nel primo post e non so come cambiare tutto. Forse dovrei fornire altro codice qui? –