Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将svg字符串复制到";图像/svg+;xml";在windows剪贴板中设置格式,以便将其粘贴为svg图像_Python_String_Svg_Mime - Fatal编程技术网

Python:将svg字符串复制到";图像/svg+;xml";在windows剪贴板中设置格式,以便将其粘贴为svg图像

Python:将svg字符串复制到";图像/svg+;xml";在windows剪贴板中设置格式,以便将其粘贴为svg图像,python,string,svg,mime,Python,String,Svg,Mime,假设我有如下svg文件的xml内容: <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (http://matplotlib.org/) -->

假设我有如下svg文件的xml内容:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
 "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Created with matplotlib (http://matplotlib.org/) -->
<svg height="344.88pt" version="1.1" viewBox="0 0 460.8 344.88" width="460.8pt" 
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
...

...

我的问题是,如何将此字符串复制到windows剪贴板,而不是作为字符串,而是作为“image/svg+xml”数据类型,该数据类型可以作为svg图像粘贴到powerpoint中?

据我所知,唯一支持Mime类型的剪贴板库是QtClipboard:

你可能想看看

在可以使用
setMimeData
设置的Mime类型中,可能还有image/svg+xml

例如:

from PyQt5 import QtCore
d = QtCore.QMimeData()
print(d.formats())  # Now it is an empty list "[]" because you still didn't set the data and the mime type

# Set data in the object with the required mime type
d.setData("image/svg+xml", b'<?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><!-- Created with matplotlib (http://matplotlib.org/) --><svg height="344.88pt" version="1.1" viewBox="0 0 460.8 344.88" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">')

print(d.formats())  # Now it prints: ['image/svg+xml']
从PyQt5导入QtCore
d=QtCore.QMimeData()
print(d.formats())#现在它是一个空列表“[]”,因为您仍然没有设置数据和mime类型
#使用所需的mime类型设置对象中的数据
d、 setData(“图像/svg+xml”,b'')
打印(d.formats())#现在它打印:['image/svg+xml']
从这里你可以把它带到QClipboard

我引用文件:

setMimeData()函数具有极大的灵活性:它允许 您需要将任何QMimeData添加到剪贴板中


你能详细说明一下“还有image/svg+xml”吗?@Alex我说可能,我不确定它是否属于受支持的Mime类型。我可能在剪贴板上运气不好。它只能获取由
QImage
创建的
image
。其他类型也不起作用,例如
text
。无论如何,谢谢。我不确定你做了什么,但我只是尝试了一下,效果很好。我将用一个例子编辑答案。@Alex是的,没错,这就是Mime类型:只是数据的描述。而对象MimeData只是一个围绕字节流和字符串描述(Mime类型)的包装器