Python:如何获取更新的条目文本以在绑定到它的命令中使用?

时间:2010-11-26 17:53:22

标签: python tkinter tkinter-entry

请考虑以下代码:

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

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

>>> 
>>> A
>>> AB

请注意,按A键时会打印一个空字符串。当我按B时,它会打印A,而不是AB。如果我在C之后没有按任何东西,它将永远不会显示。看来条目内容只在绑定命令返回后才更新,所以我不能在该函数中使用实际的Entry值。

有没有办法在绑定命令中使用更新的Entry值?

2 个答案:

答案 0 :(得分:3)

您可以使用<Key>事件替换<KeyRelease>事件。这应该有用。

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

答案 1 :(得分:2)

其原因与Tk“bindtags”有关。绑定与标记相关联,绑定按标记顺序处理。小部件名称和小部件类都是标记,它们按此顺序处理(特定于小部件的绑定,第二级的类绑定)。

出于这个原因,只要您按下某个键,您的小部件特定绑定就会在类绑定有机会修改小部件之前触发。

有许多变通方法。最简单的是绑定到<KeyRelease>,因为类绑定发生在按键上。还有其他解决方案涉及添加或重新排列绑定标记,或使用条目小部件的内置数据验证功能。哪个最好取决于你真正想要完成的事情。

有关数据验证功能的详细信息,请参阅此问题:Interactively validating Entry widget content in tkinter

有关更全面的答案,请参阅Tkinter: set StringVar after <Key> event, including the key pressed