Tkinter按钮按下循环

时间:2017-09-20 17:38:24

标签: python tkinter

我想通过鼠标点击一系列数字以交互方式创建多边形并存储坐标。截至目前,我只能为一个数字执行此操作,因为循环继续并且不等待click事件完成。我究竟做错了什么?在绘图之前我的所有数据处理是否应该在我的onclick函数内完成?这是我的代码片段。

import numpy as np
import matplotlib.pyplot as plt

def onclick(event):
    global ix, iy
    ix, iy = event.xdata, event.ydata

    global coords
    coords.append((ix, iy))

    if len(coords) == 8: # allow for 8 clicks
        fig.canvas.mpl_disconnect(cid)
        plt.close()

for j in np.arange(len(folders)):
    # loop through folders
    for i in np.arange(len(files)):
        # loop through files in folders

        # do data processing

        coords = []

        fig = plt.figure(figsize=(12,12))
        cid = fig.canvas.mpl_connect('button_press_event', onclick)

更新:我添加了一个简单的示例来说明我要做的事情。代码确实运行但它不能完成我想要它做的事情。我想绘制一个底图,在地图上绘制一个不同时间的点,并为每个实例获得8次点击的鼠标坐标。截至目前,它根本没有做我想要的。我通常不会使用函数,也不是Tkinter的新手,所以我们非常感谢您的帮助。

from pylab import *
close("all")
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

def onclick(event):
    global coords
    global ix, iy
    ix, iy = event.xdata, event.ydata

    global coords
    coords.append((ix, iy))
    print 'x = %d, y = %d'%(ix, iy)

    plotloop()

    if len(coords) == 8:
        plt.close()
        fig.canvas.mpl_disconnect(cid)

def plotloop():
    plotlat = [35.,36.,37.,38.]
    plotlon = [-125.,-125.,-125.,-125.]
    x, y = bm(plotlon, plotlat)

    global i
    for i in np.arange(0,5):
        if i == 4:
            plt.close()
            fig.canvas.mpl_disconnect(cid)
        else:
            bm.plot(x[i],y[i],color='r')
            plt.show()

ll_lat_nam = 30.
ll_lon_nam = -130.
ur_lat_nam = 45.
ur_lon_nam = -115.
lon_0_nam = (ll_lon_nam + ur_lon_nam)/2.

fig = plt.figure(figsize=(12,12))
bm = Basemap(projection='lcc',resolution='i',llcrnrlon=ll_lon_nam,llcrnrlat=ll_lat_nam,urcrnrlon=ur_lon_nam,urcrnrlat=ur_lat_nam,lon_0=-95.,lat_0=25.)

bm.drawcoastlines(linewidth=1.25)
bm.drawstates(linewidth=1.25)
bm.drawcountries(linewidth=1.25)
bm.drawparallels(np.arange(20.,60.,5.),labels=[True,False,False,False],zorder=5,fontsize=12,linewidth=1.0)
bm.drawmeridians(np.arange(-140.,-100.,5.),labels=[False,False,False,True],zorder=5,fontsize=12,linewidth=1.0)

coords = []
cid = fig.canvas.mpl_connect('button_press_event', onclick)

0 个答案:

没有答案