PyQt4 - okienka

SK
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:80
0

Cześć,

Po kliknięciu w kontrolkę na MainWindow, otwiera się QDialog, na którym są m.in. Zapisz / Anuluj.
W jaki sposób można obsłużyć "Zapisz" ? (Chodzi mo głównie o to w jaki sposób zamnkąć / ukryć okno QDialoga, bez zamykania okna MainWindow)

Program piszę w PyQt, jednak przypuszczam, że w Qt (C++) będzie to bardzo podobnie.

tomepaw
  • Rejestracja:ponad 14 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Lublin
  • Postów:218
0

W zasadzie są dwie możliwości:

  1. Slot w klasie dialogu, który obsługuje to co ma się tam robić
  2. Lub w zależności czy dialog został zaakceptowany czy nie zrobienie tego w MainWindow, co wydaje mi się mniej ładnym rozwiązaniem.
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:około godziny
  • Postów:6690
0

W kodzie sygnału "clicked()" Twoich przycisków...

Zapisz:

Kopiuj
self.dialog.accept()

Anuluj:

Kopiuj
self.dialog.reject()

A self.dialog to drugi parametr metody setupUi Twojego okienka.

Zrozumiałem, że implementujesz własne okno dialogowe, a nie gotowe w stylu:

Kopiuj
dialog=QtGui.QFileDialog()
dialog.setDefaultSuffix("py")
filename=str(dialog.getOpenFileName(None,u"Wskaż plik Pythona zawierający dane z obwieszczenia...","", "Skrypt Python (*.py)"))
if filename:
	if self.db.WszystkieLekiUpdate(filename):
		odp = QtGui.QMessageBox.information(None, 'Komunikat', u"Import bazy leków zakończony powodzeniem", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)
	else:
		odp	= QtGui.QMessageBox.critical(None, u'Błąd', u"Nie udało się załadować bazy leków. Upewnij się, że nazwa pliku nie zawiera polskich znaków, a także znaków specjalnych oraz upewnij się, że pochodzi z pewnego źródła.", QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok)

🕹️⌨️🖥️🖱️🎮
edytowany 5x, ostatnio: Spine
SK
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:80
0

Okno zrobiłem w Designerze i konwertuję je na .py.

Ale tak właściwie, to jaka jest różnica pomiędzy slotem accept(), a reject() ?
Pytam, ponieważ w efekcie - okna się zamykają oraz muszę oprogramować sloty - więc accept i reject ma ten sam skutek - chyba, że o czymś nie wiem ?

Spine
  • Rejestracja:około 22 lata
  • Ostatnio:około godziny
  • Postów:6690
0

Nie wiesz o czymś :)

No dobra... masz fragment:

Kopiuj
wid.show()
if wid.exec_()==QtGui.QDialog.Accepted:
    ...
else:
    pass

wid jest typu QDialog.

Pojaśniło się :) ?


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.