我對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命令的輸出類似。一旦開始印刷,它就可以正常工作,這只是令人煩惱的延遲。 –