Domanda

Ho bisogno di un comando da eseguire finché il pulsante sinistro del mouse viene tenuto premuto.

È stato utile?

Soluzione

Guarda la tabella 7-1 dei documenti.Ci sono eventi che specificano il movimento mentre il pulsante viene premuto, <B1-Motion>, <B2-Motion> ecc.

Se non stai parlando di un evento press-and-sposta, puoi iniziare a fare la tua attività su <Button-1> e smetti di farlo quando ricevi <B1-Release>.

Altri suggerimenti

Se vuoi "accadere qualcosa" senza alcun evento intermedio (cioè: senza che l'utente spostasse il mouse o premendo altri pulsanti) la tua sola scelta è il sondaggio.Impostare un flag quando viene premuto il pulsante, non lo è stato rilasciato.Durante il polling, controlla il flag e esegui il tuo codice se il suo set.

Ecco qualcosa da illustrare il punto:

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()
.

Comunque , il polling non è generalmente necessario in un'app GUI.Probabilmente ti interessa solo cosa succede mentre il mouse viene premuto e si muove.In tal caso, invece della funzione di sondaggio è sufficiente semplicemente Bind do_work a un evento <B1-Motion>.

Utilizzare gli eventi movimenti / movimento del mouse e controllare i flag modificatore.I pulsanti del mouse verranno visualizzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top