0

我对 Tkinter 的canvas.coords()方法有疑问。我试图每 1/60 秒更新一次画布,并尝试检测何时按下右箭头键。问题是当我按住右箭头一段时间时出现错误:

http://postimage.org/image/bdfk3m8gx/

我的脚本是“novo.py”,代码如下。有什么帮助吗?我只是一个初学者。

import Tkinter, threading, time

def real_time(td, canvas):
    while True:
        time.sleep(1/60.0)
        canvas.coords('line',1,1,200,200)

def func(event):
    print 'key pressed'


root = Tkinter.Tk()
canvas = Tkinter.Canvas(root)
canvas.pack()
canvas.create_line(1,1,100,100, tag='line')
root.bind('<Right>', func)
thread = threading.Thread(target = real_time, args = (1/60.0, canvas))
thread.start()
root.mainloop()
4

1 回答 1

0

Tkinter 不是线程安全的,而且很多时候根本不需要线程。

在您的情况下,您可以使用after每隔 N 毫秒定期运行一次。例如,要每秒运行大约 60 次,您可以执行以下操作:

def real_time():
    <do something here>
    self.after(16, real_time)

然后,在程序启动时调用此函数一次:

real_time()
于 2012-12-23T14:53:08.903 回答