我有带有几个图标的wxpython工具栏,例如连接,播放,保存等。我想切换连接图标。
当我连接时,连接位图应替换为disconnect,反之亦然。在wxpython中是否有任何现成的方法可以在工具栏中实现此行为。我正在使用的另一种方式是显示连接和断开连接以及基于操作的启用/禁用,但我有这么多图标..所以切换我想节省一些空间
答案 0 :(得分:3)
使用常规wx.ToggleButton,您需要更改切换事件处理程序中的图标:
import wx
########################################################################
class MyPanel(wx.Panel):
""""""
#----------------------------------------------------------------------
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
self.save_ico = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR, (16,16))
self.print_ico = wx.ArtProvider.GetBitmap(wx.ART_PRINT, wx.ART_TOOLBAR, (16,16))
self.toggleBtn = wx.ToggleButton(self)
self.toggleBtn.SetBitmap(self.save_ico)
self.toggleBtn.Bind(wx.EVT_TOGGLEBUTTON, self.onToggle)
#----------------------------------------------------------------------
def onToggle(self, event):
""""""
btn = event.GetEventObject()
if btn.GetValue():
self.toggleBtn.SetBitmap(self.print_ico)
else:
self.toggleBtn.SetBitmap(self.save_ico)
########################################################################
class MyFrame(wx.Frame):
""""""
#----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="Toggle buttons")
panel = MyPanel(self)
self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
如果使用ToggleButton的通用版本,则可以使用SetBitmapSelected()方法。您可以在wx.lib.buttons中找到通用版本。您可以在wxPython演示包中看到这样的示例。
奇怪的是,对于从wxPython 2.9开始的常规ToggleButton,SetBitmapSelected()似乎存在,但是它的功能不同。当您按下按钮时,您只能看到备用图像,但是当按钮被释放时它会恢复。