2017-03-24 25 views
0

私は問題に直面しています。私はこのコードを実行しています。Python Tkinterの内容が正しく読み込まれない

import tkinter as tk 

root = tk.Tk() 
def check(): 
    if len(e.get().split("a")) > 1: 
     print("contains a") 

e = tk.Entry(frame1) 
e.grid(row=4,column=1,columnspan=2,padx = (10,10), pady=(5,10), sticky="w e") 
e.bind("<Key>",check) 

「a」を入力すると、何も印刷されません。私は2番目の文字をtipingして結果を得るでしょう。私は、コンテンツが実際に変更される前に関数が実行されるために起こると思います。私は関数の先頭にタイマーを追加しようとしましたが、何もしません。 最初の "a"を入力して結果を取得します。私は何をすべきか?

+0

文字が文字列内にあるかどうかを確認するのは奇妙な方法です。 e.get()の '' if ''をどうしたらいいのですか? – Kevin

+0

あなたの全体的な目標は何ですか?より具体的な目標を私たちに与えるなら、私はあなたにもっと良い方法を伝えることができます。 – Novel

+0

このコードは実行されません。私は少なくとも3つの問題を数えます。 –

答えて

1

コンテンツが実際に変更される前に関数が実行されるために起こると思います。

あなたは正しいです。コールバックで入力した文字を見ることができるようにするには、ウィジェットの"<Key>"イベントにバインドするのではなく、StringVarを作成してバインドする必要があります。

import tkinter as tk 

frame1 = tk.Tk() 
def check(*args): 
    if "a" in s.get(): 
     print("contains a") 

s = tk.StringVar() 
e = tk.Entry(frame1, textvariable=s) 
s.trace("w", check) 
e.grid(row=4,column=1,columnspan=2,padx = (10,10), pady=(5,10), sticky="w e") 
frame1.mainloop() 
+0

うまく動作します。私はStringVar()について知らなかった。もう1つの質問ですが、いかにしてタートルモジュールの描画アニメーションを削除できますか? turtle.spped(0)とturtle.speed( "fastest")はうまく動作しません。私はすぐに絵を描きたい。ありがとう – PatoKrivulcik

関連する問題