如何将空格键键绑定到tkinter(python)中的某个方法
Posted
技术标签:
【中文标题】如何将空格键键绑定到tkinter(python)中的某个方法【英文标题】:How to bind spacebar key to a certain method in tkinter (python) 【发布时间】:2013-03-23 03:19:12 【问题描述】:我正在用 python 做一个项目,我做了一个方法来在 tkinter 中绘制一个特定的东西。我想要它,这样每当我按下空格键时,图像就会自行重绘(再次运行该方法,因为我对该方法进行了编码,以便它可以重绘自身)。如果我按下空格键,我将如何将空格键绑定到方法以便程序运行、绘制和重新绘制?
例如,我希望这样每当我按下空格键时,程序就会在画布上的随机位置绘制:
from Tkinter import *
from random import *
root=Tk()
canvas=Canvas(root,width=400,height=300,bg='white')
def draw():
canvas.delete(ALL)# clear canvas first
canvas.create_oval(randint(0,399),randint(0,299),15,15,fill='red')
draw()
canvas.pack()
root.mainloop()
如何将空格键绑定到方法?
【问题讨论】:
【参考方案1】:您也可以使用canvas.bind_all("<space>", yourFunction)
这将监听整个应用程序中的事件,而不仅仅是小部件。
【讨论】:
【参考方案2】:from Tkinter import *
from random import *
root=Tk()
canvas=Canvas(root,width=400,height=300,bg='white')
def draw(event=None):
canvas.delete(ALL)# clear canvas first
canvas.create_oval(randint(0,399),randint(0,299),15,15,fill='red')
draw()
canvas.pack()
root.bind("<space>", draw)
root.mainloop()
【讨论】:
非常感谢!我查看了其他问题,但找不到与我需要的类似的东西。我想添加 event=None 很重要。 很高兴为您提供帮助。是的,回调函数是由 Tkinter 使用参数调用的,所以它需要传递一些东西。通过将其设置为 None,您可以在第 9 行调用它而不传递任何东西。【参考方案3】:你可以这样做:
from Tkinter import *
from random import *
root=Tk()
canvas=Canvas(root,width=400,height=300,bg='white')
def draw(event):
if event.char == ' ':
canvas.delete(ALL)# clear canvas first
canvas.create_oval(randint(0,399),randint(0,299),15,15,fill='red')
root.bind('<Key>', draw)
canvas.pack()
root.mainloop()
基本上,您将绘图函数绑定到某个***元素到<Key>
绑定,只要按下键盘上的键就会触发该绑定。然后,传入的事件对象有一个char
成员,其中包含一个字符串,表示在键盘上按下的键。
只有当它绑定的对象有焦点时才会触发该事件,这就是我将draw
方法绑定到root
对象的原因,因为它始终是焦点。
【讨论】:
你为什么选择绑定<key>
而不是<space>
?看起来你正在为自己做更多的工作
@BryanOakley 是的,直到我看到另一个答案之后,我才意识到 <space>
的存在。如果它有用,我会留下我的答案,但我赞成另一个答案。以上是关于如何将空格键键绑定到tkinter(python)中的某个方法的主要内容,如果未能解决你的问题,请参考以下文章
如何将动作绑定到 python 中的 tkinter 树视图的标题?