首页 > 解决方案 > 为什么在与 Tkinter 中的事件绑定时会延迟一步以及如何解决这个问题?

问题描述

考虑以下简单代码:

from tkinter import *

startingWindow = Tk()

entry = Entry(startingWindow)
entry.grid(row=0, column=0)

def writeWhatYouGet():        
    print((entry.get()).strip())

entry.bind('<Key>', lambda event:writeWhatYouGet())
startingWindow.mainloop()

我希望当我输入“1”时,我会立即打印出“1”。但是,当我按下第二个键时,我只得到“1”,在这种情况下是“2”。

如下所示:

在此处输入图像描述

打印输出就像

1
12
123

但是我希望输出如下:

1
12
123
1234

我怎样才能解决这个问题,以便我马上得到我写的东西?

标签: pythonpython-3.xtkinterpython-3.6

解决方案


我不明白为什么您的代码不起作用,但我可以提供一个有效的解决方案。

将条目与 StringVar 关联,然后跟踪对 StringVar 的所有更改:

from tkinter import *

startingWindow = Tk()

text = StringVar()
entry = Entry(startingWindow, textvariable=text)
entry.grid(row=0, column=0)

def writeWhatYouGet(*args):
    print(text.get())

text.trace_add("write", writeWhatYouGet)   # Trace changes to StringVar "text"

startingWindow.mainloop()

参考:变量类(BooleanVar、DoubleVar、IntVar、StringVar)


推荐阅读