Toolbar Icon ändern?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Hand
User
Beiträge: 65
Registriert: Sonntag 28. Januar 2007, 14:28

Freitag 16. Februar 2007, 17:55

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:
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 16. Februar 2007, 18:12

Nicht besonders elegant, aber funktioniert vielleicht trotzdem:
Mit RemoveTool oder DeleteTool löschen und mit InsertTool mit neuem Icon einfügen.
MfG
HWK
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 16. Februar 2007, 18:50

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 16. Februar 2007, 18:57

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']
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hand
User
Beiträge: 65
Registriert: Sonntag 28. Januar 2007, 14:28

Freitag 16. Februar 2007, 19:11

Super, danke :D

Findet man das auch irgendwo in der wx Doku?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 16. Februar 2007, 21:23

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
HWM-Rocker
User
Beiträge: 3
Registriert: Samstag 29. März 2008, 18:15

Samstag 29. März 2008, 18:21

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
Antworten