Seite 1 von 1

Icon für ToolBar, wie mit Transparenz umgehen?

Verfasst: Samstag 20. Januar 2007, 00:10
von oliver1974
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..

Re: Icon für ToolBar, wie mit Transparenz umgehen?

Verfasst: Samstag 20. Januar 2007, 17:16
von gerold
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
:-)

Verfasst: Samstag 20. Januar 2007, 20:55
von oliver1974
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...