自定义使用 NavigationToolbar2Tk 创建的工具栏的图标

问题描述 投票:0回答:0

我想自定义 matplotlib 工具栏上的图标(如主页、后退、前进、平移等)。在这种情况下,我正在编写一个带有 tkinter 的 GUI,在 GUI 的小部件中嵌入了 pyplot 图,并使用 NavigationToolbar2Tk 创建了工具栏。

搜索了一下后,我没有找到一个明确的方法来做到这一点。我的第一种方法是定义一个继承 NavigationToolbar2Tk 的所有内容的子类,然后修改图标路径所在的方法,将路径放置到我的自定义图标。我试图做这样的事情:

class custom_NavigationToolbar2Tk(NavigationToolbar2Tk):
    """Make a custom toolbar with custom icons"""

    def _set_image_for_button(self, button):
        """
        Ovveride this method to chose custom icons
        """
        path_regular = pathlib.Path(os.path.join(os.path.dirname(__file__), "icons", os.path.basename(button._image_file)))

_set_image_for_button 是包含图标路径 path_regular 的变量所在的方法的名称。我只想覆盖父类中的这个变量,同时保持其他一切不变。当在我的主代码中调用 custom_NavigationToolbar2Tk 时,它确实创建了工具栏,但它似乎完全忽略了我代码中的 _set_image_for_button 方法,所以图标仍然是旧的。

我找到了一个可行的解决方法,即我在 NavigationToolbar2Tk._set_image_for_button 的整个代码中仅在我的代码中定义了 _set_image_for_button 方法,仅用我的表达式替换了 path_regular 变量的原始表达式,该表达式给出了我的自定义图标的位置,并且比我这样重写原来的方法:

NavigationToolbar2Tk._set_image_for_button = _set_image_for_button

这确实按预期工作,旧图标被我的新图标替换了。我不太喜欢这个解决方案,也不明白为什么第一种方法不起作用。

python toolbar tkinter-canvas matplotlib-widget
© www.soinside.com 2019 - 2024. All rights reserved.