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

回答編集履歴

2

スレッド版ソースを追加

2018/11/01 23:36

投稿

frodo821
frodo821

スコア322

answer CHANGED
@@ -17,4 +17,23 @@
17
17
  このように、os.kill()をlambda式のなかで実行するようにしましょう。
18
18
  オリジナルのコードではos.killがボタンを作成する段階で評価されてしまいます。
19
19
  もっと単純にするなら、スレッドを使ってやる方法もありますよ。スレッドのほうがサブプロセスよりは軽量なのでおすすめですね。
20
- サブプロセスは膨大な計算を並列化するときなど、PythonのGILが邪魔なとき、Python以外のプロセスを動かしたいときの手段です。
20
+ サブプロセスは膨大な計算を並列化するときなど、PythonのGILが邪魔なとき、Python以外のプロセスを動かしたいときの手段です。
21
+
22
+ ```python
23
+ import tkinter
24
+ from threading import Thread
25
+
26
+ def submain():
27
+ """本来のメインプロセス動作"""
28
+
29
+ root = tkinter.Tk()
30
+ label = tkinter.Label(root, text='press button')
31
+ label.pack()
32
+ button1 = tkinter.Button(root, text='Exit', command=root.destroy)
33
+
34
+ th = Thread(target=submain)
35
+ th.start()
36
+
37
+ button1.pack()
38
+ root.mainloop()
39
+ ```

1

スレッドについて追記

2018/11/01 23:36

投稿

frodo821
frodo821

スコア322

answer CHANGED
@@ -15,4 +15,6 @@
15
15
  ```
16
16
  コメントのコードを改修しました。
17
17
  このように、os.kill()をlambda式のなかで実行するようにしましょう。
18
- オリジナルのコードではos.killがボタンを作成する段階で評価されてしまいます。
18
+ オリジナルのコードではos.killがボタンを作成する段階で評価されてしまいます。
19
+ もっと単純にするなら、スレッドを使ってやる方法もありますよ。スレッドのほうがサブプロセスよりは軽量なのでおすすめですね。
20
+ サブプロセスは膨大な計算を並列化するときなど、PythonのGILが邪魔なとき、Python以外のプロセスを動かしたいときの手段です。