Checkbox selectcolor im Darkmode ändert seine Farbe nicht

Fragen zu Tkinter.
Antworten
Count
User
Beiträge: 28
Registriert: Donnerstag 28. November 2019, 12:56

Schönen guten Tag.

Ich würde gerne einen "darkmode" in mein Programm mit einbauen.
Soweit funktioniert er auch, nur bei der Checkbox macht er Problem.
Evtl. könnt ihr mir ja helfen, dass "selectcolor" in der Checkbox auch seine Farbe ändert.
bekomme es einfach nicht hin, egal was ich bis jetzt versucht habe.

Alternative wäre den Haken eine andere Farbe zu geben als die Schrift, dazu habe ich allerdings nichts gefunden.

(Das mit den Variablen ist nicht schön, aber es funktioniert ^^)


hier wie ich es mir gedacht habe und nicht funktioniert:

Code: Alles auswählen

from tkinter import *
test = Tk()
c='yellow'								#Standard

def action_dark():
    for widget in test.winfo_children():
        widget.configure(bg='black')
        widget.configure(fg='white')
        test.configure(bg='black')
    c='blue'								#if action_dark()

def action_bright():
    for widget in test.winfo_children():
        widget.configure(bg='white')
        widget.configure(fg='black')
        test.configure(bg='white')
    c='red'								#if action_bright()

menuleiste = Menu(test)
datei_menu = Menu(menuleiste, tearoff=0, fg='black', bg='white',activebackground='red')
datei_menu.add_command(label='dunkl', command=action_dark)
datei_menu.add_separator()
datei_menu.add_command(label='hell', command=action_bright)
menuleiste.add_cascade(label='Farbe', menu=datei_menu)
test.config(menu=menuleiste)

Label(test, text='test \n auch ein test').pack(side=TOP, anchor=CENTER, ipady=15)

var1 = IntVar()
Checkbutton(test, text='test1', selectcolor=c, variable=var1).pack(side=TOP, anchor=W, ipadx=70, ipady=5)
var2 = IntVar()
Checkbutton(test, text='test2', selectcolor=c, variable=var2).pack(side=TOP, anchor=W, ipadx=70, ipady=5)
var3 = IntVar()
Checkbutton(test, text='test3', selectcolor=c, variable=var3).pack(side=TOP, anchor=W, ipadx=70, ipady=5)
      
test.mainloop()

Danke im Voraus.
Benutzeravatar
pyranha
User
Beiträge: 4
Registriert: Mittwoch 4. Dezember 2019, 17:13

Hallo zusammen,

ich denke, die Ursache ist, dass in Deinen Funktionen action_dark() bzw. action_bright() lediglich der Wert der Variable c geändert wird. Allerdings ändert sich damit nicht automatisch die entsprechende Eigenschaft des widgets.

Eventuell kommst Du weiter, wenn Du:

1) Beim Erstellen der Checkbuttons diese je einer Variablen zuweist und seperat(!) packst....

Code: Alles auswählen

var1 = IntVar()
c_button1 = Checkbutton(test, text='test1', selectcolor=c, variable=var1)
c_button1.pack(side=TOP, anchor=W, ipadx=70, ipady=5)
2) In den Funktionen die Eigenschaft selectcolor per config änderst.

Code: Alles auswählen

def action_dark():
    for widget in test.winfo_children():
        widget.configure(bg='black')
        widget.configure(fg='white')
        test.configure(bg='black')
    c_button1.config(selectcolor='blue')
Vielleicht hilft Dir das weiter!
Schöne Grüße!
"He who laughs most, learns best" - John Cleese
Count
User
Beiträge: 28
Registriert: Donnerstag 28. November 2019, 12:56

Danke, das klappt !

Ist bestimmt nicht die schönste Lösung, aber es ist eine Lösung.
Und bei meinem Code, der eh noch viel zu lang ist fällt das auch gar nicht auf :D
Antworten