在Python中计算一系列关键事件之间的时间

2024-10-04 11:31:01 发布

您现在位置:Python中文网/ 问答频道 /正文

作为我的自学项目的一部分,我决定用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)

Gist

在绑定键并将其传递给pressed方法之后,我不确定如何取消绑定该特定键并绑定元组中的下一个值。在

预期结果

如果我输入单词‘抹杀’,程序应该告诉我从keyevent“O”到keyevent“n”所花的时间。在

Tkinter中事件<Key>的预期结果是什么?在


Tags: thelentimetkintertypeleftsidepack
1条回答
网友
1楼 · 发布于 2024-10-04 11:31:01

这很有趣!在

我把pep8记在心里重写了你的代码。在

为了可读性,对变量名进行了调整。在

在你如何定义开始时间时有一些逻辑错误。在

考虑到每次按一个键时,pressed()就会被调用。还有一个隐藏的问题是如何检测到按键的。你的代码有:

word_repeat_box.bind("<Key>", pressed)

"<KEY>"捕捉到按键,您需要释放按键。 否则,将在释放键之前调用函数,并在repeat框中输入值。我改为使用^{}。(请随意运行我的调试代码以比较"<KEY>""<KeyRelease>"

^{pr2}$

带调试的输出:

Pressed: t
First word: test size 4
repeat word: t size 1
time started! 1434046015.13
Pressed: e
First word: test size 4
repeat word: te size 2
Pressed: s
First word: test size 4
repeat word: tes size 3
Pressed: t
First word: test size 4
repeat word: test size 4
words are same size
Total time taken 1.69620299339

这可能不需要全局变量,也可能是递归调用,但我将留给您解决。在

相关问题 更多 >