如何使tkinter条目的默认值为permanen

2024-09-30 01:20:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python编写一个程序,它将采用特定的格式、电话号码和美元/美分的值。DELETKINTER是如何使表具有永久值的。例如(XXX)-XXX-XXXX?在

基本上,您可以向小部件添加一个条目,但是条目是被定义为永久值的,比如当它是空的时,它看起来像(434)-332-1234


Tags: 程序定义部件格式电话号码条目xxxxxxx
1条回答
网友
1楼 · 发布于 2024-09-30 01:20:04

如果我没听错的话,你需要某种模板,用户可以在其中键入他/她的信息,但只限于某种格式。您可以使用条目的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()

我使用before链接的答案作为模板,删除了您在特定情况下不需要的所有内容,并插入了正则表达式。因为它只在字符串与模式匹配时返回True,所以只允许对符合模式的编辑。在

相关问题 更多 >

    热门问题