我有兩個大的相同大小的文件。一個是ASCII純文本,另一個是彩色編碼疊加層,相應文件中每個文本字符一個字節。在Python中顯示大量的格式化文本
這些文件可以很大 - 高達2.5 MB;可能會更多,也許超過100MB以後。
我想顯示的文本是一個可滾動的文本查看器,使用第二個文件作爲覆蓋。看起來像這樣:
所以我在Python做了一個簡單的Tkinter文本小窗口,滾動條和等。
我的代碼如下所示:
hottest = 0
for heat in heatmap:
hottest = max(hottest,ord(heat))
hottest += 1
for heat in xrange(0,hottest):
factor = int((float(heat)/float(hottest))*100.0)
# an observation; tkinter seems to normalise custom colours
# to nearest in it's palette, which means I can't use custom
# gradients of red; if anyone knows how to use subtle custom colours?
bgcolour = "gray%d" % (100-factor)
fgcolour = "gray%d" % factor
text.tag_config("n%d"%heat,background=bgcolour,foreground=fgcolour)
text.insert("1.0",f.read())
ofs = 0
for heat in heatmap:
if 0 != ord(heat):
coord_start = "1.0 + %d chars"%ofs
coord_stop = "1.0 + %d chars"%(ofs+1)
text.tag_add("n%d"%ord(heat),coord_start,coord_stop)
ofs += 1
text.config(state=DISABLED)
text.focus()
不過,我遇到可怕的性能問題:
加載文本
- 如果我只是使用textwidget.text = textfile.read()會立即加載,即使是大文件也是如此。但是接下來的問題是對它進行顏色編碼。 (見上面的代碼)。要添加標籤,一次一個字符,似乎我強迫它採取painter algorithm;通過檔約300KB大小的時候,我放棄等待它加載
- ,如果我讀文本文件和colourfile下一個字符,並追加一個正確標記字符,它永遠;一個大於200KB的文件,我放棄等待它加載
滾動。如果這麼多當前窗口格式可見,它會非常緩慢
如果我逼近,比如,Delphi的或wxWidgets的或什麼這個問題,我有一個自定義繪製控件。
什麼是Python和Tkinter最直接的方式?
考慮停止使用Tkinter。我不知道你問的是否可能,但Tkinter有很多限制,並且通常過於複雜。 – nosklo 2010-02-17 10:56:06
@nosklo:如果您有其他建議的替代方案,請將其作爲答案發布,以便我們可以對其進行修改。 – 2010-02-17 10:57:09
@nosklo:有什麼選擇?便攜式,免費的,有據可查的,容易的,...? – Will 2010-02-17 11:12:48