如何将图像从Python发送到Klipper?

1 投票
2 回答
788 浏览
提问于 2025-04-16 21:16

使用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

所以我想问的是:“怎么用Python把图片放到klipper里?”

2 个回答

0

这里提到的“Image”是一个原始的Python图像库对象。你需要弄清楚:

1) Klipper支持什么样的图像输入格式(不是文本格式?)

2) 如何把这个图像转换成Klipper能接受的格式。你不能直接把Python的图像对象传给Klipper,而是要把保存好的数据(比如PNG文件的数据)传给它。

0

找到了一些解决办法——不是用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来做,但因为我只是调用系统命令,而不是读取图片,所以用Python就没必要了。

简单来说,假设你把一张图片下载到了~/Downloads文件夹里。然后如果你运行这个脚本,它会找到这个文件夹里最新的文件,使用gwenview打开它,复制到剪贴板(!),然后关闭gwenview。

我觉得要正常工作,不能有其他的gwenview在运行。如果你想使用这个脚本,最好把它绑定到一个快捷键上。

我之所以寻找这样的脚本,是因为我想切换到用键盘操作的网页浏览器(比如ConkerorPentadactyl)——这样可以快速保存图片,而我主要是需要把它粘贴到某个.odt文件里。

这个脚本还可以进一步做成一个守护进程,监控下载目录。但现在我需要写一个脚本,自动下载图片并放到剪贴板里——请看我接下来的问题my next question

找到你可能需要的qdbus命令的方法是打开

qdbusviewer

然后找到你需要的应用程序,再找到你需要的命令,然后像下面这样调用,就像锁屏的命令:

qdbus org.kde.krunner /ScreenSaver Lock

撰写回答