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()
Farbe im Anzeigefeld eines Dropdown-Menus ändert sich
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
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()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 14
- Registriert: Donnerstag 25. April 2019, 14:44
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?
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?
- __blackjack__
- User
- Beiträge: 13919
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@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.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
Hi World_of_Tanks
Hier noch eine andere Variante:Gruss wuf 
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()

Take it easy Mates!
-
- User
- Beiträge: 14
- Registriert: Donnerstag 25. April 2019, 14:44
@__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.
@wuf Dankeschön. Es ist immer gut ein paar Varianten zu sehen.