2013-07-16 4 views
1

Tkinter를 사용하는 GUI 창을 초기화 한 후 활성 창에서 Tkinter 진행률 막대 도구를 제거하려고합니다. 내 창에 Tkinter Frame을 사용하고 있습니다. 나는 아래와 같이 진행 막대를 pb로 초기화했다.Tkinter in Python - 활성 창에서 위젯 제거

pb = ttk.Progressbar(root,orient ="horizontal",length = 540, mode ="determinate") 

그런 다음 두 가지 방법으로 진행률 표시 줄을 제거했습니다. 아래 줄은 GUI가 고정 된 후 GUI를 초기화 한 후 사용하려고하면 응답을 멈 춥니 다.

pb.pack_forget() 

아래 줄은 진행률 막대의 중간 부분 만 사라지게하지만 여전히 그 두면을 볼 수 있습니다.

pb.destroy() 

초기화 된 I는 프레임 후에 사라이 위젯을 얻을 수있는 방법이 있습니까?

+0

나는'pack_forget()'을 호출하면 윈도우가 멈추는 것을 믿기가 어렵다. 당신은 일하는 프로그램을 가지고 있고 그 한 줄을 넣으면 그 프로그램이 얼어 버린다는 말입니까? 동일한 프레임에서 팩과 격자를 모두 사용 하시겠습니까? –

+0

맞습니다. 문제는 그리드 구성을 사용하고 있다는 것입니다 (실현하지 않고도). 나는 이것을 제거했고, 이제'pack_forget()'은 응용 프로그램을 멈추게하지 않습니다. 그러나'destroy()'를 사용할 때와 같은 버그가 발생합니다 - 진행 막대의 일부가 사라집니다. 사라지는 섹션은 텍스트 아래에있는 텍스트를 포함하는 레이블과 정확히 같은 너비 인 것 같습니다. –

+0

은 실행중인 이벤트 루프입니까? 이벤트 루프가 실행 중이 지 않은 것처럼 "진행 표시 줄의 일부가 사라집니다"라는 메시지가 표시되어 화면 다시 그리기 요청이 받아 들여지지 않습니다. –

답변

4

귀하의 질문에 대한 구체적인 대답은 위젯을 일시적으로 보이지 않게하고 싶을 때 원하는 것입니다. pack_forget, grid_forget 또는 grid_remove입니다. 그리드 또는 팩을 사용하는 경우와 그리드가 어디에 있었는지를 기억하는지 여부에 따라 어느 것을 선택하면 나중에 같은 지점에 다시 놓을 수 있습니다.

destroy은 문자 그대로 위젯을 파괴하려는 경우에 호출 할 항목입니다.

제대로 사용할 경우 해당 방법으로 인해 프로그램이 정지 할 수 없습니다. 코드를 보지 않으면 문제의 근본 원인을 알 수 없습니다.

관련 문제