2016-05-25 1 views
1

私は、エントリの値に応じてウィジェット(チェックボタン)を追加または削除するプログラムをコーディングしようとする初心者です。たとえば、エントリが1より大きい場合はチェックボックスが追加され、そうでない場合はチェックボックスが削除されます。エントリの値をチェックした後にtkinterウィジェットを削除する(初心者)

私のコードではウィジェットが作成されますが、エントリを変更しても削除されず、わかりません。私を助けてくれますか?

ありがとうございました!ここで

は、私のコードの短いサンプルです:

from Tkinter import * 

root = Tk() 

def update(*args): 
    print EntryVar.get() 

    if EntryVar.get()>'1': 
     cb = Checkbutton(root,text="Show check box") 
     cb.grid(row = 1) 

    elif EntryVar.get()<='1' or EntryVar.get() == '': 
     try: 
      cb.grid_remove() 
     except: 
      pass 

EntryVar = StringVar() 
EntryVar.trace('w',update) 
Entry = Entry(root,textvariable = EntryVar) 
Entry.grid(row = 0) 


root.mainloop() 

は、あなたがより多くの詳細が必要な場合は、私に教えてください:)

+0

したがって、入力ボックスに何かを入力するとチェックボックスが表示されますが、その中のすべてを削除すると、チェックボックスウィジェットは削除されますか? – glls

+0

はい1(<= 1)未満の場合、または空白の入力ボックスがある場合@glls –

+0

1より大きい数字を入力すると、チェックボックスが表示されます.1より小さい数字を入力するか、入力ボックスを空のままにしておくと、そのチェックボックスを削除します。 @glls –

答えて

0

一つの問題は、あなたがそれを宣言したら、そのCBは:,試し下「未解決」でありますエントリの値を取得するときに文字列を辞書的に比較されているので、あなたは別の挫折に直面するだろう、でもそこ

from Tkinter import * 

root = Tk() 

def update(*args): 
    print EntryVar.get() 
    global cb 
    if EntryVar.get()>'1': 
     cb = Checkbutton(root,text="Show check box") 
     cb.grid(row = 1) 

    elif EntryVar.get()<='1' or EntryVar.get() == '': 
     try: 
      cb.grid_remove() 

     except: 
      pass 

EntryVar = StringVar() 
EntryVar.trace('w',update) 
Entry = Entry(root,textvariable = EntryVar) 
Entry.grid(row = 0) 


root.mainloop() 

しかし、および、異なるTY:グローバル、それは一種のあなたが好きな「振る舞い」になりますこの問題は型名と比較されましたhere

例外処理を取り除くと、ユーザーが0または1を入力すると、プログラムが"NameError: name 'cb' is not defined"でクラッシュすることがわかります。チェックボタン存在しない(定義されていません)、削除するものはありません。関数の開始時にチェックボタンを定義すると、grid_remove()またはdelete()を試しても削除されません。また、数字以外の文字列を入力すると、プログラムは目的の動作をしません。このために使用している論理型とvar型を変更することを検討してください。 また、if EntryVar.get() > '2':(これで遊んでもいい)の動作が変わったときには、間違いなく論理的なものがあることに注意してください。

+0

これは部分的に動作します!それでも問題は残っています:エントリが20より大きい場合、それはもはや動作しません。入力ボックスに20を入力した場合、チェックボックスが表示されますが、入力を1または0に変更する(または入力ボックスを空白のままにする)と、チェックボックスは消えません。なぜこれが起こっているのか知っていますか? もう一度お世話になりました。本当に感謝しています! :) –

+0

あなたの助けてくれてありがとう! :) @ glls –

+0

文字列が '20'のときにチェックボックスを削除しないとわかりません。現在チェックしている人がいるかもしれませんが、あなたの例外処理を削除すると、他のエラーが発生して問題が発生する可能性があります。 – glls

関連する問題