Code durch standardisieren der Optionen kürzen [gelöst]

Fragen zu Tkinter.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Code durch standardisieren der Optionen kürzen [gelöst]

Beitragvon schlangenbeschwörer » Mittwoch 1. November 2006, 15:11

Hallo,
ich hab mal zwei Fragen zum Optischen:

1.) Wie kann ich die Standardfarben/-optionen ändern? Also so, dass z.B.

Code: Alles auswählen

button=Button(master,text="text")
button.pack()
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
Zuletzt geändert von schlangenbeschwörer am Donnerstag 9. November 2006, 18:25, insgesamt 1-mal geändert.
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Freitag 3. November 2006, 07:40

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Freitag 3. November 2006, 16:09

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
Benutzeravatar
Michael Schneider
User
Beiträge: 567
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Bremen
Kontaktdaten:

Beitragvon Michael Schneider » Samstag 4. November 2006, 07:48

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Beitragvon schlangenbeschwörer » Mittwoch 8. November 2006, 16:53

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder