我正在寫一個程序在Python中,將採取特定的格式,電話號碼和美元/美分值。我如何使tkinter具有永久性的,不可刪除的默認值。例如(XXX)-XXX-XXXX?如何使tkinter項默認值永久
基本上,您可以添加一個條目到窗口小部件,但該條目被定義爲永久值,就像它的空時它看起來像(__ ____)____ ____當它具有文本時它看起來像(434)-332- 1234
我正在寫一個程序在Python中,將採取特定的格式,電話號碼和美元/美分值。我如何使tkinter具有永久性的,不可刪除的默認值。例如(XXX)-XXX-XXXX?如何使tkinter項默認值永久
基本上,您可以添加一個條目到窗口小部件,但該條目被定義爲永久值,就像它的空時它看起來像(__ ____)____ ____當它具有文本時它看起來像(434)-332- 1234
如果我理解正確,您需要某種模板,用戶可以在其中鍵入他/她的信息,但僅限於某種格式。你可以使用條目validatecommand
來做到這一點。基本上,只要有東西被插入,它就會調用函數,並且可以返回True或False來接受或拒絕更改。有關如何工作的更多信息,請參閱this answer by Bryan Oakley。
對於您的情況,只要格式爲(...)-...-....
,您可以使用正則表達式檢查該函數,以便函數返回True。您可以使用的正則表達式是^\(\d{0,3}\)-\d{0,3}-\d{0,4}$
。
我會爲你解釋。 ^
表示應該是字符串的開頭,\(
意味着應該有一個(
,\d{0,3}
意味着可以有0到3個數字(我假設你只想要數字,如果不是,你可以將它改爲\w
來接受任何字母或號碼)。然後來到\)
這意味着)
,-
其字面意思是-
,一些數字和一個-
再次和在一個$
這意味着應該是字符串的末尾。
您可以使用此正則表達式的validatecommand
功能檢查,如果該項目有通過使用正確的格式:
import Tkinter as tk
import re
class MyApp():
def __init__(self):
self.root = tk.Tk()
vcmd = (self.root.register(self.OnValidate), '%P')
self.entry = tk.Entry(self.root, validate="key",
validatecommand=vcmd)
self.entry.pack()
self.prog = re.compile('^\(\d{0,3}\)-\d{0,3}-\d{0,4}$')
self.entry.insert(0, '()--')
self.root.mainloop()
def OnValidate(self, P):
if self.prog.match(P):
result = True
else:
result = False
return result
app=MyApp()
我用鏈接的答案之前爲模板,去除一切,你不需要爲你的特定情況,並插入正則表達式。因爲它只在字符串匹配模式時才返回True,所以只允許編輯符合模式的編輯。
沒有給出非常好的用戶體驗。作爲用戶,您沒有看到實際的模板,也不知道應該輸入什麼內容。 –
是的,這是真的。這是第一份草案,考慮到這個問題並不清楚確切的行爲應該是什麼,但完全沒有OP的反饋意見阻止了我想要改進它。也許我會在某個時候改進它。我主要將這個問題與其他問題聯繫在一起,因爲我對這個問題幾乎完全一樣,只有兩天的時間感到驚訝。 – fhdrsdg
你將不得不更多地解釋一下你的意思是一個永久的,不可刪除的默認值,而且是一個'Entry'。 – TigerhawkT3
基本上,你可以添加一個條目到窗口小部件,但是條目被定義爲永久值,就像它的空時它看起來像(__ ____)____ ____當它有文本時它看起來像(434)-332-1234 – Amao