使用tkinter减少输入字母不起作用

时间:2018-10-16 23:00:48

标签: python user-interface tkinter

我程序中的数字输入小部件正常工作,最多只能输入3个数字,而我尝试在其他输入小部件中执行相同的操作,但是对于字符,限制不起作用,我没有知道为什么。自从使用字母以来,您是否需要以其他方式使用它?

这是我的代码:

def only_letters_max_86(action, char):
if action == "1":
    # a character is inserted (deletion is 0) allow the insertion 
    # only if the inserted character char is a letter
    return char.isalpha() and len(char) <= 86
else:
    # allow deletion
    return True

def only_numbers_max_3(action, new_text):
if action == "1":
    return new_text.isdigit() and len(new_text) <= 3
else:
    return True


def main():

validate_letter = window.register(only_letters_max_86)
validate_nb = window.register(only_numbers_max_3)

label = Label(window, width = 30, background = 'lightgreen', text='enter temperature, only numbers')
label.grid(row=0, column=0)

entry_tempp = Entry(window, width = 30, validate="key", validatecommand=(validate_nb, '%d', '%P'))
entry_tempp.grid(row = 0, column = 1)

#create another label and entry object for location

label_numb = Label(window, width = 30, background = 'lightgreen', text='enter location, only letters')
label_numb.grid(row=1, column=0)

entry_locations = Entry(window, width = 30, validate="key", validatecommand=(validate_letter, '%d', '%S', '%v'))
entry_locations.grid(row = 1, column = 1)

1 个答案:

答案 0 :(得分:1)

在此行: entry_locations = Entry(window, width = 30, validate="key", validatecommand=(validate_letter, '%d', '%S', '%v'))

您要将'%S'传递给validate_letter函数,该函数会查看文档,这意味着:

  

'%S':如果调用是由于插入或删除,则此参数将是要插入或删除的文本。

因此,我的猜测是char中的only_letters_max_86(action, char)仅获得插入的字符,该字符的长度始终为1,从而导致检查失败。尝试将%S更改为%P,这将为您提供:

  

'%P':如果允许更改,文本将具有的值。

链接到文档:http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/entry-validation.html