利用线程防止wxpython假死

前段时间我编写了一个工业控制的软件,在使用中一直存在一个问题,就是当软件检索设备时,因为这个功能执行的时间比较长,导致GUI界面假死,让用户分辨不清楚软件到底仍在执行,还是真的挂掉了。(虽然我设计了同步log显示,但是这个也同样假死了)

上午抽空学习了一下在wxpython中启用线程的方法,将GUI和功能的执行分开,果然程序运行起来杠杠滴。因为我那个软件的代码暂时不能公开,这里专门写个小程序,作为今天的笔记吧。程序截图如下:

wxpython-threading

代码解析如下:

time库用来执行定时函数,模拟需要长时间执行的功能。Publisher用来在线程间传输消息。

TestThread的__init__函数,定义线程实例化时就启动,run函数就是需要长时间执行的程序。
wx.CallAfter与Publisher().sendMessage用来向GUI发送消息。

这个就是GUI的主程序,__init__中使用Publisher().subscribe(self.updateDisplay, “update”)声明了获取线程消息以及显示的方法。

最后将窗口MyForm(None).Show()显示出来,程序就完成了。

作者: Leniy

Do not , for one repulse , give up the purpose that you resolved to effect .

本文著作版权归Leniy所有,并受法律保护。

转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。

CopyRight © 2006-2017 Leniy.org all rights reserved.

26 thoughts on “利用线程防止wxpython假死

  1. Glegoo

    这几天正好在用Python,我拿python写了计算模块,上面放了C#+WinForm的GUI,我估计这么奇葩的结构也就我这种非专业码农且啥玩意不会的人才会用…….

  2. X草元

    wxpython,百度学习了下。貌似现在这个什么PYTHON语言很火。可是看兼容性最终的程序不能在64位WIN下运行啊??

    • Leniy

      python是跨平台的,在64位的win下面一样可以运行的。

    • Leniy

      你实际操作下就知道了,py程序只要不调用某个系统的专有库,在任何系统下的运行效果都是一样的。

    • Leniy

      我写的一个工控软件,就同时在win7_64位、win7_32位、winXP_32位、Linux_32位下运行。已经稳定运行4个多月了。

    • Leniy

      这个是gui程序的基础。只不过我以前都是写没有窗口的单线程程序,所以才专门学习了下这个东东。

    • Leniy

      之前处理异常时,发现顶多等待1秒,就没考虑,结果实际使用中经常需要等待1分钟。

    • Leniy

      线程还好啦,就是相互的通讯麻烦些。还好wxpython直接提供了进程间通讯机制

发表评论

电子邮件地址不会被公开。 必填项已用*标注