PySideでモードレスダイアログを表示する場合はshowメソッドを使用しますが、
呼び出し元で何らかの処理が継続中の場合、
その処理が終わるまでダイアログは待ち状態になってしまいます。
それを防ぐためには、モードレスダイアログの中で定期的に
QtGui.QApplication.processEvents()を呼び出す必要があります。
(QProgressbarDialogなどもsetValueメソッドの中でprocessEventsを呼び出し
ダイアログを定期的に更新しています)
以下、時間のかかる処理を行う際に、「Please wait...」と書かれたモードレスダイアログ
を表示させる例です。
:waitdialog.py
import sys
from PySide import QtGui, QtCore
class WaitDialog(QtGui.QDialog):
def __init__(self, parent=None):
super(WaitDialog, self).__init__(parent)
label1 = QtGui.QLabel("Please wait...")
layout = QtGui.QVBoxLayout()
layout.addWidget(label1)
self.setLayout(layout)
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
self.setWindowTitle("Work in progress")
self.resize(200, 100)
self.setModal(True)
self.show()
self.raise_()
QtGui.QApplication.processEvents()
def main():
app = QtGui.QApplication(sys.argv)
widget = WaitDialog()
u""" 時間のかかる処理開始 """
import time
time.sleep(10)
u""" 時間のかかる処理終了 """
widget.close()
sys.exit(app.exec_())
if __name__ == "__main__":
main()