fbpx

Как сделать окно вывода логов в 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