2016-10-25 3 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=Label(root,text='Select a sector to move units from',wraplength=170) 
info.pack(anchor=NW) 

내가 평소 info.destoy()info.forget()하지만, 이러한 시도 해당 함수에서 사용 된 마지막 레이블에서만 작동합니다. 모든 레이블 또는 다른 항목을 그룹화해야합니까? '당신에게

foreach label in labels: label.destroy() 

당신이 목록을 원하지 않는 경우, 그리고 : 바로 다음

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

:

+1

'var = Widget(). pack()''widget()'이 아니라'pack()'에 의해 리턴 된'var' 값을 사용하려고합니다. 'var = Widget()'과'var.pack()'두 단계가 필요합니다. 'place()'(미래에 사용한다면'grid()'와 동일). – furas

+2

레이블을 목록에 추가하는 것이 좋습니다. 따라서 가장 오래된 것들을 쉽게 죽일 수 있습니다. –

+0

[Tkinter : AttributeError : NoneType 객체에 중복 속성이 없습니다.] (http://stackoverflow.com/questions/1101750/tkinter-attributeerror-nonetype-object-has-no-attribute-get) – Lafexlos

답변

1

으로 오후 2Ring은 미래의 심판에 대한 목록에 레이블을 추가하는 것이 유용 제안 반드시 재 당신은 루트에 모든을 지우려면 :

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

어린이 사전에는 항상 포함 된 개체가 들어 있습니다. 지도 레이블을 유지하려면 info을 추가하지 않고 내가 나타낸대로 자신의 목록을 만들어야합니다.

+0

감사합니다. 잘 작동, 실제로 각 항목을 삭제 excely,이 오류 : –

+0

AttributeError : 'NoneType'개체에 '파괴'속성이 없습니다. 라벨을 올바르게 정의하지 않았다는 의미입니까? –

+0

@ W.Hunt furas의 의견 및 의견의 링크 된 질문은 오류를 설명합니다. – Lafexlos

0

내가 사용하는 것이 좋습니다 것입니다 : 각각에 대해

info.pack_forget() 

을 당신이 형식으로 작업을 수행해야합니다 만든 팩 :

packname.pack_forget() 
당신이있는 경우 팩의 많은 비현실적이다

하지만, 그렇지 않은 경우를 아주 잘 작동합니다.

이렇게하면 일부 레이블을 선택적으로 제거하고 배치 한 모든 팩을 제거하지 않기 때문에 다른 레이블을 제거하는 것이 매우 쉽습니다.