如何解决Tkinter-在某些条件下启用/禁用条目小部件
在Tkinter应用程序中,我有三个特殊的输入小部件序列号x,y ,需要对其进行如下修改:
-
序列号(sn)条目中最多只能输入4位数字
-
如果sn为空,则禁用条目y,其值等于条目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()
解决方法
对于第2项和第3项,首先为x和y条目都创建一个StringVar
:
var_x = StringVar()
entry_x = Entry(root,textvariable=var_x)
entry_y = Entry(root,textvariable=var_x,state='disabled') # initial disabled
然后,您可以在validate函数内添加一些逻辑:
def only_numeric_input(P):
if len(P) > 0:
# enable entry_y and unlink its content from entry_x
entry_y.config(textvariable='',state='normal')
else:
# disable entry_y and link its content with entry_x
entry_y.config(textvariable=var_x,state='disabled')
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。