我有一个非常奇怪的问题,我一直试图解决一段时间而没有任何运气。
我的程序由一个主框架,一个菜单栏组成,菜单栏下面是一个只读模式的文本控件,在状态栏下面。
在我的主要课程中我有许多功能,下面列出了一个。在菜单事件上,调用与该菜单事件相关联的功能。下面的函数应该打印一个文件的名称,该文件即将被处理到textctrl,然后该文件应该被处理,然后它移动到下一个要打印到textctrl的文件然后处理该文件等...
而是textctrl框&在处理所有文件时,状态栏完全消失。处理完成后,重新显示并打印所有文本。
我不确定它为什么会消失。我已经通过许多不同的方式在函数中移动代码来尝试&解决问题但无济于事。
非常感谢任何帮助。
--- --- EDIT 代码已删除
答案 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/