menubar QAction Dialog wird gleich bei Start statt mit Klick aufgerufen

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,

bisher habe ich fast alles mit Buttons gelöst. Nun wage ich mich mal an die Menüs heran, was ja nicht so schwer sein kann. Dachte ich ;)

Ich habe folgendes Problem

Ich habe mir ein Mainwindow mit QTDesigner zusammengebaut und habe dort einfach den Menüpunkt "Konfigurieren" in einer Menubar. Wenn ich darauf klicke, dann soll der Konfigurationsdialog aufgerufen werden. Mein Problem ist, dass die Anwendung direkt mit dem Dialog gestartet wird und nicht mit dem MainWindow, sobald ich den triggered connect usw. einfüge.

Code: Alles auswählen

class MainWindowOperations:
    def __init__(self, ui):
        self.__msbx = MessageBoxes()
        self.__ui = ui
        self.check_button = ui.runCheckPB 
        ...
        self.config_dialog = ConfigDialog()
        self.init_check_button()
        self.init_actionKonfigurieren()
    
    
    def init_check_button(self):
        self.__check_button.clicked.connect(
            self.run_check)      
   
   def init_actionKonfigurieren(self):
       self.actionKonfigurieren.triggered.connect(self.open_configuration_dialog())
Ich hatte gedacht, dass ich mit triggered.connect ähnlich wie beim Button ein click.connect mache und dann den Dialog eben öffne wenn ich auf den entsprechenden Menüpunkt klicke.

Was mache ich da falsch?

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

Das was alle falsch machen: () hinter deine Rückruffunktion zu schreiben, so dass sie gleich ausgeführt wird, statt nur registriert.

Die Namen sind etwas sehr gemischt. Qt style oder python style, aber camel case mit underscore? 😳
Benutzeravatar
__blackjack__
User
Beiträge: 14004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nieselfriem: *Du* ruft `self.open_configuration_dialog` auf. Das tust Du mit `self.run_check` *nicht*. Ein Aufruf ist ein Ausdruck der etwas aufrufbares ergibt (das willst Du) gefolgt von Klammern mit optionalen Argumenten (das willst Du nicht).

Die doppelten führenden Unterstriche willst Du auch nicht. Nicht-öffentliche Attribute werden mit *einem* führenden Unterstrich gekennzeichnet.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Sirius3
User
Beiträge: 18253
Registriert: Sonntag 21. Oktober 2012, 17:20

Die vielen init-Methoden sind auch etwas viel, vor allem, weil sie nur aus einer Zeile bestehen. Das kann alles direkt in __init__ aufgerufen werden.
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Mist, das war es. Ich falle auch immer wieder darauf rein. :( ;)

Danke für eure Mühe.
Antworten