我正在尝试创建一个限制为16个字符的条目。 到目前为止,我有这样的事情:
import tkinter as tk
rt = tk.Tk()
def tr_input():
a = e['textbox']
b = a.get()
print(b)
if "\b" in b:
return True
if "\n" in b:
calculate()
elif len(b)>16:
return False
return True
e = { "textbox":tk.Entry(rt,validate = "all",validatecommand=tr_input) }
calculate()
对条目中的数字执行计算,并将其显示在另一个标签
它工作正常,并防止在第16个之后输入任何其他字符。但是,它还可以防止通过退格键删除字符,我无法弄清楚如何...没有它这样做。
有谁知道我怎么解决这个问题?
编辑:具体来说,我需要能够找出按下的最后一个按钮是否退格
答案 0 :(得分:0)
您可以使用validatecommand
传递信息,这样您就不必检测任何密钥。例如,如果允许编辑,您可以告诉它传入窗口小部件中的值。您可以根据所需长度检查该值,而无需知道用户是在添加或删除字符,还是键入字符或粘贴它们。
首先注册命令以及要传递给命令的参数。例如:
vcmd = (rt.register(tr_input), '%d', '%P', '%s')
然后,您将此vcmd
传递给validatecommand
选项:
e = { "textbox":tk.Entry(rt,validate = "all",validatecommand=vcmd) }
最后,修改您的tr_input
函数以接受这些参数:
def tr_input(d, P, s):
# d = type of action (1=insert, 0=delete, -1 all others)
# P = value of entry if edit is allowed
# s = value of entry prior to allowing the edit
print("tr_input: d='%s' P='%s' s='%s'" % (d,P,s))
if len(P) > 16:
return False
return True
有关详细信息,请参阅此答案:https://stackoverflow.com/a/4140988/7432