我试着做一个限制为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次。然而,它也防止字符被移除,而且我不知道如何.不是让它那样做的。
有人知道我怎么解决这个问题吗?
编辑:具体来说,我需要能够找出最后一个按下的按钮是否是后置空间。
发布于 2016-12-06 17:32:06
您可以让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
https://stackoverflow.com/questions/41000469
复制相似问题