Python:如何获得更新的输入文本以在命令中使用?
-
28-09-2019 - |
题
考虑以下代码:
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>事件,包括按键
不隶属于 StackOverflow