1

我正在尝试编写一个允许捕获屏幕截图的应用程序。棘手的部分是它的行为应该像 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“忽略”这个错误-信息...

4

0 回答 0