Matplotlib Basemap を TkInter Canvas に追加しようとしています。ベースマップを使用しなくても問題なく動作しますが、1 つの Python をプロットしようとするとクラッシュします。コード ブロック #1 は機能するコードで、コード ブロック #2 はプログラムをクラッシュさせます。#2 の一部を除くすべてを削除するm=Basemap(...)
と、クラッシュも発生します。の計算にBasemap(...)
は約 6 ~ 7 秒かかります。これが TkInter がクラッシュする原因だと思います。TkInterに待機するように指示する方法はありますか?
1:
def plot_route(self, geom1, root):
root1 = Tk()
x1, y1 = zip(*((geom1.GetX(i), geom1.GetY(i)) for i in range(geom1.GetPointCount())))
f = Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)
a.plot(x1,y1)
a.set_title('Tk embedding')
a.set_xlabel('X axis label')
a.set_ylabel('Y label')
canvas = FigureCanvasTkAgg(f, master=root1)
canvas.show()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
root1.mainloop()
2:
def plot_route(self, geom1, root):
root1 = Tk()
m = Basemap(width=12000000,height=9000000,projection='lcc', resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.)
m.drawcoastlines()
m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='coral',lake_color='aqua')
canvas = FigureCanvasTkAgg(m, master=root1)
canvas.show()
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
root1.mainloop()