Comment puis-je lier un événement à la bouton gauche de la souris se tiendra le bas?

StackOverflow https://stackoverflow.com/questions/3288001

  •  17-09-2020
  •  | 
  •  

Question

J'ai besoin d'une commande doit être exécutée tant que le bouton gauche de la souris est maintenu enfoncé.

Était-ce utile?

La solution

Regardez le tableau 7-1 de la documentation.Il y a des événements qui spécifient le mouvement tandis que le bouton est pressé, <B1-Motion>, <B2-Motion> etc.

Si vous n'êtes pas à parler d'un presse-et-déplacer l'événement, alors vous pouvez commencer à faire votre activité sur <Button-1> et de cesser de le faire quand vous recevez <B1-Release>.

Autres conseils

Si vous voulez "quelque chose", sans aucune intervention événements (c'est à dire:sans que l'utilisateur en déplaçant la souris ou en appuyant sur n'importe quel autre bouton), votre seul choix est à interroger.Définir un indicateur lorsque le bouton est enfoncé, la fonction unset (lorsqu'elle est relâchée.Lors de l'interrogation, vérifiez l'indicateur et exécuter votre code si son ensemble.

Voici quelque chose pour illustrer ce point:

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

Cependant, l'interrogation n'est généralement pas nécessaire dans une interface graphique, app.Vous avez probablement ne se soucient de ce qui se passe pendant que la souris est enfoncé et est en mouvement.Dans ce cas, au lieu de le sondage fonction simplement lier do_work à un <B1-Motion> de l'événement.

Utilisez les événements de déplacement / mouvement de la souris et vérifiez les indicateurs de modificateur.Les boutons de la souris s'afficheront là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top