2011-01-03 9 views
5

私は本製本アプリケーションで(まだ)作業していて、それを審美的に喜ばせるために、ドラッグするすべてのページにサムネイルを追加しました。それはうまく動作しますが、唯一の問題は、全体の本(すなわち、400画像)、それが完了するまでを完全にフリーズする。あなたがコード内で見ることができるようf = str(file[-1])、ちょうど側の問題として、またPyQT4で300画像を(迅速に)サムネイル表示するにはどうしたらいいですか?

def fileDropped(self, file): 
    f = str(file[-1]) 

    if os.path.splitext(f)[1][1:] != 'tif': 
     reply = QtGui.QMessageBox.question(self, 'Message', 'All files must be TIF images. Would you like me to convert a copy of your file to the TIF format?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) 

     if reply == QtGui.QMessageBox.Yes: 
     if not os.path.exists('./djvu_backup/'): os.mkdir('./djvu_backup/') 



     if f not in self.getChildren(self.ui.pageList): # It's a custom method. It does what it looks like it does. 
      icon = QtGui.QIcon(f) 
      pixmap = icon.pixmap(72, 72) 
      icon = QtGui.QIcon(pixmap) 
      item = QtGui.QListWidgetItem(f, self.ui.pageList) 
      item.setIcon(icon) 
      item.setStatusTip(f) 

     return True 

は、ここに私の簡単なドロップコードです。メソッドが呼び出されるたびに、ドロップされたファイル配列の最後の要素を選択する必要があります。これには理由や回避策がありますか?

ありがとうございました!

+0

スレッディングが必要です - http://stackoverflow.com/questions/1595649/threading-in-a-pyqt-application-use-qt-threads-or-python-threads –

+0

Pythonの質問ありがとうございます。私はそれを閲覧します。 – Blender

答えて

5

サムネイルを高速化しようとすることはできますが、問題が発生する前に削除できる本のサイズが増えるだけです。答えは、表示されているページをサムネイルするか、またはサムネイルをバックグラウンドスレッドに降格させ、それぞれが終了するたびに表示を更新することです。

+0

私は後者がより良い選択肢かもしれないと思います。 Pythonでこれを行う方法はありますか? – Blender

0

これは本当にシンプルですが、QProgressBarを使用していると考えているので、ユーザーはプログラムがまだフリーズしているように見えるときに処理中であることを確認できますか?

+0

少し遅れましたが、ステータスメッセージとそのすてきなものをすべて 'QThread'で実装しました;) – Blender

関連する問題