仅在按键事件上按下“ g”时,Tkinter中的嵌入式Matplotlib图形才会更新为新数据。为什么?

我正在尝试找到一种通过更新数据来更新嵌入在tkinter窗口类中的matplotlib图像图的方法。单击按钮即可修改数据,并使用numpy数组进行存储/操作。

我未能成功删除类实例,但能够嵌入静态图。

我尝试了lucky_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,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)]]))

    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()


多个图形出现在窗口中,而不是更新为同一图形

ieboy2001 回答:仅在按键事件上按下“ g”时,Tkinter中的嵌入式Matplotlib图形才会更新为新数据。为什么?

要清除当前图,请调用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)]]))
    canvas.draw_idle()
    key_press_handler(event,canvas)
    print("you pressed {}".format(event.key))
本文链接:https://www.f2er.com/3163241.html

大家都在问