PyQt, Qt, ein Event-Handler mit vielen Elementen arbeiten
-
19-09-2019 - |
Frage
Ich habe ein paar von Kontrollkästchen auf meiner Form, und ich will nicht separate Event-Handler für jeden schreiben, weil sie alle die gleiche Logik implementieren werden. Stattdessen will ich nur einen Event-Handler schreiben, die über wissen, was Checkbox angeklickt wurde.
z. in Delphi kann ich es auf diese Weise verwendet werden:
function click_handler(sender):
begin
checked_box := sender.tag;
end;
Hier erinnere mich aktuelle geprüft Chiffre in einigen Variablen (Tag-Eigenschaft wurde in Delphi IDE manuell eingestellt).
ich gesucht und nicht finden kann, wie ich diese mit Qt umsetzen kann, weil Ereignishandler nicht sender
Argument hat.
Ich setzte es so, aber es ist nicht bequem:
# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)
# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
self.cb_click(sender=1)
...
def cb_<n>_click:
self.cb_click(sender=n)
# main check box click logic (1 function)
def cb_click(sender):
# do something common for all checkboxes
Danke.
Lösung
Sie können verwenden QObject :: Sender () in Schlitzen um herauszufinden, wer das Signal ausgesendet.
Sie können auch QSignalMapper prüfen wollen, die zur Lösung dieser Probleme genau bestimmt .