Seite 1 von 1
Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
Verfasst: Donnerstag 25. April 2019, 15:02
von World_of_Tanks
Hallo zusammen!
Ich bin völlig neu in Python und experimentiere gerade mit Dropdown-Menüs. Ich möchte das sich die Schriftfarbe der Anzeige (des Dropdowns) ändert, wenn ich einen gewissen Menüpunkt auswähle. Das habe ich mit meinen rudimentären Kenntnissen auch hinbekommen (es geht wohl auch besser). Mein Problem ist, dass sich die Farbe zurückändert, wenn ich mit der Maus über das Dropdown-Menü fahre (von rot zu schwarz). Gibt es eine Möglichkeit das zu verhindern? Oder sollte ich es ganz anders aufziehen? Hier der aktuelle Stand.
from tkinter import *
import tkinter as tk
def select(event):
if akt.get() != "TW":
dd_Menu.config(fg="red")
dd_Menu.update()
else:
dd_Menu.config(fg="black")
dd_Menu.update()
main_menu = Tk()
akt = StringVar(main_menu)
auswahl = ["TW", "LIB", "VT", "RVT", "LVT", "MMF", "RMF", "LMF", "SPM", "MST", "RST", "LST"]
dd_Menu = OptionMenu(main_menu, akt, command=select, *auswahl)
dd_Menu.pack()
main_menu.mainloop()
Re: Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
Verfasst: Donnerstag 25. April 2019, 16:44
von __blackjack__
@World_of_Tanks: Wahrscheinlich nicht ganz zu schwarz sondern ein bisschen heller als Schwarz – das ist die aktive Vordergrundfarbe, die angezeigt wird, wenn man mit der Maus über dem Menü ist.
Sonstige Anmerkungen: Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen: Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
Die erste Importzeile sollte man nicht machen sondern die zweite auch tatsächlich verwenden.
Auf Modulebene sollte nur Code stehen der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Code: Alles auswählen
#!/usr/bin/env python3
import tkinter as tk
SPECIAL_COLORS = {'foreground': 'red3', 'activeforeground': 'red1'}
class Menu(tk.OptionMenu):
def __init__(self, master, variable, value, *values, **kwargs):
kwargs['command'] = self.on_select
tk.OptionMenu.__init__(self, master, variable, value, *values, **kwargs)
self.variable = variable
self.special_colors = SPECIAL_COLORS
self.default_colors = {key: self[key] for key in self.special_colors}
def on_select(self, _event):
if self.variable.get() != 'TW':
self.config(**self.special_colors)
else:
self.config(**self.default_colors)
def main():
window = tk.Tk()
variable = tk.StringVar(window)
auswahl = [
'TW', 'LIB', 'VT', 'RVT', 'LVT', 'MMF',
'RMF', 'LMF', 'SPM', 'MST', 'RST', 'LST',
]
menu = Menu(window, variable, *auswahl)
menu.pack()
window.mainloop()
if __name__ == '__main__':
main()
Re: Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
Verfasst: Freitag 26. April 2019, 05:30
von World_of_Tanks
Vielen Dank!
Funktioniert hervorragend. Nur für die Zunkunft; Was benutzt ihr (oder was muss man tun), um den Text so zu formatieren, dass er wie Python Code aussieht?
Re: Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
Verfasst: Freitag 26. April 2019, 08:54
von __blackjack__
@World_of_Tanks: Code Tags setzen. Entweder manuell, oder im vollständigen Beitragseditor über die Schaltfläche die mit „< / >“ beschriftet ist. Kannst bei meinem letzten Beitrag auch auf zitieren klicken um zu sehen wie das im Quelltext des Beitrags aussieht.
Re: Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
Verfasst: Freitag 26. April 2019, 10:41
von wuf
Hi World_of_Tanks
Hier noch eine andere Variante:
Code: Alles auswählen
import tkinter as tk
def select(event):
if akt.get() != "TW":
dd_Menu.config(fg="red", activeforeground='red')
else:
dd_Menu.config(fg="black", activeforeground='black')
main_menu = tk.Tk()
akt = tk.StringVar(main_menu, 'Leer')
auswahl = ["TW", "LIB", "VT", "RVT", "LVT", "MMF", "RMF", "LMF", "SPM", "MST", "RST", "LST"]
dd_Menu = tk.OptionMenu(main_menu, akt, command=select, *auswahl)
dd_Menu.pack()
dd_Menu.config(width=6)
main_menu.mainloop()
Gruss wuf

Re: Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
Verfasst: Montag 29. April 2019, 12:35
von World_of_Tanks
@__blackjack__ Danke für den Hinweis. Hab's mir angesehen. Da kommt ja kein Mensch drauf xD
@wuf Dankeschön. Es ist immer gut ein paar Varianten zu sehen.