首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >工具栏工具-位图切换

工具栏工具-位图切换
EN

Stack Overflow用户
提问于 2016-08-02 20:58:08
回答 1查看 349关注 0票数 0

我正在使用wxpython2.8,这可能会使事情变得更加困难。

我试图在工具栏中创建一个按钮,如果它被切换,它就会简单地改变它的位图。无论何时切换更改,位图都会更改到相应的图标。

鉴于此功能似乎没有内置,而且我不想将我的控件与我的视图混为一谈,我很快就尝试了这样的方法:

代码语言:javascript
运行
复制
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++类的代理。

我尝试了一些其他的方法,但是似乎没有任何方法是正确的。当然,必须有一个简单的解决办法。我认为这是相当经常实现的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-03 02:51:59

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38730314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档