我希望用戶能夠在Spinbox小部件中輸入整數值。如果輸入的值不是整數或是Spinbox限制外的整數,只要Spinbox失去焦點,Spinbox內容中的值必須恢復爲默認值。tkinter中的小部件驗證
在示例代碼中,我使用Entry小部件僅用於Spinbox可能會失去焦點。
如果用戶回到Spinbox輸入新值,則他的輸入未驗證。 我確認馬爾科姆在Interactively validating Entry widget content in tkinter中的評論,只要此命令更新小部件的值,就會清除validatecommand=command
功能。
有沒有辦法讓重複驗證的Spinbox中輸入的值不只是一次?
from tkinter import *
class GUI:
def __init__(self):
# root window of the whole program
self.root = Tk()
self.root.title('Validate Spinbox')
# registering validate and invalid commands
validate_cmd = (self.root.register(self.validate), '%P')
invalid_cmd = (self.root.register(self.invalid))
# creating a Label
items_lbl = Label(self.root, text="# of items (5-10):")
items_lbl.grid(row=0, column=0)
# creating a Spinbox widget
self.items_var = StringVar()
self.items_var.set(7)
items_count = Spinbox(self.root, textvariable=self.items_var,
from_=5, to=10, width=4, validate='focusout',
validatecommand=validate_cmd,
invalidcommand=invalid_cmd)
items_count.grid(row=0, column=1)
# creating an Entry widget
self.entry_var = StringVar()
self.entry_var.set("Input some text here")
text_entry = Entry(self.root, textvariable=self.entry_var)
text_entry.grid(row=1, column=0)
def validate(self, entry):
try:
value = int(entry)
valid = value in range(5, 11)
except ValueError:
valid = False
if not valid:
self.root.bell()
return valid
def invalid(self):
self.items_var.set(7)
if __name__ == '__main__':
main_window = GUI()
mainloop()
'validatecommand'停留OK,這是'驗證「參數綁定到」重點「事件,得到重置 – PRMoureu
@PRMoureu:謝謝你的迴應!有沒有辦法重置** validate **參數?最優選的是:因爲我是Python新手,如果您可以修改我的代碼,我會非常感激。 – nkana