PyQt中无边框窗口使用弹窗,主窗口跟随弹窗一起关闭的问题。

  最近写PyQt5无边框小程序遇到了一个奇怪的问题。就是一个无边框的主窗口,生成一个Dialog子窗口后,子窗口关闭主窗口也跟着关闭。代码结构如下:

import sys
from PyQt5 import QtWidgets, QtCore


class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(QtCore.QSize(100, 100))
        self.setWindowFlag(QtCore.Qt.Tool)  # 去任务栏

        self.button = QtWidgets.QPushButton(self)
        self.button.clicked.connect(self.show_diary)
        self.show()

    @staticmethod
    def show_diary():
        diary_window = MyDialog()
        diary_window.exec_()

    def closeEvent(self, e):
        sys.exit(0)


class MyDialog(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()
        self.label = QtWidgets.QLabel(self)
        self.label.setText('This is dialog')
        self.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    ex = Window()
    sys.exit(app.exec_())

使用控制变量法简单排除了下,在不使用无边框情况下,是不会出现上面的问题的。后来又受此文章启发 Qt:关闭唯一的主窗口,让QApplication的event loop不退出 ,便猜测QApplication的事件循环跟任务栏有关。于是尝试性的向MyDialog类里面加了句 self.setWindowFlag(QtCore.Qt.Tool) 便没出现上述问题了。不过具体是为什么还不知道,望有看到的大大能告诉下。

你可能感兴趣的:(Python,PyQt5)