我正在使用 Py 和 Tkinter (Ttkinter) 撰寫我的第一個 GUI 應用程式。我想確保用戶只能寫數字,“,”和“。” 在條目欄位中。到目前為止,我這樣做了,但我有幾個問題:
我無法讓它接受“,”和“。”;
使用此方法我無法使用我撰寫的清理函式來清理條目小部件。
#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"))
有人可以幫助我并解釋我做錯了什么嗎?
uj5u.com熱心網友回復:
您需要修改驗證器以接受其他字符
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_inputsinceinput是一個保留字(它是一個函式)
如果你想在你的驗證中有更多的規定(通常,你應該!),你可以這樣做:
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 模式并不詳盡,并且可以允許多個連續逗號之類的東西......我只是在證明一個觀點!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537808.html
標籤:Python验证tkintertkinter 条目数据输入
上一篇:如何檢查是否有過期產品
