Seltsames Verhalten von TextCtrl

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

Hoi

hatte gestern eine Begegnung der dritten Art mit TextCtrl ;-)

Und zwar möchte ich einfach die ersten und letzten 10 Zeichen in einem best. Output, der auf ein TextCtrl gelenkt wird einfärben. Angenommen bei allen "somethings" hier handelt es sich um Strings und TextField ist ein TextCtrl-Feld, dann funktioniert folgender Code:

Code: Alles auswählen

self.TextField.write(self.something1 + "'")
x = self.TextField.GetLastPosition()
self.TextField.SetStyle(x-11,x-1,wx.TextAttr("Blue"))
self.TextField.write(self.something2 + "'")
self.TextField.write(self.something3 + '\n')
x = self.TextField.GetLastPosition()
self.TextField.SetStyle(x-11,x-1,wx.TextAttr("Blue"))
während folgender Code den gesamten Output hier blau einfärbt, auch self.something2:

Code: Alles auswählen

self.TextField.write(self.something1)
x = self.TextField.GetLastPosition()
self.TextField.SetStyle(x-10,x,wx.TextAttr("Blue"))
self.TextField.write(self.something2)
self.TextField.write(self.something3 + '\n')
x = self.TextField.GetLastPosition()
self.TextField.SetStyle(x-10,x,wx.TextAttr("Blue"))
something1 und something3 sind genau zehn Zeichen lang. something2 ist von unbestimmter Länge und hängt von der Eingabe des Anwenders ab. Deshalb verwende ich zweimal GetLastPosition().

Gut, habe ja was ich wollte, aber kann mir jemand erklären wo hier der Fehler in meiner Annahme ist, daß beide snippets bzgl. des Einfärbens der somethings identisch sein müßten - abgesehen von den Füllzeichen ("'") natürlich? Der wesentliche Faktor war, daß ich irgendetwas von x abziehen muß, sonst funktioniert es fehlerhaft. Deshalb brauchte ich natürlich die Füllzeichen, sonst wird ja nicht korrekt eingefärbt.

Wäre toll, wenn mich jemand "erleuchten" könnte.

Gruß,
Christian
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Ich vermute, dass das TextCtrl in dem Style weiterschreibt, in dem der letzte Buchstabe geschrieben wurde.
Beim ersten Block ist noch ein schwarzes Anführungszeichen dazwischen, deswegen wird in schwarz weitergeschrieben.
Beim zweiten Block ist das letzte Zeichen Blau und damit wird auch in Blau weitergeschrieben.
Gast

Ja, ist richtig. Ist das jetzt ein bug oder ein feature? Na ja, ist mehr so eine rhetorische Frage ... Ich werde wohl mit meinem Provisorium, vielleicht auch einem anderen, leben können.

Dankeschön,
Christian
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Na ja, im Prinzip brauchst Du ja einfach nur die Reihenfolge ändern:

Code: Alles auswählen

self.TextField.write(self.something1) 
x1 = self.TextField.GetLastPosition() 
self.TextField.write(self.something2) 
self.TextField.write(self.something3 + '\n') 
x2 = self.TextField.GetLastPosition()
self.TextField.SetStyle( x1-10, x1, wx.TextAttr("Blue") ) 
self.TextField.SetStyle( x2-10, x2, wx.TextAttr("Blue") )
sollte eigentlich funktionieren.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Danke

... manchmal sollte man einfach nicht so viel Zeit vor dem Rechner hocken - man sieht einfach den Wald vor lauter Baeumen nicht mehr.
Antworten