-2

特定の形式、電話番号、およびドル/セントの値を受け取るプログラムを Python で作成しています。どうすれば tkinter に永続的で削除できないデフォルト値を持たせることができますか。例: (XXX)-XXX-XXXX?

基本的に、ウィジェットにエントリを追加できますが、エントリは空の場合のように永続的な値として定義されます (_ _ _)-___-____ のように見えます テキストがある場合は (434)-332-1234 のようになります

4

1 に答える 1

0

私があなたを正しく理解していれば、ユーザーが自分の情報を入力できるが、何らかの形式に制限されているある種のテンプレートが必要です。Entry のvalidatecommand. 基本的に、これは何かが挿入されるたびに関数を呼び出し、変更を受け入れるか拒否するために True または False を返すことができます。この仕組みの詳細については、Bryan Oakley によるこの回答を参照してください。

(...)-...-....あなたの場合、正規表現で確認できるformat があるときはいつでも、関数が True を返すようにしたいと思います。使用できる正規表現は^\(\d{0,3}\)-\d{0,3}-\d{0,4}$.
説明します。^ は、それが文字列の先頭であることを意味し、\(が存在する必要があること(\d{0,3}意味し、0 から 3 つの数字が存在できることを意味します (数字のみが必要であると仮定しました。そうでない場合は、\w任意の文字または数字を受け入れるように変更できます)。次に、これは\)を意味)し、-文字通りは を意味し-、いくつかの数字と-再びa が続き、最後に a$は文字列の最後であることを意味します。

関数でこの正規表現を使用して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 を返すため、パターンに適合する編集のみが許可されます。

于 2015-05-04T09:07:08.347 に答える