为了演示 Graph 算法,我需要将 networkx 图绘制到 Tkinter Canvas 并能够在运行时修改该图(和绘图)。
我拼凑了以下代码(我希望它是导致我的问题的最小代码,但我是新手,所以我不确定):
import matplotlib
matplotlib.use('TkAgg')
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import Tkinter as Tk
import networkx as nx
from tkMessageBox import showinfo
root = Tk.Tk()
root.wm_title("Animated Graph embedded in TK")
root.wm_protocol('WM_DELETE_WINDOW', root.quit())
f = plt.figure(figsize=(5,4))
a = f.add_subplot(111)
plt.axis('off')
# the networkx part
G=nx.complete_graph(5)
nx.draw_networkx(G,pos=nx.spring_layout(G),ax=a)
# a tk.DrawingArea
canvas = FigureCanvasTkAgg(f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)
def next_graph():
if G.order():
a.cla()
G.remove_node(G.nodes()[-1])
nx.draw(G, pos=nx.circular_layout(G), ax=a)
canvas.draw()
b = Tk.Button(root, text="next",command=next_graph)
b.pack()
Tk.mainloop()
我现在的问题是:图表的第一次显示就像我想要的一样(背景颜色),但是在您第一次单击“下一步”后,图表的背景颜色变为白色。我尝试更改图形和画布的背景颜色。我什至不知道是什么带来了这种变化,我认为它只是在同一个画布上画了两次。
如何修改代码以使图形始终具有相同的背景颜色?
在不相关的说明中:我添加的 root.quit() 无助于正确结束应用程序。这对我来说可能很愚蠢,但是这里出了什么问题?