工具栏工具 - 位图切换

问题描述:

我正在使用wxpython 2.8,这可能会使事情稍微困难一些。工具栏工具 - 位图切换

我想在工具栏中创建一个按钮,如果它切换,它只是简单地改变它的位图。无论何时切换改变,位图都会变为适当的图标。

看到,因为这种能力似乎没有建成,我不希望我的看法过于紧密混合我的控制,我赶紧尝试这样做:

class ToggleToolBarBase(wx.ToolBarToolBase): 
    """A ToolBar Button with bitmaps which is meant to be toggled.""" 

    def __init__(self, tbar=None, toolid=wx.ID_SEPARATOR, label="", 
       bmpOff=wx.NullBitmap, bmpOn=wx.NullBitmap, 
       kind=wx.ITEM_NORMAL, clientData=None, 
       shortHelpString="", longHelpString=""): 
     # super(ToggleToolBarBase, self).__init__(self, tbar, toolid, label, 
     #           bmpOff, bmpOn, 
     #           kind, clientData, 
     #           shortHelpString, 
     #           longHelpString) 
     # Which constructor can I use? 
     super(ToggleToolBarBase, self).__init__() 
     self.tbar = tbar 
     self.bmpOff = bmpOff 
     self.bmpOn = bmpOn 
     self.toggle = False 

    def Toggle(self): 
     super(ToggleToolBarBase, self).Toggle() 
     self.toggle = not self.toggle 

    @property 
    def toggle(self): 
     return self._toggle 

    @toggle.setter 
    def toggle(self, value): 
     self._toggle = value 
     if value is False: 
      self.SetNormalBitmap(self.bmpOff) 
     elif value is True: 
      self.SetNormalBitmap(self.bmpOn) 
     self.tbar.Realize() 
     self.tbar.Refresh() 

所有toolbar.AddLabelTool()函数返回ToolBarToolBase所以我想我可以简单地扩展它,但没有构造函数的工作,它看起来像它只是一个C++类的代理。

我尝试了一些其他方法,但似乎没有任何工作正常。当然必须有一个简单的解决方案。我想这是经常实施的。

您是对的,ToolBarToolBase不适合用作公共API的一部分。它更像是一种内部使用的类,您可以以有限的方式使用它来获取有关工具栏项目的一些信息。从添加工具方法返回的内容实际上是一个特定于平台的派生类,它帮助wx类与本地工具栏小部件进行交互。

要在切换工具(kind=wx.ITEM_CHECK)时更改位图,您需要在单击工具时调用的事件处理程序中自己交换图像。您可以使用类似theToolBar.SetToolNormalBitmap(id, new_bmp)的东西您可能需要至少在某些平台上再次调用theToolBar.Realize()才能使工具栏获取新图像。