0

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

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

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

相反,在处理所有文件时,textctrl 框和状态栏完全消失。处理完成后,它会重新出现,所有文本都打印到它上面。

我不确定它为什么会消失。我以多种不同的方式在函数内移动了代码以尝试解决问题,但无济于事。

任何帮助将非常感激。

---编辑---代码已删除

4

1 回答 1

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/

于 2013-08-06T18:24:52.260 回答