6

マウスの左ボタンが押されている限り、コマンドを実行する必要があります。

4

3 に答える 3

9

介在するイベントなしで (つまり、ユーザーがマウスを動かしたり、他のボタンを押したりせずに) 「何かが起こる」ようにしたい場合、唯一の選択肢はポーリングです。ボタンが押されたときにフラグを設定し、離されたときに設定を解除します。ポーリング中にフラグを確認し、設定されている場合はコードを実行します。

ポイントを説明するものを次に示します。

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

ただし、通常、GUI アプリではポーリングは必要ありません。おそらく、マウスが押されて移動している間に何が起こるかだけを気にするでしょう。その場合、poll 関数の代わりに、単純に do_work を<B1-Motion>イベントにバインドします。

于 2010-07-20T11:09:46.493 に答える
5

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

プレスアンドムーブイベントについて話しているのでない場合は、でアクティビティを開始し<Button-1>、を受け取ったときにアクティビティを停止できます<B1-Release>

于 2010-07-20T08:06:18.430 に答える
1

マウス移動/モーション イベントを使用し、モディファイア フラグを確認します。そこにマウスボタンが表示されます。

于 2010-07-20T08:02:08.997 に答える