teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

補足を追加

2021/09/16 05:56

投稿

Daregada
Daregada

スコア11990

answer CHANGED
@@ -2,4 +2,11 @@
2
2
 
3
3
  `block=False`を指定しない、あるいは`block=True`を指定すると、plt.showのウィンドウを閉じるまでrootウィンドウは操作に反応しなくなります。
4
4
 
5
- もっとも、その間もイベントは貯えられているので、ENDボタンを押し(この時点では何も起きない)→plt.showのウィンドウを閉じる→(このタイミングでENDボタンが押されて)rootウィンドウが閉じる、という動作になります。
5
+ もっとも、その間もイベントは貯えられているので、ENDボタンを押し(この時点では何も起きない)→plt.showのウィンドウを閉じる→(このタイミングでENDボタンが押されて)rootウィンドウが閉じる、という動作になります。
6
+
7
+ ---
8
+ IDLEから実行した場合は、rootウィンドウを閉じても、それまでに開いたplt.showのウィンドウは閉じません。これは、IDLEのウィンドウ("IDLE Shell X.X.X"と書いてあるほう)でPythonのプロセスが実行中のままになっていて、その子プロセスであるplt.showのウィンドウも閉じないのだと思われます。
9
+
10
+ 実際に、IDLEのウィンドウ("IDLE Shell X.X.X"と書いてあるほう)を閉じると、plt.showのウィンドウも一緒に閉じますし、「Run」→「Run... Customized」(`Shift-F5`キー)でコードを実行する際に「Restart Shell」にチェックを付けても、古いplt.showのウィンドウは閉じます。
11
+
12
+ ということで、IDLEでは「ENDボタンを押すとplt.showのウィンドウも閉じる」という動作を実現するのは無理ですね。Visual Studio Codeへの移行を考えられてはどうでしょうか。