在 tkinter 中忽略鼠标按钮向上事件?

Mouse buttons up events ignored in tkinter?

以下代码应报告鼠标点击事件,但从未报告过 Bx-Up 事件...这是错误还是我遗漏了什么?

#!/usr/bin/python3
# coding: UTF-8

# Testing mouse events in tkinter

import tkinter as tk

class MyMouse:

    def __init__(self):

        def init_vars():

            self.padx, self.pady = 40, 40
            self.xsize, self.ysize = 800, 600

        def create_window():

            def create_canvas(wdth, hght):
                canvas = tk.Canvas(mywin, width=wdth, height=hght, bg='white')
                canvas.bind(sequence='<1>', func=self.b1)
                canvas.bind(sequence='<B1-Motion>', func=self.b1_motion)
                canvas.bind(sequence='<B1-Up>', func=self.b1_up)
                canvas.bind(sequence='<2>', func=self.b2)
                canvas.bind(sequence='<B2-Motion>', func=self.b2_motion)
                canvas.bind(sequence='<B2-Up>', func=self.b2_up)
                canvas.bind(sequence='<3>', func=self.b3)
                canvas.bind(sequence='<B3-Motion>', func=self.b3_motion)
                canvas.bind(sequence='<B3-Up>', func=self.b3_up)
                return canvas

            mywin = tk.Tk()
            mywin.title("Testing mouse events in tkinter")
            mywin.canvas = create_canvas(self.xsize, self.ysize)
            mywin.canvas.pack(side=tk.TOP, padx=self.padx, pady=self.pady,
                                expand=True, fill=tk.BOTH)
            return mywin

        init_vars()
        self.mywin = create_window()
        self.mywin.mainloop()


    def b1(self, event):
        print('b1 called', (event.x, event.y), flush=True)

    def b1_motion(self, event):
        print('b1_motion called', (event.x, event.y), flush=True)

    def b1_up(self, event):
        print('b1_up called', (event.x, event.y), flush=True)

    def b2(self, event):
        print('b2 called', (event.x, event.y), flush=True)

    def b2_motion(self, event):
        print('b2_motion called', (event.x, event.y), flush=True)

    def b2_up(self, event):
        print('b2_up called', (event.x, event.y), flush=True)

    def b3(self, event):
        print('b3 called', (event.x, event.y), flush=True)

    def b3_motion(self, event):
        print('b3_motion called', (event.x, event.y), flush=True)

    def b3_up(self, event):
        print('b3_up called', (event.x, event.y), flush=True)

MyMouse()

报告:

b1 called (452, 238)
b1 called (452, 238)
b1 called (452, 238)
b1 called (452, 238)
b2 called (452, 238)
b2 called (452, 238)
b3 called (452, 238)
b3 called (452, 238)
b3 called (452, 238)
b1 called (381, 242)
b1_motion called (381, 243)
b1_motion called (399, 255)
b1_motion called (410, 262)
b1_motion called (413, 263)
b2 called (415, 264)

评论:我认为前面的问题在很大程度上是自给自足的,但程序不允许我添加更多评论。所以请提出问题,以便我可以根据需要添加更多评论。 post 是关于从未被调用的事件管理器...

我没有在文档中看到 B1-Uphttp://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

不过,我确实看到了 ButtonRelease-1。这是要绑定的正确事件。