Как сделать окно вывода логов в wx.TextCtrl — wxPython #55

автор

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

Список всех урок: Полный курс уроков по wxPython

Мы собрали ТОП Книг для Python программиста которые помогут быстро изучить язык программирования Python. Список книг: Книги по Python

Методом изучения документации, я наткнулся на интересный метод wx.TextCtrl.AppendText(msg), который добавляет в окно принятую строку msg к уже имеющимся.

Возьмем frame из статьи выше и избавимся от класса CustomConsoleHandler и и что с ним связано.

Добавим метод, который будет выводить в наше окно логов какой-то текст по нажатию кнопки и не забываем, что после message стоит добавить \n для переноса новой строки логов и итого получаем:

Инвертировать лог, можно добавив чекбокс wx.CheckBox и создав список, в котором можно хранить все сообщения. Однако есть нюансы, перед каждым вызовом метода, необходимо очищать TextCtrl иначе, сообщения будут дублироваться и спамить. а также после цикла нужно переместить курсор вверх на последнее сообщение инвертированного лога, тут поможет wx.TextCtrl.SetInsertionPoint(0) который помещает курсор TextCtrl в нужное положение.

Мы собрали ТОП Книг для Python программиста которые помогут быстро изучить язык программирования Python. Список книг: Книги по Python

Для инверсии проверяем флажок при помощи метода IsChecked и если он True, то делаем reversed нашего списка с сообщениями, таким образом вывод будет инвертирован.

Также можно окрасить вывод в нужный цвет, если в лог упало событие определенного вида, для демонстрации добавим модуль рандом и создадим список событий которые будут генерировать наш лог. дополнительно понадобится метод, который будет определять цвет лога. Обратите внимание, что в данной реализации окрашиваться будет весь вывод, а не конкретная строка, но это можно исправить переделав вывод, это в другой раз разберем.

НЮАНС

Если логи будут приходить не из потока, а из процесса который крутится на бэкенде или в самом ui, то сама программа может зависнуть и ждать ответа. Этот метод подойдет для логирования внутренних методов самого ui или логи вынесенные в отдельный поток.

Мы собрали ТОП Книг для Python программиста которые помогут быстро изучить язык программирования Python. Список книг: Книги по Python

ИТОГ

Для вывода небольшого кол-ва логов, можно использовать AppendText, иначе стоит подумать насчет хендлера, так как вышеописанный способ не самый оптимальный. Вывод в окне можно окрасить в любой цвет, можно использовать как цвета от самого wx (wx.RED, wx.GREEN и т.д.) но и множества RGB (255, 0, 0) — красный, (0, 100, 0) — зеленый.

Благодарности

Данная статья была написана нашим уважаемым читателем Павел Вирекс. Спасибо активным читателям которые делятся своими знаниями со всеми.

Вам может быть интересно

Scroll Up

Подпишись на канал!

Новые видеоуроки, книги и полезные статьи для python программистов!