1

ここで tkinter エントリの検証に関するいくつかの質問を見てきましたが、それぞれがvalidate="key"オプションに固執しているようです。

これはインタラクティブな検証には最適ですが、私が欲しいのは"focusout"検証です。

より具体的には、メールフィールドを検証しようとしています。これまでに試したコードは次のとおりですが、機能しません。

import Tkinter as tk
import re

master = tk.Tk()

def validateEmail(P):
    x = re.match(r"[^@]+@[^@]+\.[^@]+", P)
    return (x != None)

vcmd = (master.register(validateEmail), '%P')
emailentry = tk.Entry(master, validate="focusout", validatecommand=vcmd)
emailentry.pack()

b = tk.Button(master, text="Login")
b.pack()

tk.mainloop()

メールエントリを検証する方法について何かアイデアはありますか?

4

1 に答える 1

2

%S挿入される文字列があれば、それを表します。これは、テキスト挿入の検証にのみ意味があります。ウィジェットがフォーカスを失うと、文字は挿入されないため、このパラメーターは常に空の文字列になります。これは空の文字列であるため、常に検証に失敗します。

%P代わりに、文字列全体を表すものを使用する必要があります。

また、厳密に言えば、検証関数はオブジェクトではなくブール値を返す必要があります。一致の結果を変数に保存してから、次のようなものを返す必要がありますreturn (match is not None)

于 2013-08-26T19:57:15.117 に答える