Window Shape aus Bild

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Hallo, ich bins mal wieder!

Und zwar habe ich mir gestern einmal wxPython angesehen, ein wenig damit herumgespielt und zuletzt noch in der Demo einen Blick auf die Möglichkeiten geworfen. Nun ist mir dort der Punkt "Shaped Window" aufgefallen. Im Beispiel aus der Demo werden jedoch Bilddaten aus einem Modul namens "images" geladen, nicht aus einem PNG oder BMP Bild direkt. Nun würde ich gerne wissen, wie ich die Form eines Fensters nach dem Inhalt eines solchernen Bildes bestimmen kann.
Ich habe bereits meinem Frame den Style wx.FRAME_SHAPED gegeben, ein wx.Image('bild.png').ConvertToBitmap() erstellt und nun mit frame.SetShape(image) die Form gesetzt. Doch letztere ist rechteckig, nicht wie im Bild kreisförmig. Ich habe es mit BMP und PNG versucht, beide mit GIMP erstellt und einen schwarzen Kreis auf transparentem Hintergrund zeigend.
Ich hoffe, ihr könnt mir ein wenig weiterhelfen und bedanke mich bereits im Voraus für eure Bemühungen,

Pythonierer!
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Code: Alles auswählen

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Loader", style = wx.FRAME_SHAPED | wx.SIMPLE_BORDER )
        self.panel = wx.Panel(self)
        self.panel.Bind(wx.EVT_PAINT, self.OnPaint)
    ....
    def OnPaint(self, evt):
        dc = wx.PaintDC(self.panel)
        self.bmp = wx.Bitmap("panel.png")
        self.SetClientSize((self.bmp.GetWidth(), self.bmp.GetHeight()))
        dc.DrawBitmap(self.bmp, 0,0, True)
        self.bmp.SetMaskColour("#000000")
        self.SetShape(wx.RegionFromBitmap(self.bmp))
Schau dir mal ``OnPaint`` an da geschieht alles wichtige.
Alles was transparent sein soll ist schwarz gemacht, wxPython sage ich das mit: SetMaskColour("#000000")

Hilft dir das?
Wenn nicht mache ich morgen noch mal ein minimal Beispiel, das ganze habe ich auch einem meiner etwas größeren Projekte heraus gezogen.

mfG
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Vielen, vielen Dank Sr4l, genau das habe ich gesucht!
Kombiniert mit ein paar Event-Bindings gibt das ein richtig schönes Drag-N-Drop Window mit extravaganter Form...

Also, nochmals vielen Dank und noch einen schönen Abend,
Pythonierer!
Antworten