首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抑制其他画布项目对事件的反应

抑制其他画布项目对事件的反应
EN

Stack Overflow用户
提问于 2021-07-19 06:49:36
回答 1查看 39关注 0票数 0

我在画布上有一个矩形,用于侦听事件,并带有回调函数"A“。

画布中的空白也在侦听带有回调函数"B“的事件。

当我右键单击矩形时,执行"A“和"B”。我理解发生这种情况的原因(矩形在画布上)。

我想要创建的行为只有在右键单击矩形时才是"A“的执行。我怎样才能阻止空荡荡的画布区域对事件作出反应?

请参阅下面的代码作为我当前行为的示例。

代码语言:javascript
复制
import tkinter as tk

window = tk.Tk()
window.geometry('500x500')
window.grid_rowconfigure(0, weight=1)
window.grid_columnconfigure(0, weight=1)

canvas = tk.Canvas(master=window)
canvas.grid(row=0, column=0, sticky='nsew')
canvas.bind('<Button-3>', lambda event: print('canvas right click'))

rectangle_id = canvas.create_rectangle(200, 200, 300, 300, fill='red')
canvas.tag_bind(rectangle_id, '<Button-3>', lambda event: print('rectangle right click'))

window.mainloop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-19 15:16:04

tkinter中没有任何东西可以做到这一点。实际上,Canvas 文档特别指出了这一点:

如果已经使用bind命令为画布窗口创建了绑定,那么除了使用bind小部件命令为画布的项创建绑定之外,还会调用它们。项的绑定将在整个窗口的任何绑定之前调用。

解决方法之一是让您的标记绑定设置某种标志,以告诉画布绑定不要做任何工作。

示例:

代码语言:javascript
复制
import tkinter as tk

do_right_click = True

def canvas_right_click(event):
    global do_right_click
    if do_right_click:
        print("canvas right click")
    do_right_click = True

def element_right_click(event):
    global do_right_click
    do_right_click = False  # prevent canvas from processing this event
    print("rectangle right click")

window = tk.Tk()
window.geometry('500x500')
window.grid_rowconfigure(0, weight=1)
window.grid_columnconfigure(0, weight=1)

canvas = tk.Canvas(master=window)
canvas.grid(row=0, column=0, sticky='nsew')
canvas.bind('<Button-3>', canvas_right_click)

rectangle_id = canvas.create_rectangle(200, 200, 300, 300, fill='red')
canvas.tag_bind(rectangle_id, '<Button-3>', element_right_click)

window.mainloop()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68436193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档