【问题标题】:Validation function prints previous input and not the current one验证功能打印以前的输入而不是当前输入
【发布时间】:2013-04-09 18:45:17
【问题描述】:

这是我的代码:

root = Tk()

def mytest():
    var = entry.get()
    print(var)
    return True

entry = Entry(root, validate="key", validatecommand=mytest)
entry.pack()

root.mainloop()

我试图验证用户输入的每个字母。

问题是当我使用get() 方法获取当前字母时,我得到的字母最多为上一个输入。

例如,假设我正在输入单词"abc"

  • 当我第一次输入"a" 时,它什么也不会打印。
  • 当我添加"b"时,它将打印"a"
  • 当我继续输入"c"时,它会打印"ab"

为什么会有这种奇怪的行为?

【问题讨论】:

    标签: python python-3.x validation tkinter tkinter-entry


    【解决方案1】:

    它并没有得到所有东西,因为这正是 validatecommand 的工作方式——它在插入文本之前调用一个函数,如果字符无效,您可以有机会否决插入.

    您可以让 Tkinter 传入更改前的值、接受更改时的值、插入的文本以及其他一些帮助您进行验证的东西。例如,请参阅此答案:https://stackoverflow.com/a/4140988/7432

    【讨论】:

    • 我使用 vcmd = (root.register(OnValidate),'%P') 就像您在示例帖子中使用的方式一样,并且非常适合我。谢谢。
    猜你喜欢
    • 2011-03-10
    • 2019-07-23
    • 2023-03-28
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多