【问题标题】:Validation for Tkinter Entry Runs Only OnceTkinter 条目的验证仅运行一次
【发布时间】:2018-03-04 20:33:40
【问题描述】:

我正在尝试实现一种只接受输入整数的条目的方式,但我正在努力让代码按预期工作。据我了解:

  • 入口小部件有一个参数validate,用于选择何时进行验证。
  • 参数validatecommand 决定数据的限制方式
  • 当 validate 等于 'key' 时,每次击键时,都会根据 validatecommand 中指定的规则检查条目中的字符串

但是,在尝试此操作后,我遇到了一个问题,即它仅在单击之前验证条目中的字符串。

from tkinter import*
root = Tk()

def equationpage(root):
    vcmd = root.register(validate)
    A_str = IntVar()
    A_str.set(1)
    a = Entry(root,width="2",textvariable=A_str,validate = "key",validatecommand = (vcmd,'%p'))
    a.place(x=0,y=0)
def validate(inp):
    try:
        float(inp)
    except:
        return False
    return True
equationpage(root)
mainloop()

使用上面的代码不会进行验证,它可以让我在条目中输入任何内容。如果我更改上面的代码以使条目没有默认值,我最终将无法在条目中输入任何内容,因为它一直拒绝输入。

我该如何解决这个问题?

【问题讨论】:

  • 问题是什么?

标签: python tkinter tkinter-entry


【解决方案1】:

基于this answer,没有为该选项定义的Tcl变量:'%p'

替换:

'%p'

改为包含 大写 P

'%P'

【讨论】:

  • 哇,谢谢它现在可以工作了。我不敢相信这是一个简单的错误。我只是意识到我没有明确提出问题。在这个问题上花了几个小时后,我的大脑被炸毁了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多