<p>如果我没弄错的话,OP的原始代码只缺少<code>canvas.draw()</code>。furas</em>也表明了这一点。我最近发现很难找到一个完整的例子来说明如何用Seaborn在tkintergui上绘图,尤其是如何在画布上重画。在</p>
<p>所以,让我给你一个完整的程序片段,这个程序最初在每次按键时都会绘制和重画。在</p>
<pre><code>import tkinter
from typing import Callable
import numpy as np
import seaborn as sns
from matplotlib.backend_bases import key_press_handler
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
def init_gui(root, update_function: Callable) -> FigureCanvasTkAgg:
def event_key_press(event):
print("you pressed {}".format(event.key))
update_function()
key_press_handler(event, canvas)
# create empty figure and draw
init_figure = create_figure()
canvas = FigureCanvasTkAgg(init_figure, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
# call key press event
canvas.mpl_connect("key_press_event", event_key_press)
return canvas
def create_figure() -> Figure:
# generate some data
matrix = np.random.randint(20, size=(10, 10))
# plot the data
figure = Figure(figsize=(6, 6))
ax = figure.subplots()
sns.heatmap(matrix, square=True, cbar=False, ax=ax)
return figure
def redraw_figure():
figure = create_figure()
canvas.figure = figure
canvas.draw()
sns.set()
root = tkinter.Tk()
canvas = init_gui(root, update_function=redraw_figure)
tkinter.mainloop()
</code></pre>
<p>我使用了matplotlib提供的一些<a href="https://matplotlib.org/3.1.0/gallery/user_interfaces/embedding_in_tk_sgskip.html" rel="nofollow noreferrer">example code</a>。在</p>
<p>上面的代码在执行和按某些键时的外观如下:</p>
<p><a href="https://i.stack.imgur.com/Dx25r.gif" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Dx25r.gif" alt="Preview of Tkinter with Seaborn plot"/></a></p>