Мышь застегивает события, игнорируемые в tkinter? - PullRequest
0 голосов
/ 25 марта 2019

Следующий фрагмент кода должен сообщать о событиях щелчков мыши, но о событиях 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)

Комментарии: Я считаю, что предыдущий вопрос в значительной степени самодостаточен, но программа не позволит мне добавить еще несколько комментариев. Поэтому, пожалуйста, задавайте вопросы, чтобы я мог добавлять больше комментариев по мере необходимости. Этот пост о менеджерах событий, которые никогда не называются ...

1 Ответ

2 голосов
/ 25 марта 2019

Я не вижу B1-Up в документации: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

Я вижу, однако, ButtonRelease-1. Это правильное событие для привязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...