我创建了一个基于Tkinter的应用程序,它使用Matplotlib绘制波形.我想知道如何更改Matplotlib工具栏按钮的工具提示(我需要翻译英文描述,因为我的应用程序是捷克语).我还想更改/翻译或只删除工具栏面板旁边的描述(pan/zoom,zoom rect),单击缩放或平移按钮.
我找到了一些有关如何在工具栏中添加或删除按钮的有用提示,但是没有找到任何有关自定义工具提示/描述的建议.我认为它与前一种情况类似,因为我需要创建一个新的工具栏类,NavigationToolbar2TkAgg并以某种方式修改它.有关如何做到这一点的任何建议?提前谢谢了.
第1部分
所以这应该是非常直接的.在NavigationToolbar2TkAgg类继承自NavigationToolbar2它可以发现matplotlib.backend_bases.如果你看NavigationToolbar2TkAgg,你会看到按钮的弹出文本存储在一个名为的属性中self.toolitems.此属性继承自基类,其定义为:
# list of toolitems to add to the toolbar, format is:
# (
# text, # the text of the button (often not visible to users)
# tooltip_text, # the tooltip shown on hover (where possible)
# image_file, # name of the image for the button (without the extension)
# name_of_method, # name of the method in NavigationToolbar2 to call
# )
toolitems = (
('Home', 'Reset original view', 'home', 'home'),
('Back', 'Back to previous view', 'back', 'back'),
('Forward', 'Forward to next view', 'forward', 'forward'),
(None, None, None, None),
('Pan', 'Pan axes with left mouse, zoom with right', 'move', 'pan'),
('Zoom', 'Zoom to rectangle', 'zoom_to_rect', 'zoom'),
(None, None, None, None),
('Subplots', 'Configure subplots', 'subplots', 'configure_subplots'),
('Save', 'Save the figure', 'filesave', 'save_figure'),
)
Run Code Online (Sandbox Code Playgroud)
每个元组中的第二项是鼠标悬停在按钮上时弹出的文本.要覆盖它,只需子类化并制作自己的版本toolitems.
例如(带填充文本):
import numpy as np
import Tkinter as tk
import matplotlib as mpl
from matplotlib.patches import Rectangle
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
# custom toolbar with lorem ipsum text
class CustomToolbar(NavigationToolbar2TkAgg):
def __init__(self,canvas_,parent_):
self.toolitems = (
('Home', 'Lorem ipsum dolor sit amet', 'home', 'home'),
('Back', 'consectetuer adipiscing elit', 'back', 'back'),
('Forward', 'sed diam nonummy nibh euismod', 'forward', 'forward'),
(None, None, None, None),
('Pan', 'tincidunt ut laoreet', 'move', 'pan'),
('Zoom', 'dolore magna aliquam', 'zoom_to_rect', 'zoom'),
(None, None, None, None),
('Subplots', 'putamus parum claram', 'subplots', 'configure_subplots'),
('Save', 'sollemnes in futurum', 'filesave', 'save_figure'),
)
NavigationToolbar2TkAgg.__init__(self,canvas_,parent_)
class MyApp(object):
def __init__(self,root):
self.root = root
self._init_app()
# here we embed the a figure in the Tk GUI
def _init_app(self):
self.figure = mpl.figure.Figure()
self.ax = self.figure.add_subplot(111)
self.canvas = FigureCanvasTkAgg(self.figure,self.root)
self.toolbar = CustomToolbar(self.canvas,self.root)
self.toolbar.update()
self.plot_widget = self.canvas.get_tk_widget()
self.plot_widget.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
self.toolbar.pack(side=tk.TOP, fill=tk.BOTH, expand=1)
self.canvas.show()
# plot something random
def plot(self):
self.ax.imshow(np.random.normal(0.,1.,size=[100,100]),cmap="hot",aspect="auto")
self.figure.canvas.draw()
def main():
root = tk.Tk()
app = MyApp(root)
app.plot()
root.mainloop()
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
这应该给你一个普通的嵌入式matplotlib图,但当你将鼠标悬停在按钮上时,你会得到类似的东西:

第2部分
问题的第二部分不那么优雅."平移/缩放"和"缩放矩形"的文本被硬编码到工具栏的pan和zoom方法中.实际文本保存在self.mode工具栏的属性中.覆盖它产生的最简单的方法是为基类pan和zoom方法创建子类包装器.
这些包装器CustomToolbar从上面开始上课,如:
def pan(self):
NavigationToolbar2TkAgg.pan(self)
self.mode = "I'm panning!" #<--- whatever you want to replace "pan/zoom" goes here
self.set_message(self.mode)
def zoom(self):
NavigationToolbar2TkAgg.zoom(self)
self.mode = "I'm zooming!" #<--- whatever you want to replace "zoom rect" goes here
self.set_message(self.mode)
Run Code Online (Sandbox Code Playgroud)
这只是一种方法,另一种set_message方法是包装方法来捕获和翻译特定的文本位.
| 归档时间: |
|
| 查看次数: |
6754 次 |
| 最近记录: |