如何在 pygtk 中使用线程

2023-12-30

我在 pygtk 中遇到线程问题。我的应用程序包含一个从互联网下载图片然后用 pygtk 显示它的程序。问题是,为了做到这一点并保持 GUI 响应能力,我需要使用线程。

因此,在用户单击“下载图片”按钮后,我进入回调,并调用该方法来下载同一类中的图片。

thread.start_new_thread(self.images_download, (路径,页面)

这行不通。我让程序进入线程的唯一方法是使用

gtk.threads_init()

在开始任何线程之前。现在它下载了图片,但 GUI 仍然没有响应。 我用谷歌搜索了这个,并尝试将 gtk.threads_enter 和 gtk.threads_leave 放在线程周围,但它不起作用。


你的问题有点模糊,如果没有参考你的实际代码,很难推测你做错了什么。

所以我会给你一些阅读建议,然后根据经验进行大胆推测。

首先,您似乎认为只能通过使用线程来保持 GUI 的响应能力。这不是真的。您还可以异步编写代码,并在单线程应用程序中完成所有操作。Twisted http://twistedmatrix.com是建立在这个编程模型之上的。我最近发表了一篇博文 http://thomas.apestaart.org/log/?p=851这解释了我如何创建异步任务界面以及 CLI 和 GTK+ 的示例运行程序。您可以查看这些示例,了解如何异步实现任务,并且 UI 仍然会更新。

其次,如果您出于某种原因更喜欢使用线程,则需要稍微了解一下 GTK+ 线程模型。

你应该从阅读开始,你可能会发现这篇博文 http://unpythonic.blogspot.com/2007/08/using-threads-in-pygtk.html也很容易理解。

现在,开始猜测。我猜测您正在尝试从线程更新 GTK UI,并且没有正确处理锁定。如果是这种情况,您现在最好使用 gobject.idle_add() 将您想要执行的所有 UI 更新从线程推迟到主线程,这样,所有 UI 调用都将从主线程进行。这是一种在编程中更容易遵循的心理模型。

一旦您觉得自己真正理解了线程和锁定模型,您就可以考虑从线程更新 UI,但很容易错过threads_enter()/threads_leave()

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

如何在 pygtk 中使用线程 的相关文章

  • Python:多处理和请求

    以下是我正在运行的使用多处理并行触发 HTTP 请求的代码片段 在控制台上运行后 它挂在 requests get url 处 既不继续前进也不抛出错误 def echo 100 q print before r requests get
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 在一张图中同时绘制两个截面强度

    我有一个形状数组 512 512 看起来像 行 x 列 y 密度 z 数组的数量 0 012825 0 020408 0 022976 0 015938 0 02165 0 024357 0 036332 0 031904 0 025462
  • 如何编写高效的配对算法?

    我需要一种算法的帮助 该算法可以有效地将人们分组 并确保以前的配对不会重复 例如 假设我们有 10 位候选人 candidates 0 1 2 3 4 5 6 7 8 9 并假设我们有一个先前匹配的字典 这样每个键值对即candidate
  • 如何通过facebook-sdk python api获取用户帖子?

    我使用 facebook jssdk 授权我的应用程序读取用户个人资料和用户帖子 FB login function response scope user status user likes user photos user videos
  • 检查对象数组中的多个属性匹配

    我有一个对象数组 它们都是相同的对象类型 并且它们有多个属性 有没有办法返回一个较小的对象数组 其中所有属性都与测试用例 字符串匹配 无论该属性类型是什么 使用列表理解all http docs python org 3 library f
  • 在 Jscript 中实例化 System.Threading.Thread 对象

    我正在尝试使用 Jscript 创建一个新的 System Threading Thread 对象 但我无法让构造函数工作 如果我只是执行以下操作 var thread new Thread threadFunc function thre
  • Selenium 网页抓取与动态内容和隐藏数据表上的美丽汤

    真的需要这个社区的帮助 我正在使用 Selenium 和 Beautiful Soup 对 Python 中的动态内容进行网页抓取 问题是定价数据表无法解析为 Python 即使使用以下代码 html browser execute scr
  • 出现意外的关键字参数“timeout”(Python 中的 google-cloud-storage)

    使用 google cloud storage 的 Python 项目在本地运行良好 但是当它从 App Engine 运行时 会显示错误 Traceback most recent call last File opt python3 7
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • 指定 Parquet 属性 pyspark

    如何在 PySpark 中指定 Parquet 块大小和页面大小 我到处搜索 但找不到任何有关函数调用或导入库的文档 根据火花用户档案 https mail archives apache org mod mbox spark user 2
  • 如何在 Spyder IDE 中安装 Selenium 包

    我刚刚在工作中安装了 Spyder IDE 仅 Spyder 不是整个 Anaconda 并且希望使用 FireFox 自动化我的工作 我的问题是 如何安装 Selenium 软件包 I figured it out Here is ins
  • if/else 在 while 循环内正确缩进[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我开始学习 Python 编程大约几周了 我遇到了一些麻烦 下面的代码是一个小程序 用于检查列表中是否有偶数 如果找到第一个偶数
  • 对 pandas 数据框中的每一列应用函数

    我如何以更多的熊猫方式编写以下函数 def calculate df columns mean self df means for column in df columns columns tolist cleaned data self
  • python 的 fcntl.flock 函数是否提供文件访问的线程级锁定?

    Python 的 fcnt 模块提供了一种名为 flock 1 的方法来证明文件锁定 其描述如下 对文件执行锁定操作op 描述符 fd 文件对象提供 fileno 方法被接受为 出色地 请参阅 Unix 手册集群 2 了解详情 在某些系统上
  • 如何在 Python 中解析损坏的 XML?

    我无法影响的服务器发送的 XML 非常损坏 具体来说 Unicode WHITE STAR 将被编码为 UTF 8 E2 98 86 然后使用 Latin 1 转换为 HTML 实体表 我得到的是 acirc 98 86 9 个字节 位于声
  • Elastic Beanstalk 上的 Django + MySQL - 查询 MySQL 时出错

    当我在 Elastic beanstalk 上托管的 Django 应用程序上查询 MySQL 时 出现错误 错误说 admin login 处出现操作错误 1045 用户 adminDB 172 30 23 5 的访问被拒绝 使用密码 Y
  • 将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

    在我的笔记本里有时会有 from IPython display import display HTML display HTML h3 The s is important h3 question of the day 但当我后来将笔记本

随机推荐

  • 如何在 Linux 中针对分段错误生成核心转储?

    我的 Linux 中有一个进程出现分段错误 我怎样才能告诉它在失败时生成核心转储 这取决于您使用的 shell 如果您使用的是 bash 则 ulimit 命令控制与程序执行相关的多个设置 例如是否应该转储核心 如果您输入 ulimit c
  • 仅当属性为 null 时,如何从 lombok 构建器中排除该属性

    我有一个用户模型类 如下所示 JsonSerialize Getter Setter FieldDefaults level AccessLevel PRIVATE Builder public class User Default Str
  • 基于 Python 中较小的数据集生成较大的综合数据集

    我有一个包含 21000 行 数据样本 和 102 列 特征 的数据集 我希望根据当前数据集生成一个更大的合成数据集 例如 100000 行 这样我就可以将其用于机器学习目的 我在这篇文章中提到了 Prashant 的答案https sta
  • 替换“/”之前的任何字符串,PHP

    我想替换 之前的任何字符串 无论字符串长度如何 谢谢 让 一种方式 假设您想更改第一个 之前的字符串 str anystring the rest blah s explode str s 0 new string print r impl
  • 谷歌浏览器本地存储保存在哪里?

    某些网站显示正在使用本地存储 在 Google Chrome 中 CTRL I 资源选项卡 本地存储 例如 StackOverflow 有一个 login prefs 键和我的默认登录提供程序 所以据我所知它是一个 json 对象 这些数据
  • Spring embeddeb 数据库表已存在错误

    我正在尝试使用嵌入式数据库运行 Spring Boot 应用程序 在 bean 初始化期间 由于某种原因 我的表创建脚本被调用两次 第二次调用失败 并出现 表已存在 错误 下面是我的代码 可能是什么问题 Configuration publ
  • MatLab - 将函数应用于矩阵中的每一行

    我有一个矩阵 行数为 4 个整数 列数未指定 取决于文本文件 我想独立地将函数应用于矩阵的每一行 该函数有 4 个输入和 2 个输出 我尝试使用 arrayfun 函数来执行此操作 但每当我调用该函数时 都会收到一条错误消息 输入参数不足
  • 如何在木偶上使用参数化正则表达式(例如/${user}/)进行测试?

    我需要获取用户的主目录 我决定通过解析 getent passwd 字符串来获取它 这是一个自定义事实构建为 内容的串联 etc passwd 并借助正则表达式提取相关信息 当我测试 getent带有固定字符串 adam 提取工程 if g
  • 如何在C#中使用Either类型?

    佐兰 霍瓦特 https www pluralsight com authors zoran horvat提议使用Either类型以避免空检查和不要忘记处理问题在执行操作期间 Either在函数式编程中很常见 为了说明其用法 Zoran 展
  • 如何对“新风格”Django 中间件进行单元测试

    我正在学习如何对 Django 中间件进行单元测试 在 旧式 中间件中 使用以下命令加载中间件非常容易process request 测试结果 例如 def test session self request self factory ge
  • 衍生品警告没有意义

    我收到以下形式的警告 DerivativesWarning Constraints or objectives traj linkages stage 1 grav turn alpha final coast 1 alpha initia
  • 错误显示:dyld_sim 与加载的进程不兼容

    我有一个 iPhone 中运行的应用程序的源代码 适用于 iOS 7 及之前的操作系统 但 iOS 8 0 及更高版本不支持该应用程序 当我尝试编译代码时 它可以正常执行所有文件 但会引发体系结构不匹配错误 在控制台中 dyld dyld
  • 如何更改查询以仅保留叶节点

    我有包含以下数据的表 id parent id short name 6 5 cpu 7 5 ram 14 9 tier a 15 9 rfc1918 16 9 tolerant 17 9 nononymous 13 12 cloudsta
  • HTTPServletRequest getParameterMap() 与 getParameterNames

    HTTPServletRequestreq 有一个方法getParameterMap 但是 这些值返回一个String 代替String 对于发布数据为 姓名 玛丽 姓氏 约翰 年龄 20 我在帖子数据中看到它不是一个数组 但是getPar
  • AngularJS 根据用户输入切换样式表

    如何根据用户单击的按钮来切换 切换 AngularJS 页面的样式表 您实际上可以在 html 级别放置一个控制器并修改link标签的href Demo http plnkr co edit jBtP6FfmeRzOYUCnHg3t p p
  • 如何检测通知/系统栏何时打开

    我需要知道系统 通知栏何时在我的应用程序中打开 但我找不到任何真正的解决方案 所以我将一些东西组合在一起 看起来效果很好 在详细介绍实现之前 我将简要解释一下我的 非常老套的 逻辑 当某个 Activity 由于任何原因不再对用户可见时 将
  • xtensor 类型与 NumPy 简单归约的性能对比

    我正在尝试xtensor python https github com QuantStack xtensor python并开始编写一个非常简单的求和函数 之后使用千篇一律的设置 https github com QuantStack x
  • TypeORM - 如何在生产模式下创建新表并自动运行迁移?

    我想在 MySQL 中创建新表 并在应用程序在生产模式下运行时自动运行 TypeORM 迁移 注意 此新表不是在生产模式下启动应用程序之前创建的 根据迁移文档 https github com typeorm typeorm blob ma
  • 在Jupyter中逐步执行算法

    我试图一步步展示 Jupyter 中 Python 程序的执行情况 例如 我可以将程序中变量的值可视化 如以下玩具程序所示 from IPython display import display clear output from time
  • 如何在 pygtk 中使用线程

    我在 pygtk 中遇到线程问题 我的应用程序包含一个从互联网下载图片然后用 pygtk 显示它的程序 问题是 为了做到这一点并保持 GUI 响应能力 我需要使用线程 因此 在用户单击 下载图片 按钮后 我进入回调 并调用该方法来下载同一类