我正在尝试使用 Tkinter 的 Entry 小部件的内置输入验证,但我无法弄清楚为什么在触发输入验证时会收到 TypeError。(无论什么样的事件触发验证)。在下面的简单代码中,我试图仅验证来自用户的数字输入。字母字符必须禁用应用按钮。但是,一旦您输入任何字符,“TypeError:'str' object is not callable”就会被突袭。任何想法为什么?
from tkinter import *
from tkinter import ttk
root = Tk()
entry_string = StringVar()
entry_field = ttk.Entry(root, textvariable=entry_string, validate='key')
apply_button = ttk.Button(root, text='Apply', state='normal')
entry_field.grid(column = 0 , row = 0)
apply_button.grid(column = 0 , row = 1)
def validate(entry):
if str(entry).isnumeric():
apply_button.config(state = 'normal')
return TRUE
else:
return FALSE
def on_invalid():
apply_button.config(state='disabled')
vcmd = (root.register(validate(entry_string), '%P'))
ivcmd = (root.register(on_invalid()),)
entry_field.config(validatecommand=vcmd, invalidcommand=ivcmd)
root.mainloop()
(register(f), s1, s2, ...)
. 您目前是(register(f, s1, s2, ...))
.validate
function 的返回值传递给register
,而不是您需要传递函数本身。我强烈建议您从文档中阅读此页面
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
entry_string = tk.StringVar()
entry_field = ttk.Entry(root, textvariable=entry_string, validate='key')
apply_button = ttk.Button(root, text='Apply', state='normal')
entry_field.grid(column = 0 , row = 0)
apply_button.grid(column = 0 , row = 1)
def validate(value):
if str(value).isnumeric():
apply_button.config(state = 'normal')
return tk.TRUE
else:
return tk.FALSE
def on_invalid():
apply_button.config(state='disabled')
vcmd = (root.register(validate), '%P')
ivcmd = (root.register(on_invalid),)
entry_field.config(validatecommand=vcmd, invalidcommand=ivcmd)
root.mainloop()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句