Как поместить изображение из python в klipper? - PullRequest
1 голос
/ 11 июля 2011

Используя python, можно прочитать изображение:

from PIL import Image, ImageTk
image = Image.open("test.jpg")

Затем можно написать в klipper следующим образом:

import dbus
bus = dbus.SessionBus()
proxy = bus.get_object("org.kde.klipper","/klipper")
iface = dbus.Interface(proxy,"org.kde.klipper.klipper")
iface.setClipboardContents("text")

Но когда я пытаюсь написать изображениеЯ только что открыл - он говорит, что не может принять это:

iface.setClipboardContents(image)
TypeError: Expected a string or unicode object

Итак, мой вопрос: «Как поместить изображение в klipper с python?»

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Нашел какое-то решение - не с python, а с bash, и оно не работает для удаленных картинок - работает только для локальных (из-за gwenview).Вот скрипт bash:

#!/bin/bash
cd /home/boris/Downloads/
name=`ls -t1 | head -1`
gwenview $name &
sleep 3
id=`ps -e | grep gwenview | awk '{print $1}'`
qdbus org.kde.gwenview-$id /gwenview/MainWindow_1/actions/edit_copy trigger
sleep 3
kill $id

Это также может быть сделано с помощью python of cource, но так как я делаю системный вызов, а не читаю на рисунке - нет необходимости использовать python.

Чтобы объяснить это - предположим, вы загрузили изображение в ~ / Downloads.Затем, если вы этот скрипт, он найдет самый свежий файл там, откроет его с помощью gwenview, скопирует его в буфер обмена (!), А затем закроет gwenview.

Я думаю, что он работает правильно - другие gwen не могут быть запущены,И если вы хотите использовать его - разумно связать скрипт с горячей клавишей.

Причина, по которой я искал такой скрипт, - это потому, что я хочу переключиться на веб-браузер, управляемый с клавиатуры (такой как Conkeror или Pentadactyl ) - и это позволяет быстро сохранить изображение - в то время как мне в основном нужно вставить его в некоторый файл .odt).

Этот сценарий может быть дополнительно сделандемон - который будет смотреть каталог загрузок.Но теперь я должен написать скрипт, который будет загружать изображение и автоматически помещать в буфер обмена - см. мой следующий вопрос .

Способ найти команду qdbus, которая может вам понадобиться, - это открыть

qdbusviewer

и найдите нужное приложение, затем нужную команду, а затем выполните аналогичный вызов, например, для блокировки экрана:

qdbus org.kde.krunner /ScreenSaver Lock
0 голосов
/ 12 июля 2011

Изображение - это необработанный объект библиотеки изображений Python. Вам нужно узнать

1) Какой формат ввода Klipper использует для изображений (не для текста?)

2) Как сериализовать изображение в этот формат. Вы не передаете объект изображения Python, но, вероятно, сохраняете данные (данные файла PNG) в Klipper.

...