質問
メインプログラムを閉じて再度開くのと同等のことが必要です。ドロップダウンメニューから「新規」のようなオプションがクリックされたときにそれを呼び出したいと考えています。root.destroy() を呼び出してからメインループを再開始するようなものです。
どうすればこれを実現できますか?
解決
あなたはメインループの外にすべてのあなたのGUI構築の論理と初期状態コードを取り、関数にそれを置くことができます。 (のようなもの:buildgui()&initstate())メインループからこれらの関数を呼び出して、ユーザーが自分のメニューアイコンをクリックすると、アプリケーションが最初に起動したときにそれがあったように、その後、それをバックに設定する)(initstateを呼び出す
他のヒント
これを解決するには少なくとも 3 つの方法があります。
方法 1: 頭の偽物. 。アプリを作成するときは、すべてのウィジェットをルート ウィンドウに配置しないでください。代わりに、ルート ウィンドウを非表示にして、アプリケーションを表す新しいトップレベルを作成します。再起動するときは、その新しいトップレベルを破棄し、すべての起動ロジックを再実行するだけです。
方法 2: 核を打って舗装する. 。コンセプトは似ていますが、実行方法が少し異なります。このモデルでは、再起動する場合は、メイン ウィンドウ内のすべてのウィジェットを削除し、ジオメトリを null にリセットし (ウィンドウの内容に基づいてウィンドウのサイズが再度変更されます)、その後、他のすべてのウィジェットを描画するロジックを実行します。 。
方法 3: 初めてうまくいったなら... マーティン v.ルイスさん、プログラムにプログラムの新しいインスタンスを実行させて終了してください。
最初の 2 つの方法は、より高速である可能性があり、現在の環境を維持するという (不利な?) 利点があります。たとえば、クリップボードや列幅などのコピーを保存できます。3 番目の方法では、完全に白紙の状態が保証されます。
、os.execvでアプリケーション全体を再起動します。あなたはすべてのコマンドライン引数などを渡すことを確認します。