我对wxpython的textctrl和线程有任何问题。希望在解决这个问题上有任何帮助。wxpython线程文本控件延迟
我的程序处理文件,当每个文件被处理时,它在文本控件中被列为完成。当只使用几个文件时,textctrl会自动响应并立即显示,并且不会消失。即使这些文件很大。对700mb文件和文本控件进行了测试,效果很好。
在许多文件上工作时出现问题,比如说20+。在这种情况下,textctrl会消失6或7秒,然后重新出现并正常工作。
我已经尝试了正常的线程,守护进程线程等。还尝试使用.join()这使事情变得更糟。我想知道这是否仅仅是因为我的程序是处理器密集型的,或者我只是做错了什么。
我的线程代码如下。到目前为止,这是迄今为止最快的方法,对我的目的来说还不够好。在此先感谢克林顿。
def Worker(self, e, _file):
match = ''
with open(_file, 'r') as f:
data = f.read()
for char in data:
if char in self.key:
match += chr(self.key.index(char))
open(_file, 'w').close()
with open(_file, 'w') as f:
f.write(match)
wx.CallAfter(self.ListFilesEncrypt, e, _file)
if __name__ == '__main__':
for _file in self.file2process:
self.filenum += 1
Thread(target=self.Worker, args=(e, _file,)).start()
你如何从线程更新文本控件?如果你直接调用文本控件,那么你有一个问题 –
你是说你正在创建多个线程,可以一次更新文本控件? –
说实话,不确定是python和编程的真正新手。上面的代码可以工作,但是当选择很多文件进行处理时,textctrl将消失6秒钟然后重新出现。一旦它重新出现,它就会像它应该做的那样工作。当每个文件都被处理后,它会被打印到文本控件中。所以textctrl输出与linux ls命令的输出类似。一旦开始印刷,它就可以正常工作,这只是令人烦恼的延迟。 –