回答編集履歴
2
スレッド版ソースを追加
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
スレッドについて追記
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以外のプロセスを動かしたいときの手段です。
|