1

重複の可能性:
単純なpygtkとスレッドの例をお願いします

Pythonスクリプトにこの「問題」があります。pygtk(1つのテキストフィールド)でウィンドウを作成し、スクリプトでデータベースクエリを実行して、データをtxtファイルに保存する準備をします。すべてがうまく機能しますが、私が直面していることは1つだけです-この関数は約実行されます。2〜4分の間、プログラムウィンドウが「応答」していないため、プログラムウィンドウがフリーズしたように見えます(ただし、スクリプトは実行されており、終了後もウィンドウは「ライブ」になっています)。

この動作をどのように処理できますか?ウィンドウを常に応答させたいです。例:「working...」というテキストフィールドがあります。

4

1 に答える 1

1

アプリケーションでスレッドを使用する必要があります。実行時間の長いプロセスがあるときはいつでも、その作業を別のスレッドに入れ、進行状況の更新をメイン スレッドに送信する必要があります。ここで実際の例を見つける前に、同様の質問に答えました。より短いダミーの種類の例を以下に示します。

import gtk, gobject, urllib, time, threading

def run():
    for i in range(50):
        gobject.idle_add(button.set_label, '%s/50 complete' % i)
        time.sleep(0.1)

def clicked(button):
    threading.Thread(target=run).start()

gtk.gdk.threads_init()
win = gtk.Window()
button = gtk.Button(label="Start")
button.connect('clicked', clicked)
win.add(button)
win.show_all()
gtk.main()
于 2012-11-28T14:04:29.113 に答える