我试图通过更新数据,找到一种方法来更新嵌入在tkinter窗口类中的matplotlib图像图。通过单击按钮修改数据,并使用numpy数组存储/操作数据。
我在删除类实例方面没有成功,但是我能够嵌入静态图。
我试过forget_pack(),del,但都没有用
import tkinter
from random import randint
import matplotlib as plt
import numpy as np
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
# Implement the default Matplotlib key bindings.
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
root = tkinter.Tk()
root.wm_title("Embedding in Tk")
#create figure
fig = Figure(figsize=(5, 4), dpi=100)
ax = fig.add_axes([0,0,1,1])
ax.imshow(np.array([[0,10],[23,40]]))
#plt.rcParams["keymap.grid"] = ""
#create canvas with figure
canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
def on_key_press(event):
#if event.key == 'x':
ax.imshow(np.array([[randint(0,30),randint(0,30)],[randint(0,30),randint(0,30)]]))
key_press_handler(event, canvas) # toolbar)
print("you pressed {}".format(event.key))
#connect canvas to event function
canvas.mpl_connect("key_press_event", on_key_press)
def _quit():
root.quit() # stops mainloop
root.destroy() # this is necessary on Windows to prevent
# Fatal Python Error: PyEval_RestoreThread: NULL tstate
button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)
tkinter.mainloop()
窗口中出现多个图,而不是更新到相同的图中。
发布于 2019-11-08 21:15:55
若要清除当前绘图,请调用ax.clear()
。然后可以使用ax.imshow(...)
,最后使用canvas.draw_idle
重新绘制画布,如下所示:
def on_key_press(event):
ax.clear()
ax.imshow(np.array([[randint(0,30),randint(0,30)],[randint(0,30),randint(0,30)]]))
canvas.draw_idle()
key_press_handler(event, canvas)
print("you pressed {}".format(event.key))
https://stackoverflow.com/questions/58702265
复制