Si vous souhaitez afficher une boîte de dialogue non modale avec PySide, utilisez la méthode show, Si un traitement est en cours chez l'appelant La boîte de dialogue sera dans un état d'attente jusqu'à ce que le processus soit terminé.
Pour éviter cela, régulièrement dans une boîte de dialogue non modale Vous devez appeler QtGui.QApplication.processEvents (). (QProgressbarDialog etc. appelle également processEvents dans la méthode setValue La boîte de dialogue est mise à jour régulièrement)
Ci-dessous, une boîte de dialogue non modale qui dit "Veuillez patienter ..." lors d'un traitement fastidieux Est un exemple d'affichage.
py::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"""Démarrage du processus chronophage"""
import time
time.sleep(10)
u"""Fin du traitement chronophage"""
widget.close()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Recommended Posts