alle '*muster*' Funktionen aus einem Modul importieren (auf Klassenebene)

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
gogo555
User
Beiträge: 6
Registriert: Sonntag 27. November 2016, 00:53

Hallo zusammen.
ich arbeite mit eric6 20.2, QtDesigner 5.12.8., Python 3.8.2, 64-Bit, Qt 5.12.8, PyQt 5.14.1

Ich habe ein recht umfangreiches Formular in dem Veränderungen die der Nutzer vornimmt zu anderen Oberflächenänderungen führen - d.h. für jedes Widget gibt's einen 3-Zeiler à la:

Code: Alles auswählen

@pyqtSlot()
def on_textEdit_Anschrift_textChanged(self):
    self.chg(self.textEdit_Anschrift)
ich habe diese ~50 Slots/Funktionen in eine eigene Datei ausgelagert (.ABC_Dialog_includes) und importiere sie auf Class-Ebene mit folgendem Code:

Code: Alles auswählen

class cABC_Dialog(QDialog, Ui_Dialog):
    from .ABC_Dialog_includes import on_checkBox_PnBrief_stateChanged, \
                on_checkBox_PnFax_stateChanged, on_checkBox_PnMail_stateChanged, ... weitere ~ 1600 Zeichen :( 

Die Funktionalität ist in diesem Fall natürlich genau so als ob die Funktionen in der class selbst stehen würden, allerdings muss beim Hinzufügen eines Widgets auch die Import-Zeile geändert werden, und die Codezeile ist natürlich auch ein wenig unhandlich - aber immer noch besser als die einzelnen defs im Modul stehen zu haben...

Gibt es einen einfacheren/übersichtlicheren/universelleren Weg innerhalb einer Klasse aus einem Modul z.B. alle Funktionen ohne "__" zu importieren?

thx
g
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das klingt so, als ob du da massiv mit dynamischer Programmierung arbeiten koenntest. Wenn das Muster immer dermassen gleich ist, dann kannst du die Signale doch mit einer generischen Slot-Implementierung verbinden, die immer das self.chg fuer ein gegebenen Widget aufruft.
gogo555
User
Beiträge: 6
Registriert: Sonntag 27. November 2016, 00:53

Bingo - war bisher nicht notwendig und konnte ich mit Bordmitteln von eric und QT-Designer klickiklicki erledigen. Als Nicht-Informatiker erfordert "dynamische Programmierung und generische Slot-Implementierung" vermutlich einiges an Einarbeitungszeit, da ist die lange Import-Zeile vermutlich schneller (und so lange ist sie ja nicht - wenn der Zeilenumbruch im Editor ausgeschaltet ist seh' ich das Zeug rechts eh' nicht mehr ;) )

Gibt's für dynamische Programmierung bzw. generische Slot-Implementierung mit PyQt empfehlenswerte Links?

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

Fuer mich faellt das unter "programmieren koennnen". Was nicht heisst, dass wenn man das nicht beherrscht, man nicht programmieren kann. Aber das sind einfach Dinge, die man ueber die Zeit lernt, und mit Qt zB auch gar nix zu tun haben. Python hat viele Moeglichkeiten der generischen- und/oder Meta-Programmierung. Entsprechend gibt es da auch kein spezifisches Tutorial.
Antworten