wxPython异步调用实现

标题不一定对,

最近遇到了个问题,利用wxPython和boa画了个GUI,通过该GUi去执行一个花蛮长时间才能做完的应用,结果UI就hang住了。

这问题和我以前用C#实现的取Windows控件属性遇到的问题类似,反正就是需要用过异步调用的办法来解决这个问题


在借鉴了一些代码片段之后,我也改出了异步的调用,代码片段如下


#Boa:Frame:Frame1

import wx
import os
import subprocess
from threading import Thread
from wx.lib.pubsub import Publisher

def create(parent):
    return Frame1(parent)

[wxID_FRAME1, wxID_FRAME1BUTTON1, wxID_FRAME1CHECKBOX1, wxID_FRAME1CHECKBOX2,
 wxID_FRAME1CHECKBOX3, wxID_FRAME1CHECKBOX4, wxID_FRAME1CHECKBOX5,
 wxID_FRAME1CHECKBOX6, wxID_FRAME1CLOSEB, wxID_FRAME1PANEL1,
 wxID_FRAME1STATICTEXT1, wxID_FRAME1STATICTEXT2, wxID_FRAME1TEXTCTRL1,
 wxID_FRAME1TEXTCTRL2,
] = [wx.NewId() for _init_ctrls in range(14)]


########################################################################
class TestThread(Thread):
    """Test Worker Thread Class."""

    #----------------------------------------------------------------------
    def __init__(self,command):
        """Init Worker Thread Class."""
        Thread.__init__(self)
        self.command = command
        self.start()    # start the thread

    #----------------------------------------------------------------------
    def run(self):
        """Run Worker Thread."""
        # This is the code executing in the new thread.
        self.data = subprocess.Popen((self.command),stdout = subprocess.PIPE)
        self.logg = self.data.stdout.read()
        self.fd = open('c:\\test\\log.txt','a+')
        self.fd.write(self.logg)
        self.fd.close()
        wx.CallAfter(Publisher().sendMessage, "update", "Test Finished!")
    #---------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值