wxpython textctrl在处理数据时消失

时间:2013-08-06 18:18:31

标签: python wxpython textctrl

我有一个非常奇怪的问题,我一直试图解决一段时间而没有任何运气。

我的程序由一个主框架,一个菜单栏组成,菜单栏下面是一个只读模式的文本控件,在状态栏下面。

在我的主要课程中我有许多功能,下面列出了一个。在菜单事件上,调用与该菜单事件相关联的功能。下面的函数应该打印一个文件的名称,该文件即将被处理到textctrl,然后该文件应该被处理,然后它移动到下一个要打印到textctrl的文件然后处理该文件等...

而是textctrl框&在处理所有文件时,状态栏完全消失。处理完成后,重新显示并打印所有文本。

我不确定它为什么会消失。我已经通过许多不同的方式在函数中移动代码来尝试&解决问题但无济于事。

非常感谢任何帮助。

--- --- EDIT 代码已删除

1 个答案:

答案 0 :(得分:1)

听起来正在发生的事情是您的流程忙于工作,因此它不会放弃任何循环到GUI进行刷新。

您需要做的是将繁忙的进程移到自己的线程。

您需要执行类似

的操作
import threading

class Encrypt(threading.Thread):
    def __init__(self, threadNum, asset, window):
        threading.Thread.__init__(self)
        self.threadNum = threadNum
        self.window = window
        self.signal = True

    def run(self):
        while self.signal:
            do_stuff_that_is_cpu_intensive
            for self.path in self.paths: #etc..

并在您的主要wx.Frame类中:

class Frame(wx.Frame):
def __init__(self, *args, **kwargs):
    super(Frame, self).__init__(*args, **kwargs)

    self.InitUI()
    self.Show()
    self.count = 0 # simple thread counter. 
    self.threads = [] # this lets you iterate over your threads if you ever need to

def OnEncrypt(self):
    self.count += 1
    thread = Encrypt(self.count, asset, self)
    self.threads.append(thread)
    thread.start()

请在此处查看更详细的方法和说明:http://www.blog.pythonlibrary.org/2010/05/22/wxpython-and-threads/