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

2023-12-13

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复制到剪贴板的图像在 Linux 上不会保留 的相关文章

随机推荐

  • Knockoutjs:ScrollIntoViewTrigger

    我最近遇到了一个问题 虽然我为我解决了它 但我不确定是否没有更好的解决方案 所以我很感激任何评论 问题 我想创建一个 ScrollIntoView 绑定 由于将元素滚动到视图中需要 DOM 元素 因此我编写了一个自定义绑定 然后我想在我愿意
  • 机械化和 Google App Engine

    有人成功使用过吗机械化使用 Google App Engine 应用程序 是的 尽管您需要更改 mechanize py 文件或执行大多数人所做的操作 即下载已更改且已修复的版本 不确定这是否仍然有效 因为它是 2010 年的 以下是针对谷
  • 如何在 Ansible 中为每个剧本登录单独的文件

    我希望在 Ansible 中运行的每个 playbook 有单独的日志文件 而不是 log path 中定义的单个日志文件 据我所知 没有内置的方法可以做到这一点 所以我正在寻找聪明的 黑客 更具体地说 我希望在运行剧本后以 剧本名称 日期
  • 在 SwiftUI 中使用自己的 ButtonStyle 在 tvOS 上无法选择按钮

    将标准按钮样式替换为自定义按钮样式后 该按钮在 tvOS 上不再可选 它在 iOS 上按预期工作 PlainButtonStyle 中是否有我缺少的特殊修饰符 或者这是 SwiftUI 中的一个错误 这是有效的截图 Button actio
  • 如何在 Hibernate 查询中使用准备好的语句? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 如何在 Hibernate 查询中使用准备好的语句 默认情况下 Hibernate 使用PreparedStatement 你不必担心它 不仅Criteria但 Hibernate 使
  • 无法在 HoneyComb 3.2 上安装应用程序 - 它给出 INSTALL_PARSE_FAILED_NOT_APK 错误

    谢谢阅读 一位用户最近报告说 他无法在他的 Asus Eee Pad Transformer 上安装我的应用程序 我假设它已经更新了 3 2 因此 我尝试在 3 2 模拟器上安装该应用程序 这是我的控制台输出 2011 08 04 14 0
  • 在 AngularJs 中使用 UI-Router 更改导航菜单

    我正在尝试像任何社交网站一样构建一个导航菜单 即如果我logged Out我可以看到input fields要求Username and Password但如果我是logged In然后我可以看到我的个人资料 设置等 我正在尝试做同样的事情
  • Xamarin.android-如何更快地加密/解密图像

    我希望用户从图库中选择图像 视频并在我的应用程序中保护他们的图像 为此 我对这些图像进行了加密 图像加密工作正常 我认为是这样 8MB 图像需要 1 5 至 2 秒 但视频呢 视频可能以 GB 为单位 所以需要很多时间 即使在加密 解密中
  • 如何使用 ClearCase CM API 获取元素的历史记录?

    我想使用由clearcase 提供的Rational CM API 获取受clearcase 控制的文件元素 例如pdf 文件 doc 文件等 的历史记录 我编写了以下代码来获取历史记录 但它不完整 所以请在这里帮助我 public voi
  • CFB 模式下的 TripleDES、C# 和 Crypto++ 不同

    这是我的问题 我有一个 C 遗留代码 使用 crypto v5 6 1 并且我用 C 开发了一个新代码 使用 System Security Cryptography 的 NET 3 5 我无法改变C 代码 但我需要能够解密之前加密的数据
  • 如何引发回发?

    我需要在 C 中引起回发 我该怎么做 它不能通过按钮或任何其他元素 只想在满足条件时引起回发 就像是 If so and so Postback now else Do not post back 从评论来看 您似乎正在使用 telerik
  • 从类方法内部更改全局变量

    当我尝试执行下面的代码时 第一个列表被修改 而第二个列表没有发生任何更改 有没有办法用全新的列表替换外部列表 或者调用列表方法是我可以从内部类方法中执行的唯一操作 我尝试在赋值操作之前添加 global 关键字 但它会产生语法错误 firs
  • 将 document.getElementById 分配给另一个函数

    我正在尝试在 JavaScript 中执行以下操作 var gete document getElementById 但我收到以下错误 来自 FireBug 的控制台 uncaught exception Exception Illegal
  • 只需通过 Jquery 按 Enter 键即可将焦点从一个控件移动到另一个控件

    假设我在页面中有许多 html 控件 并且所有控件都按顺序设置了制表位 因此 如果我按 Tab 键 则焦点会正确移动 但我想通过按 Enter 键而不是 Tab 键来移动焦点 所以请告诉我 当用户仅通过 javascript 或 jquer
  • 在 Bash shell 中获取并使用包含特殊字符的密码

    我在使用带有特殊字符 例如 的密码时遇到了一些麻烦bashshell 脚本 我的 shell 脚本是 read s p Password bindDNPass ldapadd H ldap localhost x w bindDNPass
  • 调整列大小后如何使用usesAutomaticRowHeights = true更新NSTableView的行高?

    从 macOS 10 13 开始 得益于新属性 我们可以使用具有自动行高的 NSTableViewusesAutomaticRowHeights当然还有自动布局 这效果非常好 但是 当用户调整列大小时 计算出的高度不再正确 并且表格视图单元
  • Mac 上的 Sublime Text 设置

    我正在从 Windows 切换到 Mac 但无法找到sublime settings文件被存储 有人可以指点我的路吗 如果你打开Sublime Text 2 gt Preferences gt Browse Packages the Pac
  • 在 Accordion 中一次打开一个选项卡

    我有一个工作得很好的手风琴 但我需要的是一次只打开一个选项卡 这意味着当打开一个选项卡时 应该关闭另一个选项卡 目前您可以看到我们可以通过单击选项卡链接来打开所有选项卡 代码在这里 accordion gt li gt span click
  • 为了防止性能问题,“滚动链接定位效果”的替代方案是什么?

    我在 Firefox 中收到以下警告 该网站似乎使用了滚动链接定位效果 这可能不适用于异步平移 看https developer mozilla org docs Mozilla Performance ScrollLinkedEffect
  • 复制到剪贴板的图像在 Linux 上不会保留

    我正在尝试将图像保存到系统剪贴板 所以我编写了一些如下代码 usr bin python3 from PyQt5 Qt import QApplication from PyQt5 QtWidgets import QWidget QPus