我正在尝试编写一个允许捕获屏幕截图的应用程序。棘手的部分是它的行为应该像 Mac OS 中的屏幕截图功能(您按下快捷方式并在屏幕上绘制一个矩形,然后该矩形将保存在 jpg 文件中)。对于这个项目,我使用 PyQt4 来创建一个 GUI(截图只是这个应用程序中的一个功能!)。到目前为止,我在 .py 文件中转换了 PyQt4 表单(目前只包含一个普通表单)并尝试实现一些代码。这是我到目前为止所拥有的:
当表单被加载时,它将隐藏,对当前屏幕进行截图并全屏显示图像(无边框并在所有窗口的顶部)。
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(100, 100)
Form.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
if __name__ == "__main__":
import sys
from PIL import Image
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.hide()
QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId()).save('screenshot.png', 'png')
pixmap = QtGui.QPixmap("screenshot.png")
lbl = QtGui.QLabel()
lbl.setPixmap(pixmap)
lbl.setWindowFlags (QtCore.Qt.WindowStaysOnTopHint)
lbl.showFullScreen()
sys.exit(app.exec_())
实际上到目前为止这有效,但是在关闭应用程序后,我在终端中收到以下错误消息:
Fri Jan 25 19:19:08 my-macbook-2.local Python[35515] <Error>: kCGErrorIllegalArgument:CGSOrderWindowList
Fri Jan 25 19:19:08 my-macbook-2.local Python[35515] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
我用谷歌搜索了“CGErrorBreakpoint()”,据我了解,它与调试有关。谁能给我提示如何处理此消息?由于我花了好几个小时才知道应用程序正在做它应该做的事情,我希望能够保持代码原样并找到一种方法让 python“忽略”这个错误-信息...