문제

나는 단지 나의 주요 프로그램을 폐쇄하고 재개하는 것과 동등한 것을 원한다. 드롭 다운 메뉴의 "새로운"옵션을 클릭하면 호출하고 싶습니다. root.destroy ()를 호출 한 다음 메인 루프를 다시 시작하는 것과 같은 것입니다.

이 작업을 수행하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

MainLoop에서 모든 GUI 빌딩 논리 및 초기 상태 코드를 꺼내 기능에 넣을 수 있습니다. MainLoop (: buildgui () & initstate ())에서 이러한 기능을 호출 한 다음 사용자가 메뉴 아이콘을 클릭하면 initstate ()을 호출하여 응용 프로그램이 처음 시작될 때와 같이 다시 설정하십시오.

다른 팁

이것을 해결할 수있는 세 가지 방법이 있습니다.

방법 1 : 머리 가짜. 앱을 만들 때 모든 위젯을 루트 창에 넣지 마십시오. 대신 루트 창을 숨기고 응용 프로그램을 나타내는 새 대형을 만듭니다. 다시 시작하면 새로운 대구를 파괴하고 모든 스타트 업 논리를 다시 실행하는 문제 일뿐입니다.

방법 2 : 핵무기와 포장. 개념은 비슷하지만 실행은 약간 다릅니다. 이 모델에서 다시 시작하려면 기본 창의 모든 위젯을 삭제하고 지오메트리를 NULL로 재설정 한 다음 (창이 내용을 기준으로 다시 한 번 크기를 조정 한 다음 다른 모든 위젯을 그리는 논리를 실행합니다. .

방법 3 : 처음으로 일했다면 ... Martin v. Löwis가 제안한 것처럼 프로그램에 프로그램의 새로운 인스턴스를 실행 한 다음 종료하십시오.

처음 두 가지 방법은 잠재적으로 더 빠르며 현재 환경을 보존 할 수있는 (dis?)의 장점이 있습니다. 예를 들어 클립 보드, 열 폭 등의 사본을 저장할 수 있습니다. 세 번째 방법은 빈 슬레이트를 절대적으로 보장합니다.

UNIX에있는 경우 OS.Execv로 전체 응용 프로그램을 다시 시작하십시오. 모든 명령 줄 인수 등을 통과하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top