3

wxPython GUI を使用して Python プログラムを作成しようとしています。プログラムはバックグラウンドで何らかの情報を収集する必要がありますが (無限ループ)、この時点で GUI がアクティブになっている必要があります。同様に、いくつかのボタンをクリックすると、いくつかの変数または別の情報が変更される必要があり、新しいサイクルでは、古い変数の代わりにこの変数が使用される必要があります。

でも、作り方がわからない。スレッドを使用する必要があると思いますが、使用方法がわかりません。

誰でもこの問題を解決する方法を提案できますか?

前もって感謝します!

4

3 に答える 3

2

これを実現するには、間違いなくスレッドを使用する必要があります。次に、非GUIスレッドからデータを取得するときに、wxPythonのスレッドセーフメソッドの1つを使用して、更新が必要であることを通知できます。ここに小さなチュートリアルがあります:http ://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/

または長年のお気に入り:http ://wiki.wxpython.org/LongRunningTasks

これを行う別の方法は、Pythonのソケットモジュールを使用してソケットサーバーを作成し、その方法でwxと通信することです。

于 2011-08-16T17:57:00.377 に答える
0

これを「スレッド化」と呼びます。pythons スレッド モジュールを使用します。

2 つの例:

例 1 :

from threading import Thread

class MyCollector(Thread):

    def __init__(self, collect_from):
        Thread.__init__(self) # must be called !
        self.collect_from = collect_from

    def run(self):
        while True:
            # .. collect ur things


collector_thread = MyCollector(my_source_to_collect_from)
collector_thread.start()

# go on with gui

例 2 :

from threading import Thread

def collector(collect_from):
    while True:
        # .. collect ur things

collector_thread = Thread(target = collector, args = (my_source_to_collect_from,))
collector_thread.start()

# go on with gui
于 2011-08-16T17:53:23.000 に答える
0

wxPython に自分のイベント ハンドラーを定期的に呼び出してもらい、その中でバックグラウンド処理を実行させることを考えたことはありますか? もちろん、これは、作業を個別の部分に分割できるかどうかにかかっています。レスポンシブな GUI 処理を可能にするために、バックグラウンド処理はノンブロッキングである必要があることに注意してください。これにより、制御がタイムリーに wxPython に返されます。wxPython でこのようなバックグラウンド処理を実装するための慣用的な方法はわかりませんが、(Py)Qt での手法を正しく思い出せば、タイマーを使用することでした。

于 2011-08-16T18:17:50.553 に答える