2013-04-25 16 views
5

Właśnie zacząłem używać pyqt4. I przestrzegać samouczek (http://zetcode.com/tutorials/pyqt4/) jedna rzecz, która mnie zastanawia to ta część:Wiele okien w PyQt4?

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

A powodem tego wyjaśnię tutaj:

zrobiłem mały program, który otwiera kolejne cztery okna, z wyjątkiem pierwsze okno główne. Próbowałem więc powtórzyć to, co zobaczyłem, pracowałem z głównym oknem i stworzyłem klasę dla każdego nowego okna i próbowałem zrobić to samo z powyższym. Obecnie wygląda to tak:

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

Jak widać mam zmodyfikowano go. Gdybym opuścił pierwszą linię w funkcji niekomunikowanej, program się zawiesił. Próbowałem obejść się bez części sys.exit (app.exec_()) , ale to spowodowałoby, że nowe okno zamknęłoby się tylko po milisekundach. W ten sposób wszystko działa i działa. Tyle tylko, że w oknie poleceń wyświetlany jest komunikat o błędzie. Nie wiem, jak to naprawić, ponieważ nie mogę usunąć ostatniej linii, a nie wiem, co zastąpić "" app " z.

Wiem, że prawdopodobnie robię nowe okna źle od samego początku, ale nie wiem, jak zrobić te okna otwarte z oryginalnego okna w jakikolwiek inny sposób. Nie byłem w stanie uzyskać niczego innego do pracy, a to przynajmniej działa i działa teraz. Tak więc jedynym problemem są komunikaty o błędach w podpowiedzi, dobrze byłoby się ich pozbyć :)

Dzięki za pomoc (skomplikowaną i łatwą)!

Zapomniałem wspomnieć, zrobiłem zajęcia zacząć tak:

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

i

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

i otworzyć Ustawienia-okno wywołując main2()

Odpowiedz

6

Musisz utworzyć i tylko jedna aplikacja QApplication w twoim programie.

Należy pamiętać, że programowanie GUI odbywa się na podstawie zdarzeń, najpierw deklaruje się widgety, a następnie uruchamia główną pętlę z app.exec(), gdy użytkownik rezygnuje z aplikacji, zwraca app.exec().

Celem aplikacji QApplication jest obsługa zdarzeń użytkownika i propagowanie ich do kodu za pomocą sygnałów Qt. Proponuję sprawdzić Qt documentation, jest bardzo kompletny, nawet jeśli jest skierowany do programistów C++.

Tak na przykład, sposób, aby utworzyć dwa widżety byłoby:

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

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

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

Dziękuję, że nie wyczyścić pewne rzeczy. Ale nie mogę pokazać wszystkich okien w tym samym czasie. Najpierw jest to QMainWindow, który powinien pojawić się przy starcie, a od tego zależy, co się otworzy, ponieważ mogę wybrać różne opcje w pasku menu. Na przykład okno pomocy lub okno ustawień. –

+1

@right_there: musisz utworzyć (lub przynajmniej pokazać) swoje okno ustawień w odpowiedzi na wydarzenie, zobacz samouczek, który śledziłeś na temat wydarzeń: http://zetcode.com/tutorials/pyqt4/eventsandsignals/ – Julien

+0

Oh, I ' udało się to! Po prostu nie chcę umieszczać tutaj całego kodu, to jest jak 560 linii. Mam wszystko działa, okno otwarte po kliknięciu przycisków.Mam fajny GUI z menokarem, ustawiłem wszystkie przyciski w oknie settingswindow itp. Po prostu wyrzuca komunikaty o błędach o tym, co opisałem w pierwszym poście, i nie wiem jak to wszystko zmienić. Może powinienem podać tutaj trochę więcej kodu? –