マルチスレッドなしでPythonで複数のプロセスを実行するには? たとえば、次の問題を考えてみましょう:-
関数を開始する(たとえば、すべての整数を出力する)開始ボタンと、クリックすると関数が停止する停止ボタンがあるGuiを作成する必要があります。
Tkinterでこれを行う方法は?
マルチスレッドなしでPythonで複数のプロセスを実行するには? たとえば、次の問題を考えてみましょう:-
関数を開始する(たとえば、すべての整数を出力する)開始ボタンと、クリックすると関数が停止する停止ボタンがあるGuiを作成する必要があります。
Tkinterでこれを行う方法は?
Button
次に、作業スレッドを開始する関数でウィジェットをバインドする必要があります。例えば:
import time
import threading
import Tkinter as tk
class App():
def __init__(self, root):
self.button = tk.Button(root)
self.button.pack()
self._resetbutton()
def _resetbutton(self):
self.running = False
self.button.config(text="Start", command=self.startthread)
def startthread(self):
self.running = True
newthread = threading.Thread(target=self.printints)
newthread.start()
self.button.config(text="Stop", command=self._resetbutton)
def printints(self):
x = 0
while self.running:
print(x)
x += 1
time.sleep(1) # Simulate harder task
このself.running
アプローチでは、値を変更するだけでスレッドを正常に終了できます。複数のスレッドを使用すると、printints
実行中にGUIがブロックされないようにすることができます。
私はこの前の質問を読みました、そしてなぜあなたがここでマルチスレッドなしの解決策を明示的に求めたのかと思います。Tkinterでは、このソリューションは、他のスレッドがGUIパーツと通信する必要があるシナリオで使用できます。例:一部の画像のレンダリング中にプログレスバーを埋めます。
ただし、コメントで指摘されているように、このアプローチは、数字を印刷するだけでは複雑すぎます。
ここでは、Tkinterに関する多くの情報とその他の例を見つけることができます。
編集:
新しい質問は締め切られましたので、最後のポイントを明確にするためにここでコードを変更します。
multiprocessing モジュールを使用しようとしましたか?あなたが探しているもののようです。