Icon für ToolBar, wie mit Transparenz umgehen?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Abend zusammen.

Irgendwie kriege ich keine Infos zusammen, wie man Icons mit transparenten Bereichen definiert...

BMPs scheinen gar nicht zu gehen (okay, können naturgemäß auch keine Transparenz.. Aber bei anderen Gui's kann man dann halt die Farbe definieren, die als Transparent gelten soll..... Das soll zwar mit SetMaskColour hier auch irgendwie gehen, aber irgendwie komme ich da ebensowenig klar..)

PNGs kriege ich zwar teilweise mit Transparenz hin, aber da sind dann auch Farben plötzlich ausgeblendet, die ich nie als transparent definiert habe....

Es muss doch irgendwie möglich sein, relativ einfach für die ToolBar Icons mit transparenten Bereichen zu definineren.. Ist doch quasi eine Standart-Geschichte??

Danke im voraus für Feedback..
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

oliver1974 hat geschrieben:Es muss doch irgendwie möglich sein, relativ einfach für die ToolBar Icons mit transparenten Bereichen zu definineren..
Hi oliver1974!

Am wxPython scheint es nicht zu liegen. Das übernimmt die Transparenz so, wie sie im Bild definiert wurde.

Siehe:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
"""
Toolbar with icons - Example (wxPython)

License:       <keine Ahnung>
Created:       2007-01-20 by Gerold
Requirements:  Python: http://www.python.org/
               wxPython: http://wxpython.org/
"""

import wx
import urllib2
from StringIO import StringIO

wx.SetDefaultPyEncoding("iso-8859-1")


def download_datastream(url):
    """
    Downloads a datastream from the internet (e.g.: Icons from www.iconbazaar.com)
    """
    
    datastream = StringIO()
    
    request = urllib2.Request(url)
    webstream = urllib2.urlopen(request)
    datastream.write(webstream.read())
    webstream.close()
    
    datastream.seek(0)
    return datastream


class MyFrame(wx.Frame):
    
    def __init__(
        self, parent = None, id = -1, title = "Example", size = wx.Size(550, 420)
    ):
        
        wx.Frame.__init__(self, parent, id, title, size = size)
        
        panel = wx.Panel(self)
        
        vbox_main = wx.BoxSizer(wx.VERTICAL)
        panel.SetSizer(vbox_main)
        
        #Toolbar
        toolbar = wx.ToolBar(
            self, style = wx.NO_BORDER | wx.TB_HORIZONTAL | wx.TB_TEXT
        )
        toolbar.SetToolBitmapSize(wx.Size(32, 32))
        
        # A Book (GIF)
        book_stream = download_datastream(
            "http://www.iconbazaar.com/document/book01.gif"
        )
        book_image = wx.ImageFromStream(book_stream, wx.BITMAP_TYPE_GIF)
        book_bmp = wx.BitmapFromImage(book_image)
        
        toolbar.AddLabelTool(-1, "A Book", book_bmp)
        
        # CD-ROM (GIF)
        cdrom_stream = download_datastream(
            "http://www.iconbazaar.com/computer/cdrom1.gif"
        )
        cdrom_image = wx.ImageFromStream(cdrom_stream, wx.BITMAP_TYPE_GIF)
        cdrom_bmp = wx.BitmapFromImage(cdrom_image)
        
        toolbar.AddLabelTool(-1, "A CD-ROM", cdrom_bmp)
        
        # Printer (PNG)
        printer_stream = download_datastream(
            "http://dan.drydog.com/xicons/printer.png"
        )
        printer_image = wx.ImageFromStream(printer_stream, wx.BITMAP_TYPE_PNG)
        printer_bmp = wx.BitmapFromImage(printer_image)
        
        toolbar.AddLabelTool(-1, "A Printer", printer_bmp)
        
        # Toolbar zuseisen
        toolbar.Realize()
        self.SetToolBar(toolbar)


def main():
    """Testing"""
    
    app = wx.PySimpleApp()
    f = MyFrame()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Hallo,

Tja, ich hab heute schon selbst darüber nachgegrübelt... Und mir gedacht, dass ich einfach mal ein anderes Bildbearbeitungsprogramm nehme...
(GIMP statt Paint.NET). Und jetzt scheints zumindest mit PNGs zu gehen....
Tja. Es sollte eigentlich auch mit Paint.NET gehen, aber das forsche
ich jetzt nicht weiter nach...

Das ganze ToolBar-Thema ist aber schon nicht ohne, es scheint irgendwie x-Wege zu geben, ein und dasselbe zu implementieren... Das mit den Icons für die ToolBar ist nur ein Aspekt davon.

Nun, ich probier das ganze nochmal durch. Danke soweit...
Antworten