2024-09-30 01:20:04 发布
网友
我正在用python编写一个程序,它将采用特定的格式、电话号码和美元/美分的值。DELETKINTER是如何使表具有永久值的。例如(XXX)-XXX-XXXX?在
基本上,您可以向小部件添加一个条目,但是条目是被定义为永久值的,比如当它是空的时,它看起来像(434)-332-1234
如果我没听错的话,你需要某种模板,用户可以在其中键入他/她的信息,但只限于某种格式。您可以使用条目的validatecommand来完成此操作。基本上,每当插入内容时,它都会调用一个函数,并返回True或False来接受或拒绝更改。有关如何工作的详细信息,请参见this answer by Bryan Oakley。在
validatecommand
在您的例子中,您希望函数在具有(...)-...-....格式时返回True,您可以使用正则表达式检查该格式。您可以使用的正则表达式是^\(\d{0,3}\)-\d{0,3}-\d{0,4}$。 我给你解释一下。^表示这应该是字符串的开头,\(表示应该有一个(,\d{0,3}表示可以有0到3个数字(我假设您只需要数字,如果不需要,您可以将其改为\w以接受任何字母或数字)。然后是\),它的意思是),一个-,字面意思是-,一些数字和一个-,最后是一个$,这意味着这应该是字符串的结尾。在
(...)-...-....
^\(\d{0,3}\)-\d{0,3}-\d{0,4}$
^
\(
(
\d{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()
我使用before链接的答案作为模板,删除了您在特定情况下不需要的所有内容,并插入了正则表达式。因为它只在字符串与模式匹配时返回True,所以只允许对符合模式的编辑。在
如果我没听错的话,你需要某种模板,用户可以在其中键入他/她的信息,但只限于某种格式。您可以使用条目的
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
函数中使用此正则表达式来检查条目是否具有正确的格式,方法是使用:我使用before链接的答案作为模板,删除了您在特定情况下不需要的所有内容,并插入了正则表达式。因为它只在字符串与模式匹配时返回True,所以只允许对符合模式的编辑。在
相关问题 更多 >
编程相关推荐