イベントを左マウスボタンに保持しているのにどのようにバインドしますか?

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

  •  17-09-2020
  •  | 
  •  

質問

マウスの左ボタンを押したままにする限り、実行するコマンドが必要です。

役に立ちましたか?

解決

ドキュメントの表7-1を見てください。ボタンが押されている間に動きを指定するイベント、<B1-Motion><B2-Motion>などがあります。

Press-and-Moveイベントについて話していない場合は、<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()
.

しかし、Pollingは一般的にGUIアプリでは必要ありません。マウスが押されている間に何が起こっているのかはおそらく気にしていますが動いています。その場合、ポーリング関数の代わりにDO_WORKを<B1-Motion>イベントにバインドするだけです。

マウスの移動/モーションイベントを使用して、修飾子のフラグを確認してください。マウスボタンが表示されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top