スクリーンショットをキャプチャできるアプリをコーディングしようとしています。注意が必要なのは、Mac OS のスクリーンショット機能のように動作することです (ショートカットを押して画面上に四角形を描画すると、四角形が jpg ファイルに保存されます)。このプロジェクトでは、GUI の作成に PyQt4 を使用しています (スクリーンショットは、このアプリケーションの 1 つの機能にすぎません!)。これまでのところ、PyQt4 フォーム (現在はプレーン フォームのみを含む) を .py ファイルに変換し、いくつかのコードを実装しようとしました。これが私がこれまでに持っているものです:
フォームが読み込まれると、非表示になり、現在の画面のスクリーンショットが作成され、画像がフルスクリーンで表示されます (境界線なしで、すべてのウィンドウの上に表示されます)。
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 にこのエラーを「無視」させる方法を見つけたいと思っています。 -メッセージ...