我正在嘗試使用 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()
uj5u.com熱心網友回復:
問題
- validatecommand 引數的格式應該是
(register(f), s1, s2, ...). 您目前是(register(f, s1, s2, ...)). - 您將
validatefunction 的回傳值傳遞給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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/469148.html
