只要左键一直按下,我需要执行一个命令。
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应用程序中通常不需要轮询。您可能只关心鼠标按下并且移动时发生的情况。在这种情况下,不要使用轮询函数,而是将do_work绑定到<B1-Motion>
事件。
<B1-Motion>
、<B2-Motion>
等。<Button-1>
上开始执行您的操作,并在收到<B1-Release>
时停止执行。
mouse_is_down
的变量,并根据你是否收到按下或释放事件将其设置为True
或False
。在你的代码中,在循环期间,你可以检查变量是否为True
,这意味着鼠标已经按下,然后执行按钮按住的操作。当变量为False
时,你可以跳过与鼠标按钮按住有关的代码。 - Jesse Dhillon