【发布时间】:2020-12-07 11:30:46
【问题描述】:
在我的 Tkinter 应用程序中,我需要修改三个特殊的条目小部件 序列号、x、y,如下所示:
-
序列号 (sn) 条目中最多只能输入 4 位数字
-
条目 y 被禁用,如果 sn 为空,其值等于条目 x。
-
如果sn不为空,用户可以在y中输入随机输入
到目前为止,在 validate 命令选项的帮助下,我只能实现第一点。你们中有人知道如何在 validate 命令的帮助下实现 2) 和 3) 点吗?
from tkinter import *
root = Tk()
label_serial_number = Label(root, text = "Serial Number:")
label_x = Label(root, text = "Enter Value for x:")
label_y = Label(root, text = "Enter value for y:")
entry_serial_number = Entry(root)
entry_x = Entry(root)
entry_y = Entry(root)
# Display widgets
label_serial_number.grid(row = 0, column = 0, sticky = "W")
label_x.grid(row = 1, column = 0)
label_y.grid(row = 2, column = 0)
entry_serial_number.grid(row = 0, column = 1)
entry_x.grid(row = 1, column = 1)
entry_y.grid(row = 2, column = 1)
# 1) Part: - only digits can be entered in the series label - only 4 digits are allowed to enter
def only_numeric_input(P):
if len(P) > 4:
return False
# checks if entry's value is an integer or empty and returns an appropriate boolean
if P.isdigit() or P == "": # if a digit was entered or nothing was entered
return True
return False
callback = root.register(only_numeric_input) # registers a Tcl to Python callback
entry_serial_number.configure(validate="key", validatecommand=(callback, "%P")) # enables validation
mainloop()
【问题讨论】: