线程:在 GUI 线程之外使用像素图是不安全的

2024-03-27

我正在构建一个音乐播放器,它使用 SqueezePlay(一个 SqueezeBox 控制器应用程序)检查状态。长话短说,我使用线程每 5 秒检查一次 Squeezeplay 的状态。如果歌曲标题发生变化,我让它更新标签(Qlabel、专辑封面(QPixmap)等)。但是,当我要求它通过线程更新它时,我得到在 GUI 线程之外使用像素图是不安全的 .

我如何进行线程处理但仍然设置 QPixmap?

示例代码:

#self.sq.getArtwork() returns variable with the image
coverArt = self.sq.getArtwork()
coverPixMap = QtGui.QPixmap()
coverPixMap.loadFromData(coverArt)
self.albumArt.setPixmap(coverPixMap)

非常感谢!

Update:我用 Emit 尝试了以下操作,但它不起作用,有人可以看看我做错了什么吗?

def setNewArtwork(self, image):
    coverPixMap = QtGui.QPixmap()
    coverPixMap.convertFromImage(image)
    icon = QtGui.QIcon(coverPixMap)
    item.setIcon(icon)

def getNewArtwork(self):
    coverArt = self.sq.getArtwork()
    icon = QtGui.QImage(coverArt)
    self.emit(QtCore.SIGNAL('setNewArtwork(QImage)'), icon)

所有图形 Qt 操作都应该发生在主线程中。其他线程实际上不允许调用 Qt 图形操作(可能包括像素图)。

他们可以发出 Qt 信号 http://doc.qt.io/qt-4.8/signalsandslots.html到主线程。或者简单地(在 Linux 上)写入管道,并拥有 mainthread http://qt-project.org/wiki/ThreadsEventsQObjects等待该管道上的输入。

当然,您必须定义所需的信号(以及插槽)。在 C++ 代码中,您需要将它们标记为signals: (or slots:)并且您的 C++ 代码应该由moc http://doc.qt.io/qt-4.8/moc.html#moc。我不知道Python的对应部分是什么(也许Python反射能力可能就足够了,我真的不知道)。然后,您必须将信号连接到插槽,并使用queued联系。我不知道如何在 Python 中做到这一点。

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

线程:在 GUI 线程之外使用像素图是不安全的 的相关文章

  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 为什么 QT 设计器重新调整大小或不允许我缩小或展开小部件或按钮?

    很多时候 在使用 QT 设计器时 我发现自己需要通过缩小或扩展来调整事物的大小 每当我尝试这样做时 程序都不允许我这样做 而只是恢复到将对象放置在窗口中时给我的原始默认大小 无论我的布局如何 为什么要这样做 是否有可能改变这一点 以便我可以
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • 如何停止 Azure CDN 缓存 index.html

    我正在使用 Azure CDN 托管我正在构建的静态网站 这很棒 除了当我更新网络应用程序时旧页面被缓存并仍然显示这一事实之外 我在规则引擎中添加了以下缓存规则 使其每 60 秒刷新一次 但这没有任何作用 我仍然得到旧内容 获取新内容的唯一
  • 帮助集中动态创建的输入

    我的代码是这样的 在jsfiddle http jsfiddle net KH7pZ 1 var inp
  • 删除一列的重复单元格:html

    我要按照这个做同样的事情 table border 1 tr td test1 td td test2 td td test3 td tr tr td test4 td td test2 td td test5 td tr tr td te
  • 无法在 mac os yosemite 中通过 brew 链接 PCRE

    当我使用安装守望者时brew install watchman 它得到了这个Error You must brew link pcre before watchman can be installed 所以我尝试brew link pcre
  • 一种阻止移动浏览器下载和显示图像的方法

    有没有一种简单的方法来阻止浏览器下载和显示图像 最好是通过一些魔法样式标签或javascript 问题是 我想稍微调整一下公司的网站 以便通过移动设备更方便使用 该公司是一家游戏公司 其主页上有大约 5MB 的图像 而且这些图像是不能动的
  • Google Apps 脚本中的 MailApp.sendEmail() 不发送电子邮件

    我们为客户建立了 Google G Suite 在过去的几周里 我们发现 Google Apps 脚本没有按预期处理 MailApp sendEmail 它只发生在新的 G Suite 帐户中 并且现有帐户中的代码与预期的功能完全相同 fu
  • 将数据导出到 Excel 在数据表中不起作用

    在 head 之间添加此行后 导出数据和 TableTools 不适用于我
  • 检查对象的类型是否继承自特定类

    在C 中 如何检查对象的类型是否继承自特定类 class Form class Moveable public Form class Animatable public Form class Character public Moveabl
  • 从活动中调用 JavaScript 函数?

    如何使用 Activity 中的按钮调用加载到 webView 中的 HTML 文档中的函数 即 一个 ImageButton 称为 bookBtn 位于 Activity 的标题栏中 当按下 点击它时 我需要它在 webView DOM
  • 从 Set 中检索“规范值”,其中 T 具有自定义 equals()

    我有一个class Foo这会覆盖equals and hashCode 适当地 我想也想使用HashSet
  • 为什么当我追加子项时我的输入值会被清除?

    当我在 a 中附加元素时遇到问题div我输入的所有值 包括选定的选项 都被清除 如下所示 正如您所看到的 当我单击按钮 A adir tecla 时 文本框中的文本和所选选项 Shift 将返回到默认选项 Flechas de movimi
  • Outlook 中的文本不使用行高

    我正在使用 Html 创建电子邮件 并且偶然发现 Outlook 2010 存在问题 这是我的代码 td width 514 height 460 valign top td
  • Facebook Connect iPhone 自定义发布流

    我刚刚下载了 iOS 版 Facebook SDK 因为我需要能够将自定义流发布到用户的 Facebook feed 示例应用程序有一个名为publishStream id sender的方法 该方法似乎为 发布流 对话框设置自定义描述 但
  • counter_cache 列返回 0 的 Rspec 测试

    几天来 我一直在努力弄清楚什么是应该很容易做的事情 然而 我对 Rails 和 ruby 的世界仍然很陌生 我只是无法解决这个问题 p 无论如何 我遇到的问题是我的模型中有许多 counter cache 列 这些列在手动测试时都工作得很好
  • 防止使用 PHP CURL 的远程脚本登录网站

    有哪些方法可用于保护登录页面不被远程 PHP 脚本使用 CURL 登录 检查引荐来源网址和用户代理将不起作用 因为它们可以使用 CURL 设置 理想的解决方案是在不使用验证码的情况下解决这个问题 这就是这个问题的重点 试图弄清楚这是否可能
  • 导入的样式不会应用于组件

    我想创建单独的文件来存储 IE 9 11 的样式 为此 我创建并导入了文件InternetExplorer scss进入 主文件styles scss import scss InternetExplorer scss The Intern
  • 错误:存在部署错误

    当我尝试运行任何示例应用程序或新应用程序时 它显示此错误 有人可以帮忙吗 该错误告诉您尚未选择设备 运行应用程序之前请选择有效的设备 您需要选择一个物理手机 或 Android 模拟器 来部署应用程序 Ref 在设备上调试 https de
  • 及时编译 - 存储与始终执行[重复]

    这个问题在这里已经有答案了 可能的重复 为什么 JVM 不缓存 JIT 编译的代码 https stackoverflow com questions 1992486 why doesnt the jvm cache jit compile
  • Rspec、Cucumber:最佳速度数据库清理策略

    我想提高测试速度 我应该使用use transactional fixtures或与database cleaner gem 哪种database cleaner策略是最好的 我注意到 从迁移后 truncation to transact
  • 线程:在 GUI 线程之外使用像素图是不安全的

    我正在构建一个音乐播放器 它使用 SqueezePlay 一个 SqueezeBox 控制器应用程序 检查状态 长话短说 我使用线程每 5 秒检查一次 Squeezeplay 的状态 如果歌曲标题发生变化 我让它更新标签 Qlabel 专辑