Tkinter中的Keyup处理程序?

时间:2014-03-08 01:39:54

标签: python keyboard tkinter

标题说明了一切。在Tkinter中有什么东西可以调用,它可以让我监视特定的密钥版本并让我将它链接到一个函数?我想用它让我结束我用来移动物品的计时器。这是代码:

from Tkinter import *

master = Tk()
master.wm_title("Ball movement")

width = 1000
height = 600
circle = [width / 2, height / 2, width / 2 + 50, height / 2 + 50]

canvas = Canvas(master, width = width, height = height, bg = "White")
canvas.pack()
canvas.create_oval(circle, tag = "ball", fill = "Red")

while True:
    canvas.update()
    def move_left(key):
        #This is where my timer will go for movement
        canvas.move("ball", -10, 0)
        canvas.update()
    def move_right(key):
        #This is where my other timer will go
        canvas.move("ball", 10, 0)
        canvas.update()
    frame = Frame(master, width=100, height=100)
    frame.bind("<Right>", move_right)
    frame.bind("<Left>", move_left)
    frame.focus_set()
    frame.pack()

mainloop()

1 个答案:

答案 0 :(得分:3)

您可以定义以KeyRelease为前缀的事件,例如<KeyRelease-a>。例如:

canvas.bind("<KeyRelease-a>", do_something)

注意:您需要删除while循环。你永远不应该在GUI程序中创建一个无限循环,并且你肯定不希望每次迭代都创建一个框架 - 你最终会在一两秒内结束数千个框架!

你已经有一个无限循环运行,mainloop。如果要进行动画制作,请每隔几毫秒使用after运行一个函数。例如,以下将使球每10秒移动10个像素。当然,你会想要处理它离开屏幕或弹跳或其他什么的情况。关键是,你编写了一个绘制一帧动画的函数,然后定期调用该函数。

def animate():
    canvas.move("ball", 10, 0)
    canvas.after(100, animate)