2017-06-19 25 views
3

如果我使用25MB/190,000行文本文件並將其轉儲到文本小部件中,該過程可以快速完成,但是之後我仍然可以看到使用50%CPU的python.exe。文件越大,CPU使用率降至0%所用的時間就越長。當我開始將多個文件加載到不同的文本小部件中時,它們會立即加載到小部件中,但CPU保持在50%,並且GUI運行非常緩慢,直到它完成在後端執行的任何操作。有人可以向我解釋爲什麼CPU仍在使用中,以及爲什麼它會影響性能,如果文本已經在widget中?它需要做什麼?任何方式在這個?從文件中插入文本後的Tkinter CPU活動

from tkinter import * 


file = r"C:\path\to\large\file.txt" 

def doit(): 
    with open(file, 'r') as f: 
     txt.insert('end', ''.join(f)) 
     f.close() 
main = Tk() 

txt = Text(main) 
txt.grid(row=0) 

btn = Button(main, text="click here", command=doit) 
btn.grid(row=1, columnspan=2) 

main.mainloop() 

我想也許是因爲即時處理文件行,而不是將整個文件加載到RAM中。我試過readlines(),但我得到了相同的結果。

回答

4

最有可能的是它計算出換行符的位置,對於當前屏幕上可見區域的行。用你給出的數字,這些行的平均長度超過130個字符;如果他們中的一些已經大大超過了這一點,這就是Tkinter已知緩慢的情況。

您也許可以關閉自動換行(通過配置文本與wrap=NONE),這可能會要求您添加一個水平滾動條。如果這是不可接受的,那麼添加自己的換行符可能會有所幫助,如果在數據中插入它們有一些自然的地方。

請注意,''.join(f)是一個相當低效的方式來讀取整個文件成一個字符串 - 只需使用f.read()

+0

轉向文字包裝關閉轉了1分20秒到19秒。這將有助於TON。隨意分享任何其他想法。 – sidnical

+0

我使用筆記本來加載帶有很多不同文本文件的標籤。當加載它們的很多時候,它在GUI再次可用之前一直要花費很長時間。現在不到一分鐘。這一變化造成了一個荒謬的區別。 – sidnical

相關問題