2016-10-25 6 views
-1

からすべてのラベルをクリアだから私はTkinterのに新たなんだけど、私は、私は、ある時点まで、働いて欲しいもの持っています。 私はそれを正しく設定したかどうかはわかりませんが、右側にボタンがある世界地図があり、左側にイベントログがあります。これは何かが起こったときにラベルでいっぱいになります。 問題は、しばらくするとログ全体がいっぱいになるということです。 すべてのラベルを削除するか、毎回最も古いラベル(最上位)を削除するのに最適な方法は何ですか?はTkinterのウィンドウ

ここで定義され

enter image description here

: は、ここで私が何を意味するかだ

root=Tk() 
Map=PhotoImage(file="C:/Users/Willam/Desktop/CWProgram/map2.gif") 
background=Label(root,image=Map).place(x=100,y=0,relwidth=1,relheight=1) 
Title=Label(root,text='      LOG').pack(anchor=NW) 

そして、私はこのような私のラベル作成:私はいつもinfo.destoy()info.forget()を試してみましたが、これらの

info=Label(root,text='Select a sector to move units from',wraplength=170) 
info.pack(anchor=NW) 

をその関数で使用されている最後のラベルでのみ動作します。 すべてのラベルをグループ化する必要がありますか?

+1

非常に一般的な間違い 'VAR =ウィジェット()。パック()' 'あなたがパック()'、 'ないウィジェット()' 'で返さvar'値にASSING。 'var = Widget()'と 'var.pack()'の2つのステップが必要です。 'place()'と同じです(将来使用する場合は 'grid()')。 – furas

+2

あなたのラベルをリストに追加することをお勧めします。それは最も古いものを殺す(またはリサイクルする)ことを容易にする。 –

+0

可能な重複[:はAttributeError:TkinterのNoneTypeオブジェクトには属性がありません取得](http://stackoverflow.com/questions/1101750/tkinter-attributeerror-nonetype-object-has-no-attribute-get) – Lafexlos

答えて

1

PM 2Ringは、将来の参照のためのリストにラベルを追加するには、通常は便利です示唆したように:「あなたがリストを必要としない場合

foreach label in labels: label.destroy() 

を、そしてあなた:ちょうどその

tmp = Label(...) 
labels.append(tmp) 

必ず再あなたはルートにすべてをクリアしたい:

foreach label in root.children.values(): label.destroy() 

子供たちは常にその中に含まれるオブジェクトを保持しています。マップラベルを保持したい場合は、infoを追加することなく、私が示したように独自のリストを作成する必要があります。

+0

おかげで、そのすべて実際には各項目を削除すると消え去ります。 –

+0

AttributeError: 'NoneType'オブジェクトには 'destroy'属性がありません。これはラベルを正しく定義していないことを意味しますか? –

+0

@ W.Hunt furasのコメントとコメントのリンクされた質問はそのエラーを説明しています。 – Lafexlos

0

私が使用することをお勧めします:

それぞれについて、
info.pack_forget() 

はあなたが形式でそれを行う必要があります作成パック:あなたはパックの多くを持っている場合は非現実的であるが、それ以外の場合

packname.pack_forget() 

非常にうまくいきます。

これはまた、選択的に、いくつかのラベルを削除し、それはあなたが置かすべてのパックをパージしませんよう他の人を残して、それは非常に簡単になります。

関連する問題