Seite 1 von 1
OptionMenu - Unterschiedl. Farben der Eintraege?
Verfasst: Samstag 12. Juli 2008, 23:48
von till129
Hallo,
ich benoetige ein Widget mit dem ich zwischen wenigen Farben
auswaehlen kann.
Mit OptionMenu kann ich diese Eintraege bereits erstellen:
Code: Alles auswählen
from Tkinter import *
master = Tk()
variable = StringVar(master)
variable.set('green') # default value
w = OptionMenu(master, variable, 'green', 'red', 'blue')
w.pack()
mainloop()
Gibt es eine Moeglichtkeit die Schriftfarbe der einzelnen Eintraege
zu aendern?
(Der tkColorChooser ist fuer mich zu umfangreich.)
Danke fuer jede Hilfe,
Till
Verfasst: Sonntag 13. Juli 2008, 10:05
von wuf
Hallo till129
Hier ein Lösungsansatz:
Code: Alles auswählen
from Tkinter import *
master = Tk()
colors = ('green', 'red', 'blue','yellow','mistyrose','purple')
variable = StringVar(master)
variable.set('mistyrose') # default value
w = OptionMenu(master, variable, *colors) # 'green', 'red', 'blue')
w.pack()
for index in xrange(len(colors)):
bg_color = colors[index]
w['menu'].entryconfig(index,background=bg_color,activebackground=bg_color)
mainloop()
Getestet mit SuSE 10.0 Python2.4 Python2.5
Gruss wuf

Verfasst: Sonntag 13. Juli 2008, 10:28
von till129
Ausgezeichnet. Das ist genau dass, was ich brauche.
Vielen Dank auch!!!! Till
Verfasst: Sonntag 13. Juli 2008, 12:55
von till129
Mit folgendem Code aendert sich zudem auch die Hintergrundfarbe
des OptionMenu.
Weiss jemand wie man verhindert, dass die Hintergrundfarbe
weg geht, wenn man die Maus ueber dem OptionMenu hat?
Code: Alles auswählen
from Tkinter import *
#----------------GUI CLASS DEFINITION-------------------
class App:
def __init__(self, master):
self.colors = ('green', 'red', 'blue','yellow','mistyrose','purple')
self.variable = StringVar(master)
self.variable.set('mistyrose') # default value
self.w = OptionMenu(master, self.variable, *self.colors)
self.w.pack()
for index in xrange(len(self.colors)):
bg_color = self.colors[index]
self.w['menu'].entryconfig(index,background=bg_color,activebackground=bg_color)
# idea: watch the OptionMenu Textvariable
self.variable.trace_variable('w', self.callbackFunc)
def callbackFunc(self, name, index, mode):
print self.variable.get()
self.w.configure(background=self.variable.get())
#--------------Start GUI--------------------------------
root = Tk()
app = App(root)
root.mainloop()
Verfasst: Sonntag 13. Juli 2008, 17:25
von wuf
Hallo till119
Wie ich sehe haben sich unsere Arbeiten überlappt. Dem Kreator des Option-Menu Widget muss ich leider die Note 'lausig' für seine Dokumentations-Unterstützung erteilen.
Hier ist mein neuster Ansatz:
Die Schriftfarbe der Option-Menu-Schaltfläche korrelier mit der Selektion. Wenn sich die Maus über der Schaltfläche befindet bleibt die Farbe unverändert.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#~~ Skriptname till119_01_03_01.py (13.07.2008)
import Tkinter as tk
def my_color(color):
"""Auswahlmenu-Rückruf"""
variable.set(color)
w.configure(fg=color,activeforeground=color)
master = tk.Tk()
colors = ('green', 'red', 'blue','yellow','mistyrose','purple')
variable = tk.StringVar()
w = tk.OptionMenu(master, variable, *colors)
w.pack()
my_color('red')
for index in xrange(len(colors)):
fg_color = colors[index]
w['menu'].entryconfig(index,
foreground=fg_color,
activeforeground=fg_color,
command = lambda color=colors[index]: my_color(color)
)
master.mainloop()
Gruss wuf

Verfasst: Sonntag 13. Juli 2008, 17:39
von till129
Gute Idee der internen Editbox ne Callback Funktion zu geben.
Ja, die Dokumentation ist wirklich schlecht. Ausserdem taucht
in dem beliebten 'an-introduction-to-tkinter.pdf' dieses Widget nicht auf.
Ist warscheinlich auch der Grund, warum hier im Forum so oft nach
einer ComboBox gefragt wird...
danke nochmals,
till