Pergunta

Preciso que um comando seja executado enquanto o botão esquerdo do mouse estiver pressionado.

Foi útil?

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á.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top