PySide --Faites quelque chose en arrière-plan tout en affichant la boîte de dialogue non modale

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

PySide --Faites quelque chose en arrière-plan tout en affichant la boîte de dialogue non modale
Comment spécifier un fichier .ui dans la boîte de dialogue / interface graphique du widget dans PySide
Faites quelque chose comme un interpréteur Python avec Visual Studio Code
Faites quelque chose orienté objet dans le langage GO
Une note utile lors de l'utilisation de Python après une longue période