TTK Enty验证问题



我正在用Py和Tkinter (Ttkinter)编写我的第一个GUI应用程序。我想确保用户只能写数字,","one_answers"!"在条目字段中。到目前为止,我这样做了,但我有几个问题:

  1. 我无法让它接受","one_answers"!">

  2. 使用此方法,我不能使用我编写的清洁函数来清理条目小部件。

#Validation function
def dig_check(input):
if input.isdigit():
print(input)
return True

else:
print(input)
return False
#Clean function
def clean_calc():
r_top_entry.delete(0,END)
r_bot_entry.delete(0,END)
p_thick_entry.delete(0,END)
b_angle_deg_entry.delete(0,END)
b_angle_m_entry.delete(0,END)
b_angle_s_entry.delete(0,END)
b_height_entry.delete(0,END)
De_label.config(text="-")
Dm_label.config(text="-")
Di_label.config(text="-")
de_label.config(text="-")
dm_label.config(text="-")
di_label.config(text="-")
deg_value.config(text="-")
min_value.config(text="-")
sec_value.config(text="-")
#Entry widget example
r_top_entry = ttk.Entry(blank_frame, width=10, validate="key", validatecommand=(root.register(dig_check),"%P"))

有人能帮我解释一下我做错了什么吗?

您需要修改验证器以接受其他字符

def dig_check(usr_input):
# accept digits, '.', ',', or empty values
char = usr_input[-1]  # get the latest character added to the Entry
if char.isdigit() or char in '.,' or char == '':
return True
return False

最好也接受空值,这样用户就可以删除Entry的内容。您需要在事实之后检查这些,但如果您没有在这里捕获它们,您的Entry将始终必须具有一些值,这可能不是您想要的。

注意,这也将允许多个连续的'。'和','字符,并且不会指定允许这些字符的位置。对于更严格的要求,您可能需要查看RegEx。

此外,我已将input更改为usr_input,因为input是保留字(它是一个函数)


如果你想在你的验证中有更多的规定(通常,你应该!),你可以这样做:

import re

def dig_check(usr_input):
pattern = re.compile(r'^d+(?:,?d*)*.?d*$|^$')
if re.search(pattern, user_input):
return True
return False

请记住,这里的RegEx模式不是详尽的,并且可以允许像多个连续逗号这样的事情…我只是在证明一个观点!

相关内容

  • 没有找到相关文章

最新更新