Como vinculo um evento ao botão esquerdo do mouse pressionado?
-
17-09-2020 - |
Pergunta
Preciso que um comando seja executado enquanto o botão esquerdo do mouse estiver pressionado.
Solução
Veja a tabela 7-1 dos documentos.Existem eventos que especificam movimento enquanto o botão é pressionado, <B1-Motion>
, <B2-Motion>
etc.
Se você não está falando sobre um evento de pressionar e mover, então você pode começar a fazer sua atividade em <Button-1>
e pare de fazer isso quando receber <B1-Release>
.
Outras dicas
Se você quiser que "algo aconteça" sem nenhum evento intermediário (ou seja:sem que o usuário mova o mouse ou pressione qualquer outro botão), sua única opção é pesquisar.Defina um sinalizador quando o botão for pressionado e desative-o quando for liberado.Durante a pesquisa, verifique o sinalizador e execute seu código, se estiver definido.
Aqui está algo para ilustrar o ponto:
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()
No entanto, a pesquisa geralmente não é necessária em um aplicativo GUI.Você provavelmente só se importa com o que acontece enquanto o mouse está pressionado e está movendo.Nesse caso, em vez da função poll, basta vincular do_work a um <B1-Motion>
evento.
Use os eventos de movimento / movimento do mouse e verifique os sinalizadores do modificador.Os botões do mouse vão aparecer lá.