我正在尝试将图像保存到系统剪贴板,因此我编写了如下代码:
#!/usr/bin/python3
from PyQt5.Qt import QApplication
from PyQt5.QtWidgets import QWidget, QPushButton
from PyQt5.Qt import QImage
import sys
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.button = QPushButton(self)
self.button.clicked.connect(self.copyPicToClip)
def copyPicToClip(self):
image = QImage('./test.jpg')
QApplication.clipboard().setImage(image)
self.close()
if __name__ == '__main__':
a = QApplication(sys.argv)
myW = MyWidget()
myW.show()
a.exec()
可悲的是,我发现它根本不起作用。然后我试图找到解决办法。我做的第一件事是:
^{pr2}$在这之后,我才发现它起作用了,但是窗口不会自动关闭。在
然后我试着复制文本:
#!/usr/bin/python3
from PyQt5.Qt import QApplication, QClipboard
from PyQt5.QtWidgets import QWidget, QPushButton
from PyQt5.Qt import QImage
import sys
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.button = QPushButton(self)
self.button.clicked.connect(self.copyPicToClip)
QApplication.clipboard().dataChanged.connect(self.testFunc)
def copyPicToClip(self):
image = QImage('./test.jpg')
QApplication.clipboard().setImage(image)
def testFunc(self):
print('Here')
self.close()
if __name__ == '__main__':
a = QApplication(sys.argv)
myW = MyWidget()
myW.show()
a.exec()
遗憾的是,它又失败了。在
所以,如果我提早关闭应用程序,图像不会保存到剪贴板。但我想在把图像复制到剪贴板后关闭它。在
有什么建议吗?在
(PyQt5,ubuntu 16.10,如果有帮助的话)。在
不幸的是,这是Linux上的“正常”行为。默认情况下,当应用程序关闭时,剪贴板数据不会持久化。通常解决此问题的方法是安装剪贴板管理器。对于Ubuntu,请参阅这篇wiki文章了解更多详细信息:
(注:我自己并没有实际测试任何建议的解决方案,所以我不知道其中是否有任何解决方案可以与PyQt一起使用)。在
基本问题是在Linux上,剪贴板只存储对底层数据的引用。这在存储方面非常有效,因为只有在客户机程序实际请求数据时才会复制数据。但当然,如果源应用程序关闭,引用将失效,剪贴板将变为空。在
相关问题 更多 >
编程相关推荐