PyQt4 - Okienka i problem z ich zamykaniem po wciśnięciu przycisku

0

Cześć,

Pisze programin w PyQT4
Mam główne okno A, w nim przycisk, który otwiera okno B.
Co zrobić, aby po naciśnięciu pewnego przycisku w oknie B, okno B się zamknęło ? - W jaki sposób to oprogramować ?
Chciałbym też pewne wartości wprowadzone w oknie B użyć w oknie A

0

Poczytaj o sygnałach i slotach w Qt.

Np. http://zetcode.com/tutorials/pyqt4/eventsandsignals/

0
  1. Okno B powinno być typu Dialog.

  2. Dla porządku w kodzie powinieneś oddzielnie trzymać źródło okna wygenerowane z QtDesignera oraz oddzielnie trzymać implementację tego okna - implementacja działania okna to klasa, która dziedziczy po oknie z QtDesignera.

  3. Podpinanie akcji pod przycisk w oknie B realizuje się w ten sposób:

QtCore.QObject.connect(self.btnZamknijOkno, QtCore.SIGNAL("clicked()"), self.akcjaZamknijOkno)

Gdzie self.akcjaZamknijOkno to metoda klasy zamykająca okno, a self.btnZamknijOkno to referencja do obiektu przycisku.
Najlepiej ten kod wykonać na końcu metody setupUi.

  1. Implementację akcji przycisku zamykającego dialog realizuje się następująco:
    def akcjaZamknijOknododajPacjenta(self):
        self.wartosci_zwracane=(unicode(self.EditPesel.text()),unicode(self.EditImie.text()))
        self.dialog.accept()

Gdzie self.dialog to referencja na utworzony obiekt okna (zachowany z drugiego argumentu metody setupUi).
self.wartosci_zwracane może być użyty przez metodę okna A uruchamiającą okno B.
Gdy chcesz zamknąć okno, bez zwracania niczego, to tworzysz przycisk z akcją zawierającą wywołanie: self.dialog.reject()

  1. Metoda okna A wywołująca okno B może wyglądać następująco:
    def odpalOknoB(self):
        wid=QtGui.QDialog()
        ui = OknoB_Implementacja() #wywolanie konstruktora klasy OknoB_Implementacja
        ui.setupUi(wid)
        wid.show()
        if wid.exec_()==QtGui.QDialog.Accepted: # jesli w oknie B wywolano self.dialog.accept()
            print ui.wartosci_zwracane # to robimy cos z wartosciami zwracanymi

Mam nadzieję, że wyciągniesz coś z tego co tu napisałem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1