2016-04-05 8 views
0

私はいくつかのPython PyQTコードを持っています。ここでユーザーはボタンをクリックし、プロセスが起動してウェブサイトからデータをダウンロードします。これが起こっている間、私は何かが起こっていることを知るために "待ってください"と言うメッセージをリストウィンドウに表示したい。タイミングがオフになり、処理はプロセスを開始するためにクリックしてください、私はボタンのクラスの関数の開始時にメッセージ状態のコードを追加したにも関わらず、終了後にメッセージが表示されますただし関数が実行される前にPyQTリストビューウィンドウのメッセージのタイミングが発生しますか?

。 これは私が持っているコードの簡単なバージョンです:

self.statusfeed.addItem("Please Wait....Updating database from the web") 
update_db() 
self.statusfeed.addItem("Database updated") 

関数update_db()ダウンロードを実行します。ステータスはダウンロードが行われた後まで更新されていませんお待ちくださいしかし

for filename, weblink in web_links: 
    netfile = urllib2.urlopen(weblink) 
    out_fp = open(os.path.join(root, filename), 'w') 
    out_fp.write(netfile.read()) 
    out_fp.close 

これはからファイルを取得するためのウェブリンクのdictonary以外の更新機能の主要部分です。上記のように、ステータスを強制的に待機して更新するにはどうすればよいですか?

+0

'update_db()'関数にいくつかの詳細(コード)を提供する必要があると思います。あなたが言ったように実際にはバックグラウンドで実行されているようには見えませんが、それはおそらく設計によるものでしょうか? 'update_dbは()'関数は、スレッドまたはプロセスを起動し、それが完了するまで戻りませんか? [This(http://stackoverflow.com/a/29917237/1994235)答えは、メッセージが予期しない時間に表示される理由を説明します。 –

+0

ok update_db()関数はurllib2を使用して7つのWeburlで7つのファイルを開き、ファイルはローカルディレクトリに書き込まれます。 –

+0

私はスレッドなどの完全なnoobだから、そこに私と一緒にゆっくり行く必要があります。 –

答えて

1

update_db()の前にQtGui.qApp.processEvents()を追加してください。これにより、保留中のイベントに応じてUIが更新されます。

+0

はブリリアント今日はこれについて私の夫におしゃべりをして、彼は関数の前に実行できるGUI更新処理のいくつかの並べ替えがなければならないと思いました。私はPyQtはに非常に新しいですし、唯一それがそうおかげで何ができるかの表面を傷! –

関連する問題