Python 操作任意类型剪切板

2019-09-29 13:15:11 +08:00
 gymmcome

鄙人手上有一个需求: Axure 原型软件中的元件库不好用,希望通过复制元件并保存剪切板缓存区内容,进行存储。使用 pyqt5 做剪切板管理。

目前的问题是: 剪切板有很多类型,文字、图片等。但是我的需求中设计到的类型是软件自定义的,我也不需要解析,我只需要进行剪切板存储然后归类,等待下次使用。但是网站上的教程普遍都是操作文字、图片、等剪切板类型

希望解决: 1、复制任意类型的剪切板内容。 2、将已存储的任意类型剪切板内容重新设置到剪切板。

当前发现软件 ditto 剪切板工具可以做到这一点,也就是技术上应该是可行的。希望大佬给点建议。

3337 次点击
所在节点    Python
5 条回复
littlespider89
2019-09-29 13:29:13 +08:00
剪贴板可以做任意的数据,但自定义的数据是需要序列化反序列化的,1,2 都没问题
如果 Axure 中的元件是可以复制的,那从剪贴板中拿出 raw 数据保存起来就可以了
gymmcome
2019-09-29 13:49:58 +08:00
@littlespider89
使用 PYQT5 或者其他库。这个示例代码怎么写,找了两天都没找到
clipboard = QApplication.clipboard()
mimeData = clipboard.mimeData()
clipboard.setMimeData(???)
littlespider89
2019-09-29 14:38:37 +08:00
@gymmcome 看了下还是挺复杂的,剪贴板系统里有各种 format

以下代码可参考

# pip install pywin32

import win32clipboard as wcb
format = wcb.RegisterClipboardFormat("myformat")
wbc.OpenClipboard()
wcb.SetClipboardData(format, b'rawserializedbytes')
wcb.GetClipboardData(format)
# b'rawserializedbytes\x00'

先把你要保存的对象序列化成 bytes,然后注册一个 format,就可以 set 和 get 了
Axure 的元件应该是有自己注册的 format,要是能拿到它的 format 类型,就可以获取 raw 数据了

这段代码把自己系统的剪贴板给搞坏了,我现在都不能复制粘贴了,这些代码还要手动打上去 😂
gymmcome
2019-09-29 16:11:51 +08:00
@littlespider89
这个类型获取不到啊,ditto 这个软件可以获取各个软件的自定义类型,不知道怎么实现的,可能类型里带了句柄。还有就是 ditto 提供直接复制剪切板缓冲区的功能。python 有这样的方法吗,google 了也找不到。
qile1
2019-09-29 20:53:08 +08:00
   •   1 楼

Theo d'Or    7 月前

使用转换方法,在 separate SO question ,对于 png 数据的 hexdump tkinter 从剪贴板提供的正确代码为:

from tkinter import Tk r = Tk() r.withdraw() clip = r.clipboard_get(type="image/png") r.update() r.destroy() # Convert hexdump to bytes clip = bytes([eval(h) for h in clip.strip().split(' ')]) with open("testbytes.png", mode="bw+") as f: f.write(clip)

除了写出 PNG 文件外,数据还可以加载 pillow 模块(以前称为 PIL ):

import io from PIL import Image cf = io.BytesIO(clip) cim = Image.open(cf) cim.show()

据我所知,这是在 Linux(Debian)上将 PNG 文件从剪贴板读入 Python3 的最佳方法。

别人的,你看看有没有参考价值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/605346

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX