Ho due grandi file di dimensioni identiche. Uno è testo in chiaro ASCII e l'altro è una sovrapposizione con codice colore, un byte per carattere di testo nel file corrispondente.Visualizzazione di una grande quantità di testo formattato in Python
Questi file possono essere grandi - fino a 2,5 MB; probabilmente molto di più, forse oltre 100 MB più tardi.
Desidero visualizzare il testo è un visualizzatore di testo scorrevole, utilizzando il secondo file come overlay. Guardando qualcosa di simile:
Così ho fatto una semplice finestra widget di tkinter testo in Python con barra di scorrimento e così via.
Il mio codice è simile al seguente:
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()
Tuttavia, ho incontrato problemi di prestazioni orribili:
caricano il testo
- se io semplicemente uso textwidget.text = textfile.read() si carica istantaneamente, anche per il file di grandi dimensioni; ma poi il problema è codificato a colori. (vedere il codice sopra). Per aggiungere i tag, un personaggio alla volta, sembra che lo imponga di prendere un painter algorithm; nel momento in cui il file ha una dimensione di circa 300 KB, rinuncio ad aspettare che carichi
- se leggo il prossimo carattere dal file di testo e il file di colori e aggiungo un carattere opportunamente etichettato, ci vuole per sempre; un file più grande di circa 200 KB e mi arrendo in attesa del caricamento
Scorrimento. Se questa formattazione molto visibile nella finestra corrente, va molto lentamente
Se mi stavo avvicinando a questo problema, diciamo, Dephi o wxWidgets o qualsiasi altra cosa, avrei un controllo personalizzato-disegnato.
Qual è il modo più diretto in Python e Tkinter?
considerare l'interruzione utilizzando Tkinter. Non so se ciò che chiedi è possibile, ma Tkinter ha molti limiti ed è generalmente troppo complesso con cui lavorare. – nosklo
@nosklo: Se si dispone di un'alternativa suggerita, si prega di postarla come risposta in modo da poterla revocare. –
@nosklo: quali sono le alternative? Portatile, gratuito, ben documentato, facile, ...? – Will