【问题标题】:pyqt5 can not close a topmost fullscreen qdialog on mac osxpyqt5 无法在 mac osx 上关闭最上面的全屏 qdialog
【发布时间】:2015-07-28 03:12:14
【问题描述】:

我正在编写一个可以使用 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 标记的行,它会正常工作,但我需要对话框保持在最上面,希望有人能帮助我找出问题所在。

【问题讨论】:

  • 对我来说工作正常。虽然在 Linux 上。
  • 是的,它在 Windows 和 Linux 上运行良好。所以整个跨平台的东西只是一种错觉,对吧?
  • 在我们的项目中我们只看到close()在MacOS机器上没有关闭全屏窗口的问题,在其他机器上似乎没有任何问题。我们正在运行 PyQt 5.9 顺便说一句

标签: pyqt fullscreen pyqt5 qdialog topmost


【解决方案1】:

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

【讨论】:

  • 好的,这也解决了我们项目的问题,但是对于MacOS我们必须调用showNormal还是很奇怪对吧?该文档包含有关从全屏返回的信息,但没有说明关闭 MacOS 的问题,所以这似乎是 Qt/PyQt 中的错误,对吗? (我们正在运行 PyQt 5.9 顺便说一句)
猜你喜欢
  • 2012-07-26
  • 2022-11-14
  • 2012-06-01
  • 2018-07-26
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多