StaticText und Standardfonts selbst definieren

Plattformunabhängige GUIs mit wxWidgets.
Antworten
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Freitag 24. September 2004, 18:35

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Samstag 25. September 2004, 19:43

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Sonntag 26. September 2004, 03:18

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
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Freitag 1. Oktober 2004, 23:08

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)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Samstag 2. Oktober 2004, 00:07

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
Antworten