我有一个非常奇怪的问题,我已经尝试解决了一段时间,但没有任何运气。
我的程序由一个主框架、一个菜单栏组成,菜单栏下面有一个只读模式的文本控件,下面是一个状态栏。
在我的主类中,我有许多函数,下面列出了其中一个。在菜单事件上,调用与该菜单事件相关联的函数。下面的函数应该将要处理的文件的名称打印到textctrl,然后该文件应该被处理,然后它移动到下一个要打印的文件到textctll,然后处理该文件等
取而代之的是textctrl框&在处理所有文件时,状态栏完全消失。处理完成后,它会重新出现,并打印所有文本。
我不知道它为什么会消失。我已经用许多不同的方式在函数中移动了代码,以尝试&解决问题,但无济于事。
任何帮助都将不胜感激。
---编辑---代码已删除
听起来发生的事情是您的进程忙于工作,因此它不会将任何周期交给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。帧类别:
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/