PNG-Transparenz

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

Beitragvon nkoehring » Mittwoch 1. August 2007, 04:14

Nagut, dann hier eine Zip mit dem Testprogramm von mir...

http://www.newagedesigns.de/bunt.zip
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 1. August 2007, 07:25

nkoehring hat geschrieben:Testprogramm

Hallo nkoehring!

Na, sieht doch schon mal nicht so schlecht aus. Wenn du die Anzeigeprobleme (Transparenz) unter Windows XP in den Griff bekommen hast, dann könnte es sein, dass es auch keine Probleme mehr unter Linux gibt. :-)

Ubuntu im VirtualBox:
http://gerold.bcom.at/bilder/petool_linux_01.png
http://gerold.bcom.at/bilder/petool_linux_02.png
Windows XP:
http://gerold.bcom.at/bilder/petool_windowsxp_01.png

mfg
Gerold
:-)
Zuletzt geändert von gerold am Mittwoch 1. August 2007, 18:00, 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:

Beitragvon nkoehring » Mittwoch 1. August 2007, 14:45

Ah, vielen Dank fuers Testen.

Mir ist aufgefallen, dass die Transparenz unter Windows zurueckkehrt, wenn ich das Fenster am unteren Monitorrand kurz "verschwinden" lasse und dann wieder in den sichtbaren bereich hole. Was ist denn der Unterschied zwischen einem Refresh und dieser Art des Neuzeichnens? Kann ich das vielleicht direkt erzwingen oder ist es doch eine Windows-Sache?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 1. August 2007, 15:23

nkoehring hat geschrieben:Mir ist aufgefallen, dass die Transparenz unter Windows zurueckkehrt, wenn ich das Fenster am unteren Monitorrand kurz "verschwinden" lasse und dann wieder in den sichtbaren bereich hole. Was ist denn der Unterschied zwischen einem Refresh und dieser Art des Neuzeichnens? Kann ich das vielleicht direkt erzwingen oder ist es doch eine Windows-Sache?

Hallo nkoehring!

Wenn das Fenster verdeckt wird und danach wieder in den sichtbaren Bereich vorgeholt wird, dann wird EVT_PAINT automatisch ausgelöst.

``Refresh`` sollte das eigentlich auch tun. :K Aber ``Refresh`` arbeitet erst beim nächsten Event-Loop. Wenn du einen sofortigen Refresh erzwingen willst, dann führe zuerst ``Refresh`` und sofort danach ``Update`` aus. Vielleicht sogar noch ein ``YieldIfNeeded`` nachschieben... Zumindest sollte es dann laut Doku sofort neu gezeichnet werden. Ob es in der Praxis funktioniert, werde ich von dir erfahren. ;-)

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:

Beitragvon nkoehring » Mittwoch 1. August 2007, 17:49

so, es sieht auch nach zusaetzlichem Update genauso aus wie vorher... YieldIfNeeded hab ich allerdings auch nirgends gefunden :K

EDIT: Es wird ja neugezeichnet, auch nach einem einfachen Refresh, aber dadurch wird eben die Transparenz ausgeloescht.
Ich habe das Problem jetzt so geloest, dass einfach mehrere Panels uebereinander gelegt und jeweils (un-)sichtbar geschalten werden.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 3. August 2007, 13:32

Ich habe keine Ahnung, wie diese Buttons generiert werden, aber evt. passt dieser Link zu diesem Thema: http://xoomer.alice.it/infinity77/main/ ... utton.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Freitag 3. August 2007, 14:45

Hallo ich kämpfe ja auch gerade damit wx / PNG.

MaskColour #000000 ist nicht ideal, aber der mir die Grafiken erstellt ist das durch eine Gameengine (3dGS) gewohnt das #000000 Transparent ist.

Manchmal funktioniert bei mir Transparenz und manchmal nicht, die Bilder die ich geschickt bekomme ( mit Adobe Photoshop) erstellt funzktionieren 100%, dann habe ich jedoch das Bild nach bearbeitet mit Gimp und habe nun so eine weissen Rand den ich nicht mehr weg bekomme.
So wie ein Pixel einmal rund ums Bild wird mit default BackgroundColour gemacht, alles weil ich da mit Gimp nachgearbeitet habe.
Halbtransparenz geht nur auf einem wx Bild aber nicht da wo es auf den DesktopHintergrund geht.
Also am besten geht es bei mir über die MaskColour.
Bei meine Buttons muss ich allerdings sagen habe ich nur Transparenz (GIMP) und es geht auch siehe das Close X oben und Login Button

Screenshot:
Bild

Code der das Bild erzeugt, auf das ich meine Buttons setze:

Code: Alles auswählen

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "MK3d Loader", style = wx.FRAME_SHAPED | wx.SIMPLE_BORDER )

        panel = wx.Panel(self)
        self.panel = panel
        self.panel.SetBackgroundColour("#4F3217")
        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("#FFFFFF")
        self.SetShape(wx.RegionFromBitmap(self.bmp))


PS: Wie man sieht bekomme ich die BackgroundColour von den ListBoxen nicht gesetzet, warum?

Code: Alles auswählen

        self.packet_install = wx.ListBox(self.panel, -1, (538, 169), (122, 121), ["lol","lal"])
        self.packet_install.SetBackgroundColour("#4F3217")


*edit*
habe ListBox gegen ListCtrl getauscht und alles geht.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder