今天下午我很无聊,决定在Python中实现一个速度打字测试;为了在每个字符后检查当前单词,我在入口窗口小部件上使用了widgetName.bind("<Key>", functionName)
,以便每当在入口窗口小部件中按下任何按键时调用该函数。如何在使用.bind调用函数时强制刷新Tkinter小部件
这工作正常,每次按键时都会调用该函数,但是当我使用widgetName.get()
从条目窗口小部件收集字符串时发生了问题; .get()
没有收集小部件的内容,只有那些在调用函数之前的小部件的内容。例如,如果我在输入窗口小部件中键入'P',我的功能将打印'按下一个键',但是它只会向控制台打印一个空行。当我继续按'y'时,字符串'P'被输出到控制台,当第三个按键'Py'被输出时等等。
这让我相信Tkinter小部件的内容还没有更新,因为.bind()
调用是在小部件内容更新之前发生的,因此小部件的内容只有一个按键。
我需要知道是否有解决方法,我做了一些研究,发现我可以从函数内调用root.update()
或widget.update()
,这应该强制刷新UI。然而,这并没有帮助,我仍然面临同样的问题。
我的代码如下
root = Tk()
def keyPress(forSomeReasonThisArgumentFixesABug): ##Argument is because bind passes the event to the function
entryBox.update()
entry, word = entryBox.get(), wordBox.get()
print(entry)
wordBox = Entry(root)
wordBox.grid(row=0, column=0)
entryBox = Entry(root)
entryBox.grid(row=1, column=0)
entryBox.bind("<Key>", keyPress)
可能有人请解释一下我怎么能(通过获得()通过一个参数或函数中)在每个按键通过widget的内容的功能。
在此先感谢 编辑:我也曾尝试使用.bind()
调用的函数调用另一个函数,它看起来恶心,仍然无法正常工作
注:您的解决方案将不能很好地工作,如果触发结合,关键是删除键,或者如果用户将光标移动到了字符串末尾的任何位置。 –
是的,我已经意识到并解决了退格问题。光标的移动不应该成为问题,因为用户需要很快地输入单个单词。 –