考虑以下代码:

text = Entry(); text.pack()
def show(e):
    print text.get()
text.bind('<Key>', show)

假设我将字母ABC放入条目中,一个一个。输出将是:

>>> 
>>> A
>>> AB

请注意,按下A时,它会打印一个空字符串。当我按B时,它会打印A,而不是AB。如果我在C之后不压任何东西,它将永远不会显示。似乎只有在Bonded命令返回后才更新条目内容,因此我无法在该函数中使用实际的输入值。

有什么方法可以在Bonden命令中获得更新的输入值?

有帮助吗?

解决方案

你可以替换 <Key><KeyRelease> 事件。那应该起作用。

这是事件列表: http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html#event-types

其他提示

原因与TK“ bindtags”有关。绑定与标签关联,并且绑定按标签顺序处理。小部件名称和小部件类都是标签,它们按该顺序进行处理(首先是特定于小部件的绑定,第二类绑定)。

因此,每当您按键时,小部件特定的绑定都会在类绑定有机会修改小部件之前发射。

有很多解决方法。最简单的是结合到 <KeyRelease> 由于类绑定发生在钥匙按钮上。还有其他解决方案涉及添加或重新安排绑定标签,或使用入口小部件的内置数据验证功能。最好的是取决于您真正要完成的工作。

有关数据验证功能的更多信息,请参阅此问题: 交互式验证TKINTER中的输入小部件内容

有关更全面的答案,请参阅 tkinter:设置stringvar之后u003CKey>事件,包括按键

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top