Seite 1 von 1

StaticText und Standardfonts selbst definieren

Verfasst: Freitag 24. September 2004, 18:35
von CM
Hoi

Mal eine Frage zu etwas "Einfachem" wie StaticText:

Geht das auch einfacher?

Code: Alles auswählen

font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)
text = wx.StaticText(self,-1,"bla bla bla")
text.SetFont(font)
sizer.Add(text)
Mein Ziel wäre es einmal "font" zu definieren und auf allen Text anzuwenden und zwar so, daß man nur noch schreibt "sizer.Add(wx.StaticText("bla bla bla", something"). Wobei das something, dann die Anwendung von "font" beinhalten sollte. Sprich, ich möchte nicht für jede Textzeile im Panel die unteren drei Zeilen des Codes schreiben.

Ist vielleicht wirklich ganz einfach, aber alle meine Versuche sind bisher in Fehlermeldungen resultiert. Habe viele Varianten a la sizer.Add(wx.StaticText(... durchprobiert, die alle nicht mit dem vorgegebenen Font funktionieren.

Wäre schön, wenn jemand eine Anregung hätte.

Danke,
Christian

Verfasst: Samstag 25. September 2004, 19:43
von mawe
Hi!

Ich glaube nicht daß es so geht wie Du willst (hab jedenfalls beim googeln nichts gefunden). Wenn dir die 3 Zeilen wirklich zu mühsam sind (und ich dachte ich bin faul :wink:), fällt mir spontan folgendes ein:
Speichere die StaticTexte in einem Array, und setze font für jedes Element (hä ?):

Code: Alles auswählen

textarray = []
textarray.append(wx.StaticText(self,-1,"tralli"))
textarray.append(wx.StaticText(self,-1,"tralla"))
textarray.append(wx.StaticText(self,-1,"trahopsasa"))
font = wx.Font(10,wx.SWISS, wx.NORMAL, wx.ABNORMAL)
Jetzt brauchst Du nur einmal diese 2 Zeilen schreiben :wink::

Code: Alles auswählen

for i in textarray:
    i.SetFont(font)
Gruß, mawe

Verfasst: Sonntag 26. September 2004, 03:18
von CM
Hoi mawe,

Danke für den Tipp. Wie soll ich es Dir sagen? So ganz das was ich suchte ist es nicht ...
Das hat bei mir weniger was mit Faulheit ;-) zu tun, sondern mehr damit, daß es in dem Update zu meinem letzten Programm ein kleines Bißchen Text ist, im neuen Programm noch ein kleines Bißchen und ... (für Infopanel). Na ja, läppert sich halt.

Aber ich habe wohl Effizienz gesucht, wo es keine wesentliche Verbesserung gibt (hatte ja auch schon vorher gesucht).

Schönes Wochenende noch,
Christian

Verfasst: Freitag 1. Oktober 2004, 23:08
von Christopy
Du könntest das folgende Konstrukt nutzen. Entweder wie gezeigt direkt in der __init__() Funktion oder eigens aufrufen. Die Methode GetChildren() gibt eine Liste aller Kinder zurück. Diese wird nach wxStaticText Elementen durchforstet und deren Schrift wird geändert. Evt. könnte man das sogar rekursiv verschachteln um auch Texte von Kinddialogen zu ändern...

Code: Alles auswählen

class MyDialog(wxDialog):
    
    def __init__(self, *args, **kwds):
        wxDialog.__init__(self, *args, **kwds)
        
        self.text1 = wxStaticText( self, -1, "Gurke" )
        self.text2 = wxStaticText( self, -1, "Dumdidum" )
        self.text3 = wxStaticText( self, -1, "Dumdidum" )
        
        font = wxFont(10, wxSWISS, wxNORMAL, wxNORMAL)
        liste = self.GetChildren()
        for l in liste:
            if isinstance( l, wxStaticText) :
                l.SetFont(font)

Verfasst: Samstag 2. Oktober 2004, 00:07
von CM
Hoi

schön, vielen Dank.
Muß gestehen: Auf die Idee wäre ich nicht gekommen, dabei ist es sehr einfach und elegant.
Auf diese Weise weitere Dialoge anzusprechen ist wohl nicht notwendig, aber vielleicht lohnt es sicht auch diese Option im Hinterkopf zu behalten.

Christian