2016-08-02 71 views
0

我正在使用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++類的代理。

我嘗試了一些其他方法,但似乎沒有任何工作正常。當然必須有一個簡單的解決方案。我想這是經常實施的。

回答

1

您是對的,ToolBarToolBase不適合用作公共API的一部分。它更像是一種內部使用的類,您可以以有限的方式使用它來獲取有關工具欄項目的一些信息。從添加工具方法返回的內容實際上是一個特定於平臺的派生類,它幫助wx類與本地工具欄小部件進行交互。

要在切換工具(kind=wx.ITEM_CHECK)時更改位圖,您需要在單擊工具時調用的事件處理程序中自己交換圖像。您可以使用類似theToolBar.SetToolNormalBitmap(id, new_bmp)的東西您可能需要至少在某些平臺上再次調用theToolBar.Realize()才能使工具欄獲取新圖像。