【问题标题】:Matplotlib and Tkinter - set axes navigation mode back to NoneMatplotlib 和 Tkinter - 将轴导航模式设置回无
【发布时间】:2018-09-19 10:25:49
【问题描述】:

我正在尝试在 python 3 中构建一个集成了 matplotlib 的 FigureCanvasTkAgg 后端的 tkinter 应用程序。我使用 NavigationToolbar2TkAgg 创建导航栏小部件,该小部件创建按钮以将轴导航模式更改为“PAN”和“ZOOM”。但是,默认情况下没有创建将导航模式更改回默认值(无)的按钮。我尝试创建一个自定义函数并将其绑定到一个按钮:self.select_button = tk.Button(self,command = lambda:self.ax.set_navigate_mode(None)).pack(side=tk.LEFT,anchor=tk.W) 但单击按钮时轴保持平移模式。更大的代码sn-p:

import tkinter as tk
import matplotlib.pyplot as plt 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg
from matplotlib.figure import Figure
matplotlib.use('TkAgg')

class Viewer(tk.Frame):
    def __init__(self, parent, collection=None, with_toolbar=True):
        tk.Frame.__init__(self, parent)
        self.fig = plt.Figure(figsize=(8, 6)) 
        self.ax = self.fig.add_subplot(111)
        self.canvas = FigureCanvasTkAgg(self.fig, master=self)
        self.navbar = NavigationToolbar2TkAgg(self.canvas, self)
        self.select_button = tk.Button(self,command = 
            lambda:self.ax.set_navigate_mode(None))
            .pack(side=tk.LEFT,anchor=tk.W)

这是我尝试使用的文档:https://matplotlib.org/api/axes_api.html

感谢您的帮助。

【问题讨论】:

    标签: python matplotlib tkinter


    【解决方案1】:

    NavigationToolbar2TkAgg 类带有 panzoom 方法,分别用于切换平移和缩放模式。与其直接调用set_navigate_mode,不如使用get_navigate_mode检查当前导航模式,然后调用相应的切换方法。

    self.navbar = NavigationToolbar2TkAgg(self.canvas, self)
    ...
    if self.ax.get_navigate_mode == 'PAN':
        self.navbar.pan()
    elif self.ax.get_navigate_mode == 'ZOOM':
        self.navbar.zoom()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多