11

我正在用 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()

我如何将空格键绑定到方法?

4

3 回答 3

17
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()
于 2013-04-02T00:10:17.653 回答
1

你可以这样做:

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对象的原因,因为它始终是焦点。

于 2013-04-02T00:08:46.737 回答
0

您也可以使用canvas.bind_all("<space>", yourFunction) That 将监听整个应用程序中的事件,而不仅仅是小部件。

于 2016-11-27T14:41:35.353 回答