鄙人手上有一个需求: Axure 原型软件中的元件库不好用,希望通过复制元件并保存剪切板缓存区内容,进行存储。使用 pyqt5 做剪切板管理。
目前的问题是: 剪切板有很多类型,文字、图片等。但是我的需求中设计到的类型是软件自定义的,我也不需要解析,我只需要进行剪切板存储然后归类,等待下次使用。但是网站上的教程普遍都是操作文字、图片、等剪切板类型
希望解决: 1、复制任意类型的剪切板内容。 2、将已存储的任意类型剪切板内容重新设置到剪切板。
当前发现软件 ditto 剪切板工具可以做到这一点,也就是技术上应该是可行的。希望大佬给点建议。
1
littlespider89 2019-09-29 13:29:13 +08:00
剪贴板可以做任意的数据,但自定义的数据是需要序列化反序列化的,1,2 都没问题
如果 Axure 中的元件是可以复制的,那从剪贴板中拿出 raw 数据保存起来就可以了 |
2
gymmcome OP @littlespider89
使用 PYQT5 或者其他库。这个示例代码怎么写,找了两天都没找到 clipboard = QApplication.clipboard() mimeData = clipboard.mimeData() clipboard.setMimeData(???) |
3
littlespider89 2019-09-29 14:38:37 +08:00 1
@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 数据了 这段代码把自己系统的剪贴板给搞坏了,我现在都不能复制粘贴了,这些代码还要手动打上去 😂 |
4
gymmcome OP @littlespider89
这个类型获取不到啊,ditto 这个软件可以获取各个软件的自定义类型,不知道怎么实现的,可能类型里带了句柄。还有就是 ditto 提供直接复制剪切板缓冲区的功能。python 有这样的方法吗,google 了也找不到。 |
5
qile1 2019-09-29 20:53:08 +08:00 via Android
 • 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 的最佳方法。 别人的,你看看有没有参考价值 |