QDialog mit Buttonbox-Event Accept schließen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

ich habe mit QT-Designer mir einen Dialog gebaut. Dort habe ich eine Buttonbox mit den Standartbutton OK und Close engefügt. Nun möchte ich gerne, dass auch drücken des Buttons das Speichern der Daten ausgelöst wird und ein Hinweisdialog quasi Fragt. "Möchtest du die Daten speichern und den Dialog beenden? Ja/Nein". So weit so gut. Nur finde ich leider keine möglichkeit ein event auszuläsen, dass den Dialog beendet.

Mein Dilaog wird wie folgt geöffnet:

Code: Alles auswählen

    def open_customer_order_dialog(self):
        cust_new_prod_order_dialog = QtWidgets.QDialog()
        self.cust_new_prod_order_dialog.setupUi(cust_new_prod_order_dialog)
        new_prod_order = CustomerOrderOperations(
            self.cust_new_prod_order_dialog, self.__customer_number) #Klasse mit allen Operationen die für den Dialog relevant sind
        cust_new_prod_order_dialog.exec_()
        # Aktualsierung der Bestelltabelle nach schliessen des Dialoges
        self.render_customer_order_table()

Code: Alles auswählen

class CustomerOrderOperations:
    def __init__(self, dialog, customer_id=0):
        self.msbx = MessageBoxes()
        self.dialog = dialog
        ...
        init_button_box()
        
        
     def init_button_box(self):
        self.__buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(False)
        self.__buttonBox.button(QtWidgets.QDialogButtonBox.Ok).clicked.connect(self.create_customer_order)   
        
        
     def create_customer_order(self):
        ret = self.__msbx.info_box("Sollen die Kundendaten jetzt gespeichert werden?", "YESNO")
        if ret == QMessageBox.Yes:
            do = DatabaseOperations()
            dpop_return = do.insert_customer_order(self.__customer_id, self.cart_engine.get_warenkorb(), self.order_sum,
                                                   self.calc_summery_sum(), self.shipping,
                                                   self.__order_date_ed.date().toPyDate())

            if dpop_return != 0:
                self.__msbx.show_database_error_msg_bx(dpop_return)
            else:
                self.__msbx.show_message_data_saved_msg_bx()
            self.dialog.close() # Das wäre super wenn das gehen würde
Wie kann ich den Dialog nach dem bestätigen des Speicherns schließen lassen?

VG niesel
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man soll exec nicht mehr verwenden. Sondern Open. Und es gibt ein finished Signal.

https://doc.qt.io/qt-5/qdialog.html#finished
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Gibts es dazu ein paar beispiele?

Alles was ich zu QDialog finde (außer in der original Doku) ist im PyQT-Kontext mit exec_()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie immer gilt bei Qt: C++ hat mehr und bessere Beispiele. An denen solltest du dich orientieren.
Antworten