2012-03-31 19 views
2

エントリボックスの検証にはhereから行っています。以下のコードは、入力された値が'Q'であれば、プログラムは'test'をエントリ値の先頭に追加するという条件付きの答えです。tkinterにデフォルト値を挿入するエントリの検証が終了しない

この値が挿入されると、すべての検証がウィンドウから外れて表示され、エントリでは大文字の値が許可されます。私のプログラムのいくつかのテストでは、エントリのさらなるイベント(key、focusin/outなど)に対して検証コマンド(この場合はOnValidate)が呼び出されないことが示されています。

import Tkinter as tk 
class MyApp(): 
    def __init__(self): 
     self.root = tk.Tk() 
     vcmd = (self.root.register(self.OnValidate), 
       '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') 
     self.entry = tk.Entry(self.root, validate="key", 
           validatecommand=vcmd) 
     self.entry.pack() 
     self.root.mainloop() 

    def OnValidate(self, d, i, P, s, S, v, V, W): 
     if S == "Q": 
      self.entry.insert(0,"test") 
     # only allow if the string is lowercase 
     return (S.lower() == S) 

app=MyApp() 

私はこれを行う理由は、私は、その値がユーザーによって行われた変更後に空のままにされている場合エントリは、デフォルト値を表示したいです。 (つまり、私の状態は、フォーカスにif not Pになるでしょう)

これを実装する方法や上記で間違っていることが大いにありがたいです。

答えて

2

私は完全に基づいて回答するつもりです:

私はこれを行う理由私は、その値がで行われた変更後に空のままにされている場合エントリはデフォルト 値を表示したいれますa ユーザー。

と、この例では、あなたが望むものにあなたを指していることを願っています:

import Tkinter as tk 

def analyze(event=None): 
    content = entry_contents.get() 
    if content == "": 
     entry_contents.set("default") 

lord = tk.Tk() 

entry_contents = tk.StringVar() 
aEntry = tk.Entry(lord, textvariable=entry_contents) 
aEntry.grid() 

aText = tk.Text(lord, font=("Georgia", "12")) 
aText.grid() 

aEntry.bind("<FocusOut>", analyze) 

lord.mainloop() 

またはcontrol variableはあなたにどんな使用でも文句を言わない場合:

import Tkinter as tk 

def analyze(event=None): 
    content = aEntry.get() 
    if content == "": 
     aEntry.insert(0, "default") 

lord = tk.Tk() 

aEntry = tk.Entry(lord) 
aEntry.grid() 

aText = tk.Text(lord, font=("Arial", "12", "bold")) 
aText.grid() 

aEntry.bind("<FocusOut>", analyze) 

lord.mainloop() 
+0

おかげで、私の希望する行動を得るためにこの方法に従った。 – Jdog

3

validatecommandオプションが用に設計されています検証だけ、他の種類のものを行うためではありません。表示される動作は、文書化された動作です。 official tk documentation on entry validationによると

:あなたはvalidateCommandまたはinvalidCommandのいずれかの中からエントリウィジェットを編集するとき

... VALIDATEオプションもなしに自分自身を設定します。

(注:TkinterのはTKのTCL実装のラッパーより少しである。このような理由から、Tcl/Tkのドキュメントは、Tkinterのの行動に決定的なガイドとして使用することができます。)

+0

関連情報を私に指摘してくれてありがとう。 tkinterが疎に見えるので、おそらくtcl/tkの読み方をもう少し行うべきです。 – Jdog

関連する問題