5

このようなコードがあります

from Tkinter import *
master = Tk()
def oval_mouse_click(event):
    print "in oval"
def canvas_mouse_click(event):
    print "in canvas"
w = Canvas(master, width = 800, height = 600)
uid = w.create_oval(390, 290, 410, 310, fill='blue')
w.tag_bind(uid, "<Button-1>", lambda x: oval_mouse_click(x))
w.bind("<Button-1>" , canvas_mouse_click)
w.pack()
mainloop()

キャンバスをクリックすると、コンソールに「キャンバス内」というメッセージが表示されます。楕円をクリックすると、「楕円内」と「キャンバス内」の 2 つのメッセージが表示されますが、最初のメッセージのみが必要です。イベントの発生を停止する方法はありますか?

グローバル フラグを使用してこのタスクを実行できますが、Tkl にはもっと自然な方法があるはずです。

4

2 に答える 2

2

問題を処理する最も簡単な例を次に示します。

import Tkinter

def oval_mouse_click(event):
    print "in oval"
    event.widget.tag_click = True

def canvas_mouse_click(event):
    if event.widget.tag_click:
        event.widget.tag_click = False
        return
    print "in canvas"

root = Tkinter.Tk()
canvas = Tkinter.Canvas(width=400, height=300)
oid = canvas.create_oval(400/2-10, 300/2-10, 400/2+10, 300/2+10, fill='blue')
canvas.tag_click = False
canvas.tag_bind(oid, "<Button-1>", oval_mouse_click)
canvas.bind("<Button-1>" , canvas_mouse_click)
canvas.pack()
root.mainloop()

の下でこれを処理するより簡単な方法は他にありませんCanvas

于 2013-01-23T12:58:23.587 に答える