Wie kann ich einen PyQt-Modal-Dialog zeigen und Daten aus den Kontrollen abrufen, sobald sie geschlossen sind?

Für einen eingebauten Dialog wie QInputDialog habe ich gelesen, dass ich das machen kann:

text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 'Enter your name:') 

Wie kann ich dieses Verhalten mit einem Dialog emulieren, den ich mir in Qt Designer entwerfe? Zum Beispiel möchte ich gerne:

 my_date, my_time, ok = MyCustomDateTimeDialog.get_date_time(self) 

2 Solutions collect form web for “Wie kann ich einen PyQt-Modal-Dialog zeigen und Daten aus den Kontrollen abrufen, sobald sie geschlossen sind?”

Hier ist eine einfache Klasse, die du verwenden kannst, um das Datum zu veranlassen:

 class DateDialog(QDialog): def __init__(self, parent = None): super(DateDialog, self).__init__(parent) layout = QVBoxLayout(self) # nice widget for editing the date self.datetime = QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.datetime) # OK and Cancel buttons buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) buttons.accepted.connect(self.accept) buttons.rejected.connect(self.reject) layout.addWidget(buttons) # get current date and time from the dialog def dateTime(self): return self.datetime.dateTime() # static method to create the dialog and return (date, time, accepted) @staticmethod def getDateTime(parent = None): dialog = DateDialog(parent) result = dialog.exec_() date = dialog.dateTime() return (date.date(), date.time(), result == QDialog.Accepted) 

Und es zu benutzen:

 date, time, ok = DateDialog.getDateTime() 

Ich habe versucht, die Antwort von hluk mit den Änderungen unten zu bearbeiten, aber es wurde abgelehnt, nicht sicher, warum, weil es einige klare Bugs so weit ist, kann ich sehen.

Bugfix 1: entfernte sich selbst. Von self.layout.addWidget (self.buttons)

Bugfix 2: angeschlossene OK- und Abbruch-Tasten zu den korrekten Aktionen

Erweiterung: machte den Code bereit zu laufen, indem Sie die Importe und verbessert das Laufbeispiel

 from PyQt4.QtGui import QDialog, QVBoxLayout, QDialogButtonBox, QDateTimeEdit, QApplication from PyQt4.QtCore import Qt, QDateTime class DateDialog(QDialog): def __init__(self, parent = None): super(DateDialog, self).__init__(parent) layout = QVBoxLayout(self) # nice widget for editing the date self.datetime = QDateTimeEdit(self) self.datetime.setCalendarPopup(True) self.datetime.setDateTime(QDateTime.currentDateTime()) layout.addWidget(self.datetime) # OK and Cancel buttons self.buttons = QDialogButtonBox( QDialogButtonBox.Ok | QDialogButtonBox.Cancel, Qt.Horizontal, self) layout.addWidget(self.buttons) self.buttons.accepted.connect(self.accept) self.buttons.rejected.connect(self.reject) # get current date and time from the dialog def dateTime(self): return self.datetime.dateTime() # static method to create the dialog and return (date, time, accepted) @staticmethod def getDateTime(parent = None): dialog = DateDialog(parent) result = dialog.exec_() date = dialog.dateTime() return (date.date(), date.time(), result == QDialog.Accepted) 

Und es zu benutzen:

 app = QApplication([]) date, time, ok = DateDialog.getDateTime() print("{} {} {}".format(date, time, ok)) app.exec_() 
  • Qt Designer generiert C ++ - Code
  • Shiboken kann nicht importiert werden
  • Pyqt: wie man Elemente aus einem QVBoxLayout entfernt?
  • Wie mache ich Python, QT und Webkit auf einem kopflosen Server?
  • Wie klickbares RGB-Bild ähnlich wie pyqtgraph ImageView?
  • Video-Player mit qt Phonon (mit Python)
  • PyQt Tableview Hintergrundfarbe basierend auf Textwert statt True oder False
  • Pyqt - Änderungsreihe ~ Zelle Collor in TableView
  • Verwenden eines QCompleters in einem QTableView mit Qt und Python
  • Wie kann man die Layouts QHBoxLayout und QVBoxLayout auf pyqt4 ausrichten?
  • PySide - PyQt: Wie kann man die QTableWidget Spaltenbreite als Anteil des verfügbaren Platzes einstellen?
  • Python ist die beste Programmiersprache der Welt.