复制到剪贴板的图像不会保留在 Linux
Image copied to clipboard doesn't persist on Linux
我试图将图像保存到系统剪贴板,所以我写了一些这样的代码:
#!/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()
遗憾的是,我发现它根本不起作用。然后我试图找到解决方案。我尝试的第一件事是:
def copyPicToClip(self):
image = QImage('./test.jpg')
QApplication.clipboard().setImage(image)
# self.close()
之后,我发现它可以工作,但是window不会自动关闭。
然后我尝试复制文本:
#!/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 上的 "normal" 行为。默认情况下,剪贴板数据不会在应用程序关闭时保留。此问题的通常解决方法是安装剪贴板管理器。对于 Ubuntu,请参阅此 wiki 文章了解更多详情:
- Ubuntu 维基:Clipboard Persistence
(注意:我本人并未实际测试过任何建议的解决方案,因此我不知道它们是否适用于 PyQt)。
基本问题是在 Linux 上,剪贴板仅存储对基础数据的引用。这在存储方面非常有效,因为数据仅在客户端程序实际请求时才被复制。但是当然如果源应用程序关闭,引用就会失效,剪贴板就会变空。
我试图将图像保存到系统剪贴板,所以我写了一些这样的代码:
#!/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()
遗憾的是,我发现它根本不起作用。然后我试图找到解决方案。我尝试的第一件事是:
def copyPicToClip(self):
image = QImage('./test.jpg')
QApplication.clipboard().setImage(image)
# self.close()
之后,我发现它可以工作,但是window不会自动关闭。
然后我尝试复制文本:
#!/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 上的 "normal" 行为。默认情况下,剪贴板数据不会在应用程序关闭时保留。此问题的通常解决方法是安装剪贴板管理器。对于 Ubuntu,请参阅此 wiki 文章了解更多详情:
- Ubuntu 维基:Clipboard Persistence
(注意:我本人并未实际测试过任何建议的解决方案,因此我不知道它们是否适用于 PyQt)。
基本问题是在 Linux 上,剪贴板仅存储对基础数据的引用。这在存储方面非常有效,因为数据仅在客户端程序实际请求时才被复制。但是当然如果源应用程序关闭,引用就会失效,剪贴板就会变空。