2013-10-13 2 views
0

TkInter Canvas에 Matplotlib Basemap을 추가하려고합니다. 그러나 기본 맵을 사용하지 않아도 제대로 작동하지만 파이썬 충돌을 일으키려고 할 때. 코드 블록 # 1은 작동하는 코드이며, 코드 블록 # 2는 프로그램을 중단시킵니다. m=Basemap(...) 부분을 제외한 # 2의 모든 항목을 삭제하면 충돌이 발생합니다. Basemap(...)을 계산하는 데는 약 6 ~ 7 초 정도 걸리므로 TkInter가 충돌하는 이유입니다. TkInter에게 내가 기다릴 수있는 아이디어가 있습니까?TkInter Matplotlib FigureCanvasTkAgg의베이스 맵

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

'충돌'이란 무엇입니까? 기본적으로 차단해야합니다. – tacaswell

+0

'Python이 예기치 않게 종료 됨 ' –

답변

0

캔버스 = FigureCanvasTkAgg (m, 마스터 = ROOT1) 내가 사용한다고 생각하지 않습니다

'm '여기.

그림을 만들고 서브 그림 (ax)을 추가하고 그 도끼를베이스 맵에 전달해야합니다.

그림을 FigureCanvasTkAgg의 매개 변수로 사용하십시오.

import matplotlib 
matplotlib.use('TkAgg') 
from mpl_toolkits.basemap import Basemap 
from matplotlib.figure import Figure 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 

import sys 
if sys.version_info[0] < 3: 
    import Tkinter as Tk 
else: 
    import tkinter as Tk 

root = Tk.Tk() 
fig = Figure() ## here 
ax1 = fig.add_subplot(111) ## here 

m = Basemap(width=12000000,height=9000000,projection='lcc', 
      resolution='c',lat_1=45.,lat_2=55,lat_0=50,lon_0=-107., 
      ax=ax1) ## here 
m.drawcoastlines() 
m.drawmapboundary(fill_color='aqua') 
m.fillcontinents(color='coral',lake_color='aqua') 

canvas = FigureCanvasTkAgg(fig, master=root) ## here 
canvas.show() 
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) 
canvas._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) 

root.mainloop() 
관련 문제