1

私は今、この問題を何時間も抱えています。多くのことを調査しました (カスタム QDialog を作成しました) が、この問題の原因は closeEvent と QMessageBox の組み合わせであると判断しました。私が知りたいのは、この問題を克服する方法があるかどうかです。

問題:

コードを閉じる前に、スレッド、DLL などの使用済みリソースをすべてクリーンアップできるようにしたいと考えています。実際にクリーンアップ全体を実行するには数秒かかります。アプリケーションが適切に機能していることをユーザーに保証するために、アプリケーションがそのリソースをクリーンアップしようとしていることを確認するステータス メッセージを「出力」したいと考えています。

ただし、以下のコードを使用すると、「よろしいですか.....」しか得られません。「Stopping App.....」メッセージは に挿入されませんprocessEdit

私のコードスニペット、test.py:

import sys, os, time
from PySide.QtGui import *
from PySide.QtCore import *
from time import sleep

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(350, 100, 300, 300)
        self.processEdit = QTextEdit()
        self.grid = QGridLayout()
        self.grid.addWidget(self.processEdit, 0, 0)
        self.setLayout(self.grid)
        self.show()

    def closeEvent(self, event = False):
        self.processEdit.insertHtml("\n\n Are you sure.....")
        if isinstance(event, QCloseEvent):
            event.ignore()
        confirm = QMessageBox.question(self, 'Message', "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if confirm == QMessageBox.Yes:
            self.processEdit.insertHtml("\n\n Stopping App.....")

            # clean up resources and status reports here.
            time.sleep(5) # only here for the snippet

            event.accept()
        else:
            event.ignore()

if __name__ == '__main__':

    qapp = QApplication(sys.argv)
    c = MainWindow()
    sys.exit(qapp.exec_())
4

1 に答える 1