作为我的自学项目的一部分,我决定用Python创建一个应用程序,它监听某些keyevents
并找出键入单词所需的时间。经过12个多小时的直接调试和循环/逻辑实验,我所能做的就是:
import Tkinter
import time
KeyWatch = Tkinter.Tk()
WordBoxLegend = Tkinter.Label(KeyWatch, text="Type the required word")
WordBoxLegend.pack(side=Tkinter.LEFT)
WordBox = Tkinter.Entry(KeyWatch)
WordBox.pack(side=Tkinter.LEFT)
TextBoxLegend = Tkinter.Label(KeyWatch, text="Type the same to calculate the time")
TextBoxLegend.pack(side=Tkinter.LEFT)
TextBox = Tkinter.Entry(KeyWatch)
TextBox.pack(side=Tkinter.RIGHT)
WordBox.focus()
def pressed(keyevent):
WordRequire = WordBox.get()
LetterList = tuple(WordRequire)
start = time.time()
LastLetter = str(LetterList[-1])
print len(LetterList())
print LetterList[len(LetterList)]
if keyevent.char in LetterList:
for x in range(0, len(LetterList)):
if LetterList[x] != LastLetter:
print LetterList[x]
TextBox.unbind(str(LetterList[x]))
TextBox.bind(str(LetterList[x+1]))
elif str(LetterList[x]) == LastLetter and x == len(LetterList):
stop = time.time()
totaltime = stop - start
print LetterList[x]
print totaltime
break
TextBox.unbind(LetterList[x])
else:
TextBox.unbind(str(LetterList))
else:
print "Type only the letters from" +str(LetterList)
KeyWatch.mainloop()
TextBox.bind("<Key>", pressed)
在绑定键并将其传递给pressed
方法之后,我不确定如何取消绑定该特定键并绑定元组中的下一个值。在
预期结果
如果我输入单词‘抹杀’,程序应该告诉我从keyevent
“O”到keyevent
“n”所花的时间。在
Tkinter中事件<Key>
的预期结果是什么?在
这很有趣!在
我把pep8记在心里重写了你的代码。在
为了可读性,对变量名进行了调整。在
在你如何定义开始时间时有一些逻辑错误。在
考虑到每次按一个键时,
pressed()
就会被调用。还有一个隐藏的问题是如何检测到按键的。你的代码有:} 。(请随意运行我的调试代码以比较
^{pr2}$"<KEY>"
捕捉到按键,您需要释放按键。 否则,将在释放键之前调用函数,并在repeat框中输入值。我改为使用^{"<KEY>"
和"<KeyRelease>"
)带调试的输出:
这可能不需要全局变量,也可能是递归调用,但我将留给您解决。在
相关问题 更多 >
编程相关推荐