tkinter NavigationToolbar2TkAgg为imshow改变[z]格式

时间:2017-06-01 08:10:48

标签: python tkinter format toolbar

我在tkinter GUI中使用imshow显示图像,并添加了NavigationToolbar2TkAgg(python3.5)。与this question非常相似(检查视觉效果),我想更改坐标和z值的格式(特别是,我的所有z值都在0-10000之间,所以我想把它们写出去使用科学记数法。)

对于x和y,通过更改format_coord句柄很容易做到,但我似乎找不到任何可以更改最后一位[xxx]的内容。我尝试了format_cursor_data,但似乎也不是。

任何人都知道解决方案吗?

似乎[z]值只显示imshow,而不是普通图。

这是一个重现问题的最小代码示例

import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.figure import Figure

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2TkAgg

top = tk.Tk()

fig = plt.figure()
plt.imshow(np.array([[0,1],[1,2]]))

ax = fig.gca()
ax.format_coord = lambda x,y: "x:%4u, y:%4u" % (x,y)
ax.format_cursor_data = lambda z: "Hello" % (z) # does nothing

canvas = FigureCanvasTkAgg(fig,master=top)
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
canvas.show()

toolbar = NavigationToolbar2TkAgg(canvas, top)
toolbar.update()

top.mainloop()

1 个答案:

答案 0 :(得分:1)

Matplotlib's NavigationToolbar2 classmouse_move()方法中,光标数据及其格式是从Axes实例中最顶层的Artist获得的,而不是从Axes实例本身获得,就像坐标一样。所以你应该做的是:

fig = Figure()
ax = fig.add_subplot(111)
img = np.array([[0,10000],[10000,20000]])
imgplot = ax.imshow(img, interpolation='none')

# Modify the coordinates format of the Axes instance
ax.format_coord = lambda x,y: "x:{0:>4}, y:{0:>4}".format(int(x), int(y))

# Modify the cursor data format of the Artist created by imshow()
imgplot.format_cursor_data = lambda z: "Hello: {}".format(z)

Screenshot