Tengo dos archivos grandes de tamaño idéntico. Uno es texto plano ASCII, y el otro es una superposición codificada por colores, un byte por carácter de texto en el archivo correspondiente.que muestra una gran cantidad de texto formateado en Python
Estos archivos pueden ser grandes: hasta 2.5 MB; posiblemente mucho más, tal vez más de 100 MB más tarde.
Quiero mostrar el texto es un visor de texto desplazable, utilizando el segundo archivo como superposición. Buscando algo como esto:
Hice, pues, un simple widget de la ventana tkinter texto en Python con la barra de desplazamiento y tal.
Mi código es el siguiente:
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()
Sin embargo, me encuentro con problemas de rendimiento horribles:
que cargan el texto
- si simplemente uso textwidget.text = textfile.read() se carga instantáneamente, incluso para el archivo grande; pero luego el problema es codificarlo con colores. (ver el código anterior). Para agregar las etiquetas, un carácter a la vez, parece forzarlo a tomar un painter algorithm; en el momento en que el archivo tiene un tamaño de aproximadamente 300 KB, me doy por vencido esperando a que cargue
- si leo el siguiente carácter del archivo de texto y el archivo de color y añado un carácter correctamente etiquetado, lleva una eternidad; un archivo de más de 200 KB y renuncio a la espera de que cargue
Desplazamiento. Si esta cantidad de formateo visible en la ventana actual, se va muy lentamente
si me acercaba a este problema, digamos, en Dephi o wxWidgets o lo que sea, tendría un control personalizado de tracción animal.
¿Cuál es la forma más directa en Python y Tkinter?
considere dejar de usar Tkinter. No sé si lo que preguntas es posible, pero Tkinter tiene muchas limitaciones y generalmente es demasiado complejo para trabajar. – nosklo
@nosklo: si tiene una alternativa sugerida, publíquela como respuesta para que podamos votarla. –
@nosklo: ¿cuáles son las alternativas? Portátil, gratis, bien documentado, fácil, ...? – Will