Defaultwerte vorgeben

Fragen zu Tkinter.
Antworten
Benutzeravatar
Spooner
User
Beiträge: 3
Registriert: Montag 26. November 2018, 00:17

Hallo zusammen

Da ich hier neu bin und auch die Programmierung für mich noch bei den Wurzel steckt stelle ich mich gerne kurz vor.
Ich bin 28 Jahre alt, komme aus der Schweiz und beschäftige mich in der Freizeit mit einigen Projekten als Hobby.
Aktuell geht es bei mir um ein kleines Programm mit dem ich später verschiedene Sensoren anzeigen, überwachen und ggf. mit einem Relais auf die Werte reagieren will.
Die Optische Umgebung habe ich vorab mal mit "PAGE" erstellt und bearbeite es momentan in PyCharm. (Python 3)

Nun zu meinem "Problem" (Ich habe in der Suche nichts passendes gefunden und auch nach 8h Google keine Lösung)

Es wurden diverse Labels, Checkboxen etc. auf der Oberfläche erstellt, was auch alles gut aussieht und im Code anpassbar ist.
Da ich z.B. die Hintergrundfarbe der Labels und noch andere Attribute angepasst habe wird jetzt aber bei jedem einzelnen Widget die Anpassung geschrieben.
Ich bin mir ziemlich sicher, das es möglich ist generell irgendwo zu sagen wie eine neue Checkbox oder Label aussehen muss wenn es erstellt wird. Nur finde ich nicht den richtigen Weg das zu schreiben, da meine Kenntnisse noch sehr Bescheiden sind.

Wenn mir da jemand Hilfestellung geben könnte würde mir das den Code direkt um 2/3 verkleinern, was es wesentlich übersichtlicher und kompakter machen würde.

Hier ein Beispiel wo die Checkboxen eigentlich gleich sind, was dann ja nicht immer komplett neu verfasst werden müsste. Um später die Farbe zu ändern ist es auch sehr aufwändig.

Code: Alles auswählen

        self.Checkbox_Tier3 = tk.Checkbutton(top)
        self.Checkbox_Tier3.place(relx=0.038, rely=0.604, relheight=0.042, relwidth=0.023)
        self.Checkbox_Tier3.configure(activebackground="#d9d9d9")
        self.Checkbox_Tier3.configure(activeforeground="#000000")
        self.Checkbox_Tier3.configure(background="#81c683")
        self.Checkbox_Tier3.configure(disabledforeground="#a3a3a3")
        self.Checkbox_Tier3.configure(font=font12)
        self.Checkbox_Tier3.configure(foreground="#000000")
        self.Checkbox_Tier3.configure(highlightbackground="#d9d9d9")
        self.Checkbox_Tier3.configure(highlightcolor="black")
        self.Checkbox_Tier3.configure(justify='left')
        self.Checkbox_Tier3.configure(variable=Terramaster_support.CheckTier3)

        self.Checkbox_Tier4 = tk.Checkbutton(top)
        self.Checkbox_Tier4.place(relx=0.038, rely=0.667, relheight=0.042, relwidth=0.023)
        self.Checkbox_Tier4.configure(activebackground="#d9d9d9")
        self.Checkbox_Tier4.configure(activeforeground="#000000")
        self.Checkbox_Tier4.configure(background="#81c683")
        self.Checkbox_Tier4.configure(disabledforeground="#a3a3a3")
        self.Checkbox_Tier4.configure(font=font12)
        self.Checkbox_Tier4.configure(foreground="#000000")
        self.Checkbox_Tier4.configure(highlightbackground="#d9d9d9")
        self.Checkbox_Tier4.configure(highlightcolor="black")
        self.Checkbox_Tier4.configure(justify='left')
        self.Checkbox_Tier4.configure(variable=Terramaster_support.CheckTier4)
Ich danke euch für eure Hilfe

Grüsse aus der Schweiz
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Du kannst alle `configure`-Parameter in ein Wörterbuch (z.B. style) packen und beim Aufruf als Keyword-Argumente übergeben

Code: Alles auswählen

tk.Checkbutton(top, **style)
Benutzeravatar
Spooner
User
Beiträge: 3
Registriert: Montag 26. November 2018, 00:17

Hallo Sirius3

Danke für die schnelle Rückmeldung.
Sowas ähnliches habe ich bereits im Code. Meist du das so?

Code: Alles auswählen

class Toplevel1:
    def __init__(self, top=None):
        """This class configures and populates the toplevel window.
           top is the toplevel containing window."""
        _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
        _fgcolor = '#000000'  # X11 color: 'black'
        _compcolor = '#d9d9d9'  # X11 color: 'gray85'
        _ana1color = '#d9d9d9'  # X11 color: 'gray85'
        _ana2color = '#d9d9d9'  # X11 color: 'gray85'
        font11 = "-family Terminal -size 12 -weight bold -slant roman -underline 1 -overstrike 0"
        font12 = "-family Terminal -size 14 -weight normal -slant roman -underline 0 -overstrike 0"
        font13 = "-family Terminal -size 12 -weight normal -slant roman -underline 0 -overstrike 0"
        font14 = "-family Terminal -size 9 -weight bold -slant roman -underline 0 -overstrike 0"
        font15 = "-family Terminal -size 9 -weight bold -slant roman -underline 1 -overstrike 0"
        font9 = "-family {Segoe UI} -size 9 -weight normal -slant roman -underline 0 -overstrike 0"
        self.style = ttk.Style()

        if sys.platform == "win32":
            self.style.theme_use('winnative')
        self.style.configure('.', background=_bgcolor)
        self.style.configure('.', foreground=_fgcolor)
        self.style.configure('.', font="TkDefaultFont")
        self.style.map('.', background=[('selected', _compcolor), ('active', _ana2color)])
Wenn ich jetzt z.B. diverse Parameter von den Checkbuttons vorab ändern will, wie müsste ich das einbauen?
Antworten