相変わらず投稿するような場を持ってないのでここに。
PyQt5のアプリ上で外部から取得したPNG/JPEGをクリップボードに送りたかったが、
期待する動作は、Officeに元の形式として貼り付け可能であること。
QClipboardなのかclipboardなのかで相当手間取った。
というかQApplicationがいまいちわからん。これでいいのだろうか。
ともあれ、クリップボードにはいろいろ格納されたようだが、Office上ではビットマップとしてしか貼り付けられなかった。
import sys from PyQt5.Qt import QApplication, QImage img = QImage('test.png') app = QApplication(sys.argv) app.clipboard().setImage(img)
失敗1から一回QMimeDataを経由してみた。結果何も変わらず。
# -*- coding: utf-8 -*- import sys from PyQt5.Qt import QApplication, QImage, QMimeData img = QImage('test.png') data = QMimeData() data.setImageData(img) app = QApplication(sys.argv) app.clipboard().setMimeData(data)
以前C#にて、画像生成してクリップボードに送るアプリを作ろうとしていたときの残骸を参考にトライ。
無事期待する動作が得られた。
JPEGの場合はsetData('JFIF', img)になる。
# -*- coding: utf-8 -*- import sys from PyQt5.Qt import QApplication, QMimeData with open('test.png', 'rb') as fo: img = fo.read() data = QMimeData() data.setData('PNG', img) app = QApplication(sys.argv) app.clipboard().setMimeData(data)
今回はPyQt5ベースだったので試さなかったが、pywin32のwin32clipboardとかいうのも使えたのだろうか。