【发布时间】: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