wxPython RichTextCtrl намного медленнее, чем tkInter Text?

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

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

Реализация tkInter использует объект Tkinter.Text, а для применения цветов к словам используются теги (настроенные с помощью метода Tkinter.Text.tag_config и передающие их в Tkinter.Text.insert), а измеренное время вывода около 400 слов разного цвета составляет ‹ 0,02 с.

В реализации wxPython используется wx.richtext.RichTextCtrl, а для применения цветов к словам используется wx.richtext.RichTextCtrl.BeginTextColour, а затем wx.richtext.RichTextCtrl.AppendText; производительность смехотворна, требуется около 1,4 с, чтобы выполнить ту же работу, которая потребовала всего 0,02 с для порта tkInter.

Является ли это внутренней проблемой виджета RichTextCtrl, привязок wxPython или есть способ ускорить его?

Спасибо!


person fortran    schedule 29.06.2009    source источник
comment
На какой платформе вы работаете? Я заметил, что wxPython в Linux работает намного медленнее, чем в Windows.   -  person balpha    schedule 29.06.2009
comment
Linux... Я мог бы попробовать его на Windows, чтобы увидеть, станет ли он лучше.   -  person fortran    schedule 29.06.2009
comment
Я протестировал его на Windows и действительно быстрее (сейчас это занимает примерно половину времени, около 0,6 с), но все равно почти в тридцать раз медленнее, чем версия tkInter :-s   -  person fortran    schedule 29.06.2009
comment
Попробуйте опубликовать сообщение в группе wxPython-users, чтобы узнать, есть ли у Робин какие-либо идеи. Бьюсь об заклад, гуру там смогут получить ваш код быстрее. groups.google.com/group/wxPython-users   -  person DrBloodmoney    schedule 29.06.2009
comment
Пробовали ли вы использовать Freeze() и Thaw() для обновления дисплея только после добавления цветного текста?   -  person mghie    schedule 30.06.2009
comment
вы опубликуете пример кода, чтобы мы могли его настроить и посмотреть   -  person Anurag Uniyal    schedule 01.07.2009
comment
@mghie Спасибо, я не знал об этих методах, которые решили проблему! :-)   -  person fortran    schedule 01.07.2009


Ответы (2)


Я копирую сюда комментарий, который решил проблему:

Пробовали ли вы использовать Freeze() и Thaw() для обновления дисплея только после добавления цветного текста? — мгие

person fortran    schedule 27.07.2009

Это немного избегает вопроса, но не могли бы вы вместо этого использовать wxStyledTextCtrl?

person Gareth Simpson    schedule 01.07.2009