gpt4 book ai didi

python - 复制到剪贴板的图像在 Linux 上不会保留

转载 作者:太空宇宙 更新时间:2023-11-03 15:54:19 25 4
gpt4 key购买 nike

我正在尝试将图像保存到系统剪贴板,因此我编写了一些如下代码:

#!/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()

之后我发现它可以工作,但是窗口不会自动关闭。

然后我尝试复制文本:

#!/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 上,剪贴板仅存储对底层数据的引用。这在存储方面非常高效,因为只有当客户端程序实际请求数据时才会复制数据。但当然,如果源应用程序关闭,引用将失效,剪贴板将变空。

关于python - 复制到剪贴板的图像在 Linux 上不会保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40944657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com