folgendes Snippet (Python 3.1):
Code: Alles auswählen
import tkinter
import tkinter.colorchooser
class MyApp:
def __init__(self, root):
###Hauptfenster f0------------------------------------------------------
self.f0 = tkinter.Frame(root)
self.f0.pack(padx=5, pady=5, anchor="nw")
self.lf0 = tkinter.LabelFrame(self.f0, text="Farben")
self.lf0.pack(padx=2, pady=2, expand="1", fill="both")
###Startwerte-----------------------------------------------------------
self.mycolor0 = "#cafa0b"
self.mycolor1 = "#0bcb0b"
self.mycolor2 = "#0c0ccc"
###3 Farbauswahlfelder--------------------------------------------------
self.ca0 = tkinter.Canvas(self.lf0, width=13, height=13)
self.ca0 ["background"] = self.mycolor0
self.ca0.bind("<Button-1>", self.choosecolor)
self.ca0.grid(row=3, column=0)
self.ca1 = tkinter.Canvas(self.lf0, width=13, height=13)
self.ca1 ["background"] = self.mycolor1
self.ca1.bind("<Button-1>", self.choosecolor)
self.ca1.grid(row=4, column=0)
self.ca2 = tkinter.Canvas(self.lf0, width=13, height=13)
self.ca2 ["background"] = self.mycolor2
self.ca2.bind("<Button-1>", self.choosecolor)
self.ca2.grid(row=5, column=0)
def choosecolor(self, event):
(triple, hexstr) = tkinter.colorchooser.askcolor(color="#cafa0b")
if hexstr:
event.widget.config(background=hexstr)
root = tkinter.Tk()
myapp = MyApp(root)
root.mainloop()
1. Bevor ich die Farben zum ersten mal gewählt habe, sollen default-Farbwerte genommen werden (hier self.mycolor0, 1, 2). Verändere ich dann später eine Farbe, soll sich aber nicht nur das Canvas ändern (das geht schon), sondern natürlich auch die Instanzvariable, die den zugehörigen Startwert festgelegt hat (bspw. "self.mycolor0")...
-> hier steh ich auf dem Schlauch, da ich ja meine choosecolor-Methode von verschiedenen Canvaswidgets aufrufen kann, kann ich innerhalb der Methode nicht einfach bspw. "self.mycolor0 = hexstr" sagen.
Ich habe schon herausgefunden, daß dem event über "event.widget.config(background=..." Informationen über das widget mitgegeben werden. Aber wie kann ich noch die Variable, die auf "background" verweist, mitändern?
2. mit der Option "color" in "tkinter.colorchooser.askcolor(color="#cafa0b")" kann ich ja eine Vorgabe machen. Wie kriege ich hin, das hierzu die voreingestellte Farbe aus dem jeweiligen Canvas genommen wird?
----
Ich denke, 1. und 2. gehören irgendwie zusammen, in beiden Fragen geht es darum, wie ich Parameter in die Methode und wieder aus der Methode heraus bekomme. Und ich befürchte, daß da ein grundlegendes Klassen/OOP-Verständnisproblem meinerseits verantwortlich ist.
