Как связать событие с нажатой левой кнопкой мыши? - PullRequest
4 голосов
/ 20 июля 2010

Мне нужна команда для выполнения, пока левая кнопка мыши удерживается нажатой.

Ответы [ 3 ]

5 голосов
/ 20 июля 2010

Если вы хотите, чтобы «что-то произошло» без каких-либо промежуточных событий (т.е. без перемещения пользователем мыши или нажатия каких-либо других кнопок), ваш единственный выбор - опрос.Установите флаг, когда кнопка нажата, сбросьте его, когда отпустите.Во время опроса проверьте флаг и запустите код, если он установлен.

Вот что иллюстрирует точку:

import Tkinter

class App:
    def __init__(self, root):
        self.root = root
        self.mouse_pressed = False
        f = Tkinter.Frame(width=100, height=100, background="bisque")
        f.pack(padx=100, pady=100)
        f.bind("<ButtonPress-1>", self.OnMouseDown)
        f.bind("<ButtonRelease-1>", self.OnMouseUp)

    def do_work(self):
        x = self.root.winfo_pointerx()
        y = self.root.winfo_pointery()
        print "button is being pressed... %s/%s" % (x, y)

    def OnMouseDown(self, event):
        self.mouse_pressed = True
        self.poll()

    def OnMouseUp(self, event):
        self.root.after_cancel(self.after_id)

    def poll(self):
        if self.mouse_pressed:
            self.do_work()
            self.after_id = self.root.after(250, self.poll)

root=Tkinter.Tk()
app = App(root)
root.mainloop()

Однако , опрос обычно не требуетсяприложение с графическим интерфейсом.Вы, вероятно, заботитесь только о том, что происходит, когда мышь нажата и движется.В этом случае вместо функции poll просто привяжите do_work к событию <B1-Motion>.

4 голосов
/ 20 июля 2010

Посмотрите на таблицу 7-1 документации. Есть события, которые определяют движение при нажатии кнопки, <B1-Motion>, <B2-Motion> и т. Д.

Если вы не говорите о событии нажатия и перемещения, тогда вы можете начать выполнять свою деятельность на <Button-1> и прекратить ее, когда получите <B1-Release>.

1 голос
/ 20 июля 2010

Используйте события перемещения / движения мыши и проверьте флаги модификатора.Там будут отображаться кнопки мыши.

...