Bunte Schrift im DC

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Hi mal wieder...

ich haette ja so total Lust ein eigenes Widget zu basteln. Das ist auch soweit alles kein Problem, bis auf eine kleine Sache:

Ich Zeichne das Widget komplett per DC (erstmal Zeichne ich per MemoryDC ein Bitmap, dass ich dann beim Paint-Event gepuffert auf das Control malen lasse).

Text schreiben ist ja nun auch garkein Problem, geht alles toll und einfach... aber nur eine Sache nicht: Die Schriftfarbe!

Wie kann ich die Schriftfarbe einstellen? Ich will doch nicht nur schwarz auf das Widget schreiben. Ich hab aber nun auch keine Lust, extra Fancy-Text oder sowas zu verwenden. Geht das nicht einfacher?

Zur allgemeinen Veranschaulichung, hier meine Methode create_bitmap:

Code: Alles auswählen

    def create_bitmap(self):
        bmp = wx.EmptyBitmap(*self.GetClientSize())
        print bmp.GetSize()
        dc = wx.MemoryDC(bmp)
        dc.SetPen(wx.Pen("white"))
        dc.SetFont(wx.FFont(10, wx.FIXED))
        dc.Clear()
        dc.DrawRectangle(0, 0, bmp.GetWidth()-2, bmp.GetHeight()-2)
        gradient = wx.Bitmap("gradient.bmp")
        gradient.SetHeight(bmp.GetSize().y-2)
        i=0
        while i < bmp.GetWidth()-2:
            dc.DrawBitmap(gradient, i+1, 1)
            i+=1
        dc.DrawText(self.label, 2, 2)
        dc.SelectObject(wx.NullBitmap)
        return bmp
Gruesse
NKoehring

PS: foregroundcolour und was es da noch so alles gibt, funktioniert nicht...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nkoehring hat geschrieben:Die Schriftfarbe
Hallo nkoehring!

Das funktioniert mit dem GraphicsContext:

Code: Alles auswählen

    def create_bitmap(self):
        bmp = wx.EmptyBitmap(*self.GetClientSize())
        dc = wx.MemoryDC(bmp)
        
        gc = wx.GraphicsContext_Create(dc)
        gc.SetPen(wx.Pen(wx.WHITE, 1, style = wx.TRANSPARENT))
        
        gc.SetBrush(gc.CreateLinearGradientBrush(0, 0, 200, 80, wx.BLUE, wx.GREEN))
        gc.DrawRectangle(0, 0, 200, 50)
        
        font = dc.GetFont()
        font.SetPointSize(18)
        font.SetWeight(wx.BOLD)
        gc.SetFont(font, "yellow")
        gc.DrawText("Hallo Welt", 10, 10)
        
        dc.SelectObject(wx.NullBitmap)
        return bmp
Bild

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Ah klasse... das funktioniert einwandfrei. Mal wieder ein großes Dankeschoen Gerold!

Da haette ich gleich noch eine kleine Frage: Gibt es einen einfachen Weg, die Hoehe und Breite einer Zeichenkette herauszufinden?

Also ich setze zB wx.FFont(8, wx.FIXED) und moechte dann wissen, wie hoch und breit der Text X genau wird...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nkoehring hat geschrieben:Gibt es einen einfachen Weg, die Hoehe und Breite einer Zeichenkette herauszufinden?
Hallo nkoehring!

gc.GetTextExtent()
gc.GetFullTextExtent()
oder
dc.GetTextExtent()
dc.GetFullTextExtent()

lg
Gerold
:-)

EDIT:

Die gc-Beispiele machen bei mir Probleme. Vielleicht muss man vorher irgendeine Schrift zuweisen, aber das probiere ich jetzt nicht aus, da es ja über den DeviceContext (dc) wunderbar funktioniert.
Zuletzt geändert von gerold am Montag 24. September 2007, 23:38, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

aha... na das soll einer aus den Methodennamen mal rauslesen ^^

EDIT: ...aber es funktioniert irgendwie nicht. Er meinte, ein MemoryDC hat diese Methode nicht...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

nkoehring hat geschrieben:EDIT: ...aber es funktioniert irgendwie nicht. Er meinte, ein MemoryDC hat diese Methode nicht...
Verschrieben?

Also die liebe PyShell verrät:

Code: Alles auswählen

wx.DC.GetTextExtent()
Die Namen wurden mit TAB automatisch ergänzt. Ein Verschreiber ist in diesem Fall ausgeschlossen.

EDIT:

Und hier noch ein Test mit der PyShell:

Code: Alles auswählen

>>> import wx
>>> bmp = wx.EmptyBitmap(100, 100)
>>> dc = wx.MemoryDC(bmp)
>>> dc.GetTextExtent("asdf")
(28, 16)
>>>
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

lach... jetzt weiß ich meinen Fehler: GetTextExtend! Naja, ich gelobe Besserung, ehrlich ;) Danke!
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten