PysideのQProgressDialogを、別スレッドで実行させたいです。
表題の通り、QProgressDialogを別スレッドで実行したいのですが、安定せずに困っています。
サードパーティ製の重い処理を実行させつつ、ダイアログが固まらないようにしたいです。
やりたいことは、基本は次のようなスクリプトです。
(サードパーティ製モジュールの入る部分はコメントアウトしてあります)
# -*- coding: utf-8 -*-
import sys
from PySide import QtCore, QtGui
import time
# import third_party_module
def start_third_party_module():
item_num = 3
d=QtGui.QProgressDialog()
d.setRange(0, item_num)
d.show()
for i in range(item_num):
# ここに、重い処理が入る
# third_party_module.do(i)
d.setValue(i)
print i
time.sleep(2)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__()
button = QtGui.QPushButton(self)
button.setText("Click me")
button.clicked.connect(self.pushBtn)
def pushBtn(self):
start_third_party_module()
def main():
qApp = QtGui.QApplication(sys.argv)
win = MainWindow(qApp)
win.show()
sys.exit(qApp.exec_())
main()
上記スクリプトを実行させると、一応ダイアログは表示されますがcancelボタンが押せないなど都合が悪いです。
サードパーティ製のモジュールをQThreadで実行することも試してみたのですが安定せず(頻繁に落ちる)、メインの中でサードパーティ製のモジュールを実行させつつ、プログレスダイアログにも触れるようにしたいと思っております。
どうかお力添えをお願いいたします。
追記:上記スクリプトが、前回は端折りすぎていたので、情報を追記しました。
よろしくお願いいたします。