2018-04-11

PyQt5でクリップボード画像を送る

相変わらず投稿するような場を持ってないのでここに。

PyQt5のアプリ上で外部から取得したPNG/JPEGクリップボードに送りたかったが、

期待するサンプルが見当たらなかったのでメモ

期待する動作は、Officeに元の形式として貼り付け可能であること。

失敗1

web上のいろんな情報から再構成してみた。

QClipboardなのかclipboardなのかで相当手間取った。

というかQApplicationがいまいちわからん。これでいいのだろうか。

ともあれ、クリップボードはいろいろ格納されたようだが、Office上ではビットマップとしてしか貼り付けられなかった。

import sys
from PyQt5.Qt import QApplication, QImage

img = QImage('test.png')

app = QApplication(sys.argv)
app.clipboard().setImage(img)


失敗2

失敗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とかいうのも使えたのだろうか。

ただ画像を送るとなると結局情報が少ないので、どのみち手間取りそう。

記事への反応(ブックマークコメント)

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん