这个简单的应用程序几乎做了我想要的事情:
import Tkinter as Tk
def hello(x):
print "Hello"
root = Tk.Tk()
root.bind("<Up>", hello)
root.mainloop()
我将向上箭头捣碎,一遍又一遍地打印“你好”。但是,在重复开始之前有一段延迟,重复率比我想要的慢。 如何将此重复延迟设置为零?如何控制重复间隔?
我知道其他Tkinter小部件有'repeatdelay'和'repeatinterval'的配置选项,但我似乎无法找到一个用于Tkinter根窗口。
(我正朝着你的方向,Bryan Oakley)
答案 0 :(得分:6)
这不是Tk中可配置的东西--Tk无法控制键盘驱动程序发送重复键事件的速度。
你可以做的是按下按钮和按钮释放以设置然后取消设置标志。然后,您可以编写一个函数来执行您想要的任何操作,然后检查该标志并在您想要的任何延迟后再次调用自己。
该功能看起来像这样:
def hello(x):
global SHOULD_REPEAT
print "hello"
if SHOULD_REPEAT:
root.after(10, hello) # wait 10ms then repeat
要做到这一点需要更多的逻辑,但这是一般的想法。
答案 1 :(得分:1)
以下是基于Bryan's answer in this post的完整示例:
try: # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
except ImportError:
import Tkinter as tk
def step(*event):
label['text'] += 1
if label._repeat_on:
root.after(label._repeat_freq, step)
def stop(*event):
if label._repeat_on:
label._repeat_on = False
root.after(label._repeat_freq + 1, stop)
else:
label._repeat_on = True
if __name__ == '__main__':
root = tk.Tk()
label = tk.Label(root, text=0)
label._repeat_freq = 10
label._repeat_on = True
root.bind('<KeyPress-s>', step)
root.bind('<KeyRelease-s>', stop)
label.pack()
root.mainloop()