我有2个画布矩形,其中有一个按钮-1的绑定.有时我希望当一个矩形得到这个事件时,另一个矩形也应该得到这个事件.所以我必须通过小部件方法"EVENT_GENERATE"复制-1\f25 Button-1事件.
我的示例代码很少,所以您只能按一次鼠标左键.当您在红色矩形上按下鼠标左键时,可以识别此事件,这可以通过显示消息"Button1 red"来证明.因为我已经 for each 矩形添加了第二个绑定,所以也启动了方法"Create_Event_for_Rectangle",显示的消息"Create Event for Other Rectangle"证明了这一点.此方法还会在绿色矩形处生成新的Button-1事件.生成的事件的坐标似乎是正确的,因为另外还在计算的坐标上创建了一个小矩形.这个在绿色矩形处生成的事件现在应该会创建消息"Button1 green 45 45",但是什么都没有发生.
这是我的代码:
import tkinter as tk
class rectangle():
def __init__(self, factor, color):
self.canvas_id=canvas.create_rectangle(factor*10,factor*10,
(factor+1)*10,(factor+1)*10,fill=color)
canvas.tag_bind(self.canvas_id, "<Button-1>", self.button1)
self.color = color
def button1(self, event):
print("button1", self.color, event.x, event.y)
def get_canvas_id(self):
return self.canvas_id
def get_center(self):
coords = canvas.coords(self.canvas_id)
return (coords[0]+coords[2])/2, (coords[1]+coords[3])/2
def create_event_for_rectangle(not_clicked):
print("Create event for other rectangle")
canvas.tag_unbind(red.get_canvas_id() , "<Button-1>", func_id_red)
canvas.tag_unbind(green.get_canvas_id(), "<Button-1>", func_id_green)
not_clicked_center_x, not_clicked_center_y = not_clicked.get_center()
canvas.event_generate("<Button-1>",
x=not_clicked_center_x, y=not_clicked_center_y)
canvas.create_rectangle(not_clicked_center_x-1, not_clicked_center_y-1,
not_clicked_center_x+1, not_clicked_center_y+1)
root = tk.Tk()
canvas = tk.Canvas(width=100, height=100)
canvas.grid()
red = rectangle(1, "red" )
green = rectangle(4, "green")
func_id_red = canvas.tag_bind(red.get_canvas_id() , "<Button-1>",
lambda event: create_event_for_rectangle(green), add="+multi")
func_id_green = canvas.tag_bind(green.get_canvas_id(), "<Button-1>",
lambda event: create_event_for_rectangle(red ), add="+multi")
root.mainloop()
我做错了什么?