отображение большой суммы форматированного текста в Python

У меня есть два больших файла идентичного размера. Каждый - простой текст ASCII, и другой наложение, на которое наносят цветную маркировку, один байт за текстовый символ в соответствующем файле.

Эти файлы могут быть большими - до 2,5 МБ; возможно существенно больше, возможно, более чем 100 МБ позже.

Я хочу отобразиться, текст является средством просмотра текста с возможностью прокрутки, с помощью второго файла в качестве наложения. Выглядеть примерно так:

Окно Tkinter Text с теговым текстом для цветов http://img713.imageshack.us/img713/2584/statsviewer01d.png

Таким образом, я сделал простое tkinter текстовое окно виджета в Python с полосой прокрутки и таким.

Мой код похож на это:

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()

Однако я сталкиваюсь с неприятными проблемами производительности:

  1. загрузка текста

    • если я просто использую textwidget.text = textfile.read (), он загружается немедленно, даже для большого файла; но затем проблема наносит цветную маркировку на него. (см. код выше). Добавить теги, один символ за один раз, кажется, что я вынуждаю это взять алгоритм живописца; к тому времени, когда файл составляет приблизительно 300 КБ в размере, я бросаю ожидать его для загрузки
    • если я считал следующий символ из текстового файла и colourfile, и добавляю правильно теговый символ, он берет навсегда; файл, больше, чем приблизительно 200 КБ и я бросаю ожидать его для загрузки
  2. Прокрутка. Если это много форматирования, видимого в текущем окне, это идет очень медленно

Если бы я приближался к этой проблеме в, скажем, Dephi или wxWidgets то или что бы то ни было, я имел бы пользовательски оттянутый контроль.

Каков самый простой путь в Python и Tkinter?

6
задан Cœur 13 December 2017 в 14:02
поделиться

1 ответ

Я не совсем ясно, что вы спрашиваете (100% прозрачность означает, что что-то невидимое, и невидимый текст, как правило, не отличная идея), но в целом:

  1. Свойство CSS непрозрачность применяется ко всему элементу, а не только к его тексту. Таким образом, если у вас есть этот HTML:

     < div class = «opacity-50» >
    Это див с фоновым цветом и 50% непрозрачностью
    

И этот CSS:

 .opacity-50 {
фон: # ccc;
цвет: # 000;
непрозрачность: 0,5;
}

Тогда и фон, и текст будут иметь 50% непрозрачность.

  • rgba цветовые значения позволяют задавать полупрозрачные цвета. Итак, если у вас есть этот HTML:

     < div class = «text-opacity-50» >
    Это див с полупрозрачным текстом
    
  • И этот CSS:

     .text-opacity-50 {
    фон: # ccc;
    цвет: rgba (0,0,0,0,5);
    }
    

    Тогда только его текст будет иметь 50% непрозрачность.

    Я думаю, что rgba цветовые значения поддерживаются немногим меньшим количеством просмотров, чем непрозрачность .

    -121--3565922-

    Вы хотите sqlreset :

    % python manage.py help sqlreset
    Usage: manage.py sqlreset [options] <appname appname ...>
    
    Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s).
    
    Options:
      -v VERBOSITY, --verbosity=VERBOSITY
                            Verbosity level; 0=minimal output, 1=normal output,
                            2=all output
      --settings=SETTINGS   The Python path to a settings module, e.g.
                            "myproject.settings.main". If this isn't provided, the
                            DJANGO_SETTINGS_MODULE environment variable will be
                            used.
      --pythonpath=PYTHONPATH
                            A directory to add to the Python path, e.g.
                            "/home/djangoprojects/myproject".
      --traceback           Print traceback on exception
      --version             show program's version number and exit
      -h, --help            show this help message and exit
    

    Как и при изменении модели, Django не будет автоматически делать это для вас. Команда будет выводиться только для копирования и вставки.

    -121--1684969-

    Как насчет использования прокручиваемого холста и только когда-либо рисования текста/тепловой карты, который открыт для пользователя? Это должно дать вам быструю начальную рисовку и быструю перерисовку, когда вещи перемещаются, независимо от размера файла.

    Если вы хотите больше скорости и больше управления, то вам потребуется какой-то виртуальный холст, где на самом деле существует только область на дисплее и область вокруг него, все остальное рисуется только в том случае, когда на него ссылаются. Я не думаю, что TkInter дает вам такой большой контроль, хотя такие вещи, как Widget Construction Kit (WCK) должны делать.

    3
    ответ дан 17 December 2019 в 18:15
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: