グラフ アルゴリズムのデモでは、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()
私の問題は次のとおりです。グラフの最初の表示は(背景色に関して)希望どおりですが、最初に「次へ」をクリックすると、グラフの背景色が白に変わります。フィギュアとキャンバスの背景色を変えてみました。何がその変化をもたらすのかさえわかりませんが、同じキャンバスに2回描画しているだけだと思います。
グラフの背景色が常に同じになるようにコードを変更するにはどうすればよいですか?
無関係なメモ: 追加した root.quit() は、アプリケーションを適切に終了するのに役立ちません。これは私の側ではばかげているかもしれませんが、ここで何がうまくいかなかったのですか?