Python 鼠标单击时索引事件tkinter

Python 鼠标单击时索引事件tkinter,python,tkinter,Python,Tkinter,有没有办法索引Tkinter画布上的多次单击?我正在尝试编写一个Python脚本,它将保存图像中四个唯一的用户选择区域。每幅图像上都覆盖着显示纬度、经度、日期和时间的文字。目标是让用户选择包含该文本的四个区域,然后裁剪它们以创建四个新图像。 到目前为止,该脚本仍然有效,用户可以打开图像、绘制矩形并打印矩形的坐标。当我将坐标保存到变量中时,它将被下一个矩形覆盖。 如何为矩形选择(或事件)编制索引,使lat、lon、date和time具有唯一的变量,这些变量可以传递给另一个函数以裁剪图像的这些部分?

有没有办法索引Tkinter画布上的多次单击?我正在尝试编写一个Python脚本,它将保存图像中四个唯一的用户选择区域。每幅图像上都覆盖着显示纬度、经度、日期和时间的文字。目标是让用户选择包含该文本的四个区域,然后裁剪它们以创建四个新图像。
到目前为止,该脚本仍然有效,用户可以打开图像、绘制矩形并打印矩形的坐标。当我将坐标保存到变量中时,它将被下一个矩形覆盖。
如何为矩形选择(或事件)编制索引,使lat、lon、date和time具有唯一的变量,这些变量可以传递给另一个函数以裁剪图像的这些部分?
以下是脚本(问题在接近尾声的评论中):


我不明白这个问题。选择一个矩形如何创建4个图像而不是1个,以及“纬度、经度、日期和时间各一个”是什么意思?谢谢您的评论。我只是编辑了我的帖子,希望能让它更清楚。基本上,我想选择一个写有纬度、经度等的区域。。。并保存每个矩形的坐标。
import Tkinter as tk
from Tkinter import *
import tkMessageBox
from PIL import ImageTk, Image
from tkFileDialog import askopenfilename
import os

class kanvas(Frame):
    def __init__ (self, master, **kwargs):
        Frame.__init__(self, master, **kwargs)

        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, weight=1)

        self.canv = Canvas(self, width = 720, height = 480, bd=0, highlightthickness=0)
        self.hScroll = Scrollbar(self, orient='horizontal',
                             command=self.canv.xview)
        self.hScroll.grid(row=1, column=0, sticky='we')
        self.vScroll = Scrollbar(self, orient='vertical',
                             command=self.canv.yview)
        self.vScroll.grid(row=0, column=1, sticky='ns')
        self.canv.grid(row=0, column=0, sticky='nsew', padx=4, pady=4)        
        self.canv.configure(xscrollcommand=self.hScroll.set,
                        yscrollcommand=self.vScroll.set)

class ImgTk(tk.Tk):
    def __init__(self):
    #This function asks the user to select an image then opens it on a tkinter window
        tk.Tk.__init__(self)
        #Above line calls the super class's '__init__' method; resolved error of 'get attr'
        button = tkMessageBox.showinfo(message = "Draw rectangles around lat, lon, date and time")

        self.main = kanvas(self)
        self.main.grid(row=0, column = 0, sticky = 'nsew')
        self.c = self.main.canv

        self.currentImage = {}
        self.load_imgfile(askopenfilename(parent = tk.Toplevel(), initialdir = "D:/", title = "Choose an image:"))

        self.c.bind('<ButtonPress-1>', self.on_mouse_down)
        self.c.bind('<B1-Motion>', self.on_mouse_drag)
        self.c.bind('<ButtonRelease-1>', self.on_mouse_up)

    def load_imgfile(self, filename):
        self.img = Image.open(filename)
        self.currentImage['data'] = self.img

        self.photo = ImageTk.PhotoImage(self.img)
        self.c.xview_moveto(0)
        self.c.yview_moveto(0)
        self.c.create_image(0, 0, image=self.photo, anchor='nw', tags='img')
        self.c.config(scrollregion=self.c.bbox('all'))
        self.currentImage['photo'] = self.photo


    def on_mouse_down(self, event):        
        self.anchor = (event.widget.canvasx(event.x),
                   event.widget.canvasy(event.y))
        self.item = None

    def on_mouse_drag(self, event):        
        bbox = self.anchor + (event.widget.canvasx(event.x),
                          event.widget.canvasy(event.y))
        if self.item is None:
            self.item = event.widget.create_rectangle(bbox, outline="red")
        else:
            event.widget.coords(self.item, *bbox)

    def on_mouse_up(self, event):        
        if self.item:
            self.on_mouse_drag(event) 
            box = tuple((int(round(v)) for v in event.widget.coords(self.item)))
            roi = self.currentImage['data'].crop(box) # region of interest
            values = roi.getdata() # pixel values
            coords = [roi.size[0], roi.size[1], box[0], box[1]]
            print coords

        # Main question: how do I save unique variables from events?
        # The following is what I would like to be able to do:
        # lat = coords from event[0]
        # lon = coords from event[1]
        # time = coords from event[2]
        # date = coords from event[3]

app = ImgTk()
app.mainloop()  
import...
cro_regions = []
class kanvas(...):
...
class ImgTk(...):
    def __init__(...)
    ...
    def on_mouse_up(...)
        if self.item:
            self.on_mouse_drag(event) 
            box = tuple((int(round(v)) for v in event.widget.coords(self.item)))
            roi = self.currentImage['data'].crop(box) # region of interest
            values = roi.getdata() # pixel values
            coords = [roi.size[0], roi.size[1], box[0], box[1]]
            lat =  roi.size[0],'x',roi.size[1],'+',box[0],'+',box[1]
            lat = str(lat)
            lat = lat.replace(',','')
            lat = lat.replace("'", '')
            lat = lat.replace(' ','')
            global crop_regions
            crop_regions.append(lat)

app = ImgTk()
app.mainloop()