你明白这个僵局吗?

2024-01-23

我的 GUI 使用 wxPython。在里面AppLogic类我有一个工作线程,它在这个类的方法中运行。

这是GUI class:

class GUI:
    _wx_app = None
    _main_window = None
    _app_logic = None

    def start(self):
        # bla bla bla
        self._main_window.Show()
        self._app_logic.begin()
        self._wx_app.MainLoop()

    def _cancel_listener(self):
        """Called from MainWindow, if the user has clicked the cancel
        button."""
        print("I'm leaving this scope.")
        self._app_logic.cancel()  # Should cancel the task done in
                                  # a second thread.

    def _status_listener(self, status_text):
        """Called often by the worker thread."""
        print("Here I am again.")
        if self._main_window.status.GetLabel() != status_text:
            self._main_window.status.SetLabel(status_text)

这是来自的取消方法AppLogic被调用的类_cancel_listener从上面:

    def cancel(self):
        self._shall_abort = True
        self._thread.join(self._some_time_out)
        assert self._thread.isAlive() == False

不知何故,出现了僵局join and GetLabel(因此MainLoop?)参与,但我真的不明白发生了什么。有人对此有更多的见解吗?那太好了!


所有 GUI 工具包都有一个主 GUI 线程。它们都有特殊的方法,允许您以线程安全的方式操作 GUI 小部件。在wxPython世界中,这些方法是wx.CallAfter、wx.CallLater和wx.PostEvent。我在你的示例中没有看到这些,所以你所做的基本上是暂停 GUI 线程或导致发生“未定义”的情况。

这里有几篇关于线程和 wxPython 的文章:

  • http://wiki.wxpython.org/LongRunningTasks http://wiki.wxpython.org/LongRunningTasks
  • http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/ http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你明白这个僵局吗? 的相关文章

随机推荐

  • 我们可以从oracle10g程序中执行unix命令吗

    unix机器上的oracle10g 我需要在程序中执行unix命令 我该怎么做 BEGIN DBMS SCHEDULER create job job name gt SHELL JOB repeat interval gt FREQ DA
  • NGINX 将路径作为变量发送给 PHP,除非路径是文件路径

    我想将所有路径传递给index php page path 例如 domain com a b c gt index php page a b c 因此这是我的 NGINX conf 文件 location P
  • 代理似乎被 Mechanize 忽略了?

    我正在使用 http 代理和 Mechanize 模块 我初始化 mechanize 对象并设置代理 如下所示 self br mechanize Browser self br set proxies http proxyAddress
  • HTML 表单操作 method="POST" 还是 method="post"? [复制]

    这个问题在这里已经有答案了 使用非大写的 post 或大写的 POST 有什么区别吗
  • 无法将自定义转换器添加到 log4j

    下列的here http logging apache org log4j 2 x manual extending html PatternConverters 我想延长log4j通过自定义转换器 将 shiro 用户名添加到日志中 这是
  • 链接影响不同元素的 jQuery 动画

    document ready function div1 fadeIn slow div2 delay 500 fadeIn slow div3 delay 2000 fadeIn slow div4 delay 8000 fadeIn s
  • Mediatr:减少 DI 对象的数量

    我有很多命令和查询 其中大多数需要相同的接口来完成不同的事情 是否有可能如何减少我的每个处理程序都需要的这种混乱 并且一遍又一遍地重复 public class GetCoinByIdQueryHandler IRequestHandler
  • 使用 SOAP,还是不使用 SOAP?就是那个问题

    我有 3g 手机协议栈的背景 现在我需要从 Android 平板电脑与服务器进行通信 我将对接口的两侧进行编码 更新 我应该说 从 Android 多个 slate 到本地服务器 多个 然后通过卫星到单个中央主服务器 现在我想我可能不会实施
  • 生成日期范围的数据,包括数据中不存在的日期

    这是我的表结构和数据 CREATE TABLE event EventID INT 11 NOT NULL AUTO INCREMENT EventDate DATETIME DEFAULT NULL Description VARCHAR
  • 使用projectile在.dir-locals中设置flycheck-clang-include-path

    尝试设置 Flycheck clang include path 而无需包含项目的完整路径 包括使用弹丸的目录 但我收到错误 所以这有效 nil company clang arguments home user Downloads pro
  • 使用 dlopen 动态加载共享库

    我正在尝试使用 dlopen 加载 TestCode so getNumber 是我想从 TestCode so 使用的函数 但是当我加载 so 时 我无法使用该功能 它给出了分段错误 示例程序 测试头 hpp ifndef HEADER
  • 使用 dlib 面部标志裁剪面部

    我正在尝试使用 dlib 识别的面部标志来裁剪面部 右眉毛造成了问题 眉毛是平的而不是沿着眉毛的弧线 我在这里做错了什么 from imutils import face utils import imutils import numpy
  • 在 Pig 中解析复杂的 JSON 字符串

    我想在 Pig 中解析一串复杂的 JSON 具体来说 我希望 Pig 将我的 JSON 数组理解为一个包 而不是单个字符数组 使用 JsonLoader 时 我可以通过指定架构轻松完成此操作 如下所示这个问题 https stackover
  • C#中复制大量数据的方法

    我正在使用以下方法将目录的内容复制到不同的目录 public void DirCopy string SourcePath string DestinationPath if Directory Exists DestinationPath
  • onpreviewframe byte[] 到 int[]

    在预览帧中 我得到 ImageFormat RGB 565 中的字节 现在我想将此 byte 转换为 int 以便我可以进行一些像素操作 我怎么能这么做呢 附 到目前为止 我是这样做的 但似乎还没有优化 public void onPrev
  • 获取日期格式/文化

    如何指定输入字符串的哪一部分是日期和月份 如果输入是01 10 2017 这可以读作2017 年 10 月 1 日 and 2017 年 1 月 10 日 两者都是正确的 我想明确表示01是日期并且10是月份 这样无论区域设置和时间格式如何
  • ngForIn 可以在 Angular 4 中使用吗?

    我正在尝试使用迭代对象的属性 ngFor但使用in 当我尝试这样做时 Controller selector sample controller template ul li b i b obj i li ul class SampleCo
  • HTML/CSS:如何为 tr 创建滚动条

    有人可以告诉我如何为内表创建滚动条吗 内表不显示在容器内 我将容器的背景涂成黄色 桌子本身是蓝色的 我想在表格内看到一个滚动条 Source http nopaste info e51385254e html http nopaste in
  • java中如何实现国际化

    我有一堂课叫Info 我有一堆static String其中描述的变量 public class Info public static stringOne Hello public static stringTwo world 我希望访问这
  • 你明白这个僵局吗?

    我的 GUI 使用 wxPython 在里面AppLogic类我有一个工作线程 它在这个类的方法中运行 这是GUI class class GUI wx app None main window None app logic None de