我正在编写一个应用程序,可以使用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
标记的行,它将正常工作,但我需要对话框保持最顶层,希望有人可以帮助我找出问题。
答案 0 :(得分:0)
我阅读了文档,并找到了答案:"要从全屏模式返回,请调用showNormal()"。这是我的愚蠢。