Seite 1 von 1
Code durch standardisieren der Optionen kürzen [gelöst]
Verfasst: Mittwoch 1. November 2006, 15:11
von schlangenbeschwörer
Hallo,
ich hab mal zwei Fragen zum Optischen:
1.) Wie kann ich die Standardfarben/-optionen ändern? Also so, dass z.B.
z.B. direkt einen roten button mit fetter,grüner "Chiller-schrift" erzeugt.
2.) Wenn es sich nicht mit 1.) lösen lässt: Wie ändere ich bei tix.NoteBook die Schrifftart der Reitertexte?
Gruß, jj
Verfasst: Freitag 3. November 2006, 07:40
von Michael Schneider
Hi Schlangenbeschwörer,
die Standardfarben in Tkinter ändern? Ist mir nicht bekannt, dass sowas ginge, ohne im Code rumzufingern (was ich defininitiv nicht empfehlen würde!).
Ich habe trotzdem einen Alternativvorschlag: eine Klasse ableiten á la
Code: Alles auswählen
from Tkinter import *
tk = Tk()
class StdButton(Button):
StdBg = "#c33"
StdFg = "#af8"
StdFont = ("Times", 12, "bold")
def __init__(self, *args, **kw):
kw["font"] = kw.get("font", self.StdFont)
kw["foreground"] = kw.get("fg") or kw.get("foreground") or self.StdFg ## waehle als Farbe die erste ...
kw["background"] = kw.get("bg") or kw.get("background") or self.StdBg ## ... der gueltigen Optionen
for sKey in ("fg", "bg"): ## entferne aliase
if sKey in kw: del kw[sKey]
Button.__init__(self, *args, **kw)
StdButton(tk, text = "Standard").pack()
StdButton.StdBg = "#33c"
StdButton.StdFont = ("Courier", 10, "bold")
StdButton(tk, text = "mod. Standard").pack()
tk.mainloop()
Entschuldige den Überfluss an Kommentaren - ich hoffe der Code ist selbstredend.
Grüße,
der Michel
Verfasst: Freitag 3. November 2006, 16:09
von schlangenbeschwörer
Hi Michael,
erstmal danke für den Vorschlag, ich werds gleich mal testen. Aber könnte man das nicht auch irgentwie allgemeiner machen? Also inetwa irgentwie so:
Code: Alles auswählen
# [...]
def class StdWidget(Widget):
# [...]
Widget.__init__(self,*args,kw**)
# [...]
Naja, ich werds auf jeden Fall mal probieren...
Weißt du oder sonst irgendwer vielleicht noch was über 2.)? Ich habs nämlich immer noch nicht geschafft, mein NoteBook zu ändern, nur was von tixDisplayStile gefunden, habs aber nicht verstanden...
Wer weiß da was?
Gruß, jj
Verfasst: Samstag 4. November 2006, 07:48
von Michael Schneider
Hi Schlangenbeschwörer,
wenn Du das automatisch auf alle Widgets anwenden willst ohne das Tkinter Modul zu ändern, kannst Du die Widgets-Init-Methode "überschreiben" (hat sowieso keine eigene):
Code: Alles auswählen
from Tkinter import *
def set_widget_std(fg = "#c33", bg = "#af8", font = ("Times", 12, "bold")):
def widget_init(self, *args, **kw):
## Config. ist im letzten Argument gespeichert, darum args[-1]!
args[-1]["font"] = args[-1].get("font", font)
args[-1]["foreground"] = args[-1].get("fg") or args[-1].get("foreground") or bg
args[-1]["background"] = args[-1].get("bg") or args[-1].get("background") or fg
BaseWidget.__init__(self, *args, **kw)
Widget.__init__ = widget_init
classmethod(Widget.__init__)
tk = Tk()
## setze Standard und erzeuge einen Knopf
set_widget_std()
Button(tk, text = "Standard").pack()
## aendere Standard und erzeuge ein Label
set_widget_std(bg = "#33c", fg = "#cc3", font = ("Courier", 16, "italic"))
Label(tk, text = "mod. Standard").pack()
tk.mainloop()
Mit tix habe ich mal etwas gespielt, hat aber bei mir nicht funktioniert. Aber ich schau es mir nochmal an.
Grüße,
der Michel
Verfasst: Mittwoch 8. November 2006, 16:53
von schlangenbeschwörer
Hi Michael,
in meinem aktuellen Programm hab ich einfach ein paar Listen mit den Widgets gemacht, auf die ich dann config-schleifen loslasse. Ich weiß, das ist irgendwie doof, aber ich hatte ja schon nen recht langen Code und das war rel. einfach. Zudem kann ich nun auch jederzeit die Programmoptik total ändern. Beim nächsten Programm nehm ich aber vielleicht doch deinen Ansatz von Anfang an...
Gruß, jj