pyqt5无法关闭mac osx上最顶层的全屏qdialog

时间:2015-07-28 03:12:14

标签: pyqt fullscreen pyqt5 qdialog topmost

我正在编写一个应用程序,可以使用pyqt5在osx 10.9.5上截取屏幕截图;代码示例是这样的:

import sys
from PyQt5 import QtWidgets,QtCore,Qt
from PyQt5.Qt import QApplication

class CScreenshot(QtWidgets.QDialog):
    def __init__(self):
        super(CScreenshot,self).__init__()
        self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  #1

    def screenshot(self):
        #grab screen and paint into this dialog
        #so user can modify the pix through this dialog
        _screen = Qt.QApplication.primaryScreen()
        self.m_snapPix = _screen.grabWindow(0)
        #...
        self.showFullScreen()
        self.exec_()

    def drawLine(_p1,_p2):
        pass
    #...

class CMainWindow(QtWidgets.QWidget):
    def __init__(self):
        super(CMainWindow,self).__init__()
        self.m_btnScreenshot = QtWidgets.QPushButton(self)
        self.m_btnScreenshot.clicked.connect(self.onBtnClk)

    def onBtnClk(self):
        ss = CScreenshot()
        ss.screenshot()     #here into the CScreenshot's message loop
        #process next step balabala...


if __name__ == "__main__":

    app = QApplication(sys.argv)
    w = CMainWindow()
    w.show()
    sys.exit(app.exec_())

问题出现了:当我点击按钮时,全屏对话框会弹出并保持在最顶层,一切正常。但是当我按下Esc按钮时,对话框应该关闭并显示主窗口,但屏幕只是由黑色全屏窗口固定,其标题为python。如果我删除#1标记的行,它将正常工作,但我需要对话框保持最顶层,希望有人可以帮助我找出问题。

1 个答案:

答案 0 :(得分:0)

我阅读了文档,并找到了答案:"要从全屏模式返回,请调用showNormal()"。这是我的愚蠢。