Мне нужна команда для выполнения, если левая кнопка мыши удерживается.Как связать событие с нажатой левой кнопкой мыши?
ответ
Посмотрите на таблицу 7-1 документов. Есть события, которые определяют движение, пока кнопка нажата, <B1-Motion>
, <B2-Motion>
и т.д.
Если вы не говорите о событии нажми и двигаться, то вы можете начать делать свою деятельность на <Button-1>
и прекратить делать это, когда вы получаете <B1-Release>
.
Используйте мышиные события перемещения/движения и проверьте флаги модификатора. Там появятся кнопки мыши.
Если вы хотите «что-то произойти» без каких-либо промежуточных событий (то есть: без перемещения пользователем мыши или нажатия каких-либо других кнопок), ваш единственный выбор - опрос. Установите флаг при нажатии кнопки, отмените его при отпускании. Во время опроса проверьте флаг и запустите свой код, если он установлен.
Вот кое-что, чтобы проиллюстрировать этот момент:
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>
.
Как выглядит код для остановки события? – rectangletangle
Я бы рекомендовал сохранить переменную типа 'mouse_is_down' и установить ее в« True »или« False »в зависимости от того, получаете ли вы событие прессования или выпуска. В вашем коде во время цикла вы можете проверить, соответствует ли переменная 'True', что означает, что мышь не работает, и делайте свое дело для удерживания кнопки. Когда переменная 'False', вы можете пропустить код для удерживания кнопки мыши. –
Видимо, теперь ссылка должна быть: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm –