Seite 1 von 1

Toolbar Icon ändern?

Verfasst: Freitag 16. Februar 2007, 17:55
von Hand

Code: Alles auswählen

class myToolBar(wx.ToolBar):
    def __init__(self, parent):
        TBFLAGS = ( wx.TB_HORIZONTAL
                  | wx.NO_BORDER
                  | wx.TB_FLAT
                  | wx.TB_TEXT
                  )
        wx.ToolBar.__init__(self, parent, -1, (-1,-1), (-1,-1), TBFLAGS)
        self.bmpExit = wx.Bitmap('../img/gtk-quit.png', wx.BITMAP_TYPE_PNG)
        self.bmpConnect = wx.Bitmap('../img/gtk-connect.png', wx.BITMAP_TYPE_PNG)
        self.bmpDisconnect = wx.Bitmap('../img/gtk-disconnect.png', wx.BITMAP_TYPE_PNG)
        self.AddLabelTool(20, "Exit", self.bmpExit, wx.NullBitmap, wx.ITEM_NORMAL, 'Exit')
        self.AddSeparator()
        self.AddLabelTool(21, "SPS", self.bmpConnect, wx.NullBitmap, wx.ITEM_CHECK, 'SPS')
        self.AddLabelTool(22, "Labview", self.bmpConnect, wx.NullBitmap, wx.ITEM_CHECK, 'Labview')
        self.SetToolBitmapSize((24,24))
        self.Realize()
        self.Bind(wx.EVT_TOOL, self.ChangeIcon, id=21)

    def ChangeIcon(self,evt):
        self.EnableTool(21,False)
Weis jemand wie ich nachträglich das Icon ändern kann?
Je nach Togglestatus des Buttons soll ein anderes Icon angezeigt werden
Danke schonmal :wink:

Verfasst: Freitag 16. Februar 2007, 18:12
von HWK
Nicht besonders elegant, aber funktioniert vielleicht trotzdem:
Mit RemoveTool oder DeleteTool löschen und mit InsertTool mit neuem Icon einfügen.
MfG
HWK

Re: Toolbar Icon ändern?

Verfasst: Freitag 16. Februar 2007, 18:50
von gerold
Hallo Hand!

Es wäre bedeutend schneller gegangen, wenn du uns funktionierenden Testcode gezeigt hättest.

Aber es hat trotzdem geklappt. Hier mein Testcode:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx

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


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)
        
        tb = wx.ToolBar(self)
        self.tb = tb
        item_x = tb.AddLabelTool(
            -1, "open/save", wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR)
        )
        self.item_x = item_x
        tb.Realize()
        self.SetToolBar(tb)
        
        self.Bind(wx.EVT_TOOL, self.on_irgendetwas, item_x)

    
    def on_irgendetwas(self, event):
        
        self.item_x.SetBitmap1(
            wx.ArtProvider_GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR)
        )
        self.tb.Realize()


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


if __name__ == "__main__":
    main()
mfg
Gerold
:-)

Verfasst: Freitag 16. Februar 2007, 18:57
von gerold
PS: Daher weiß ich von der Methode "SetBitmap1":

Code: Alles auswählen

        print type(item_x)
        print dir(item_x)
-->

Code: Alles auswählen

<class 'wx._controls.ToolBarToolBase'>
['Attach', 'Bitmap', 'CanBeToggled', 'ClassName', 'ClientData', 'Control', '
Destroy', 'Detach', 'DisabledBitmap', 'Enable', 'GetBitmap', 'GetBitmap1', '
GetBitmap2', 'GetClassName', 'GetClientData', 'GetControl', 'GetDisabledBitmap',
'GetId', 'GetKind', 'GetLabel', 'GetLongHelp', 'GetNormalBitmap', 'GetShortHelp'
, 'GetStyle', 'GetToolBar', 'Id', 'IsButton', 'IsControl', 'IsEnabled', '
IsSameAs', 'IsSeparator', 'IsToggled', 'Kind', 'Label', 'LongHelp', '
NormalBitmap', 'SetBitmap1', 'SetBitmap2', 'SetClientData', 'SetDisabledBitmap',
'SetLabel', 'SetLongHelp', 'SetNormalBitmap', 'SetShortHelp', 'SetToggle', '
ShortHelp', 'Style', 'Toggle', 'ToolBar', '__class__', '__delattr__', '__dict__'
, '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__'
, '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '
__weakref__', 'this', 'thisown']

Verfasst: Freitag 16. Februar 2007, 19:11
von Hand
Super, danke :D

Findet man das auch irgendwo in der wx Doku?

Verfasst: Freitag 16. Februar 2007, 21:23
von gerold
Hand hat geschrieben:Findet man das auch irgendwo in der wx Doku?
Hi Hand!

Wenn ich mir das hier so ansehe http://wxpython.wxcommunity.com/docs/ap ... class.html, dann glaube ich, es ist besser, wenn du statt ``SetBitmap1`` doch lieber ``SetNormalBitmap`` verwendest. -- Das ist aussagekräftiger. ;-)

Ich verwende beim Programmieren mit Python ziemlich oft ``dir()`` und ``type()`` um herauszufinden was man denn so mit den Objekten die man zurück bekommt machen kann. Das geht meist schneller als irgendwelche Dokumentation heranzuziehen. Wenn ich näheres wissen will, dann schlage ich immer wieder mal im Buch "wxPython in Action" nach.

Dann gibt es noch die wxWidgets-Dokumentation, die für die meisten Objekte eine Erklärung bietet. Das ist meistens eins zu eins in wxPython anwendbar. Und wenn ich nicht weiter weiß, dann frage ich hier im Python-Forum nach.

mfg
Gerold
:-)

Verfasst: Samstag 29. März 2008, 18:21
von HWM-Rocker
prima, genau das habe ich gesucht !!!
Leider funktioniert bei mir dieser Code nicht ;(

ich habe
python 2.5.1
wxPython 2.8

als OS Ubuntu 7.10

hat jemand die gleichen Probleme? oder ne Ahnung warum das nicht klappen könnte. Ich brauche für mein Programm auch so ein Connect / Disconnect Button. Wäre cool wenn ihr mir weiterhelfen könntet

schon mal vielen dank im vorraus

HWM-Rocker