Как связать событие на левую кнопку мыши?
-
17-09-2020 - |
Вопрос
Мне нужна команда, которая должна быть выполнена, пока удерживается левая кнопка мыши.
Решение
Посмотрите на таблицу 7-1 документов.Существуют события, которые указывают движение, когда кнопка нажата, <B1-Motion>
, <B2-Motion>
и т. Д.
Если вы не говорите о событии прессы и перемещения, то вы можете начать выполнять свою активность на <Button-1>
и прекратить делать это, когда вы получаете <B1-Release>
.
Другие советы
Если вы хотите, чтобы «что-то произошло» без каких-либо промежуточных событий (т. Е. Без пользователей перемещают мышь или нажав любые другие кнопки) Ваш единственный выбор - это опрос.Установите флаг, когда кнопка нажата, Unset это, когда выпустите.Во время опроса проверяйте флаг и запустите свой код, если его набор.
Вот что-то, чтобы проиллюстрировать точку:
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()
.
<Сильные> Однако опрос, как правило, не нужно в приложении GUI.Вы, вероятно, заботитесь только о том, что происходит, пока мышь нажата , а движется.В этом случае вместо функции опроса просто свяжите Do_work на событие <B1-Motion>
.
Используйте события движения / движения мыши и проверьте флаги модификатора.Кнопки мыши покажут там.