wxPython StyledTextCtrl Шестнадцатеричное форматирование

Кто бы ни мог протянуть руку.

Я строю приложение с BoaConstructor в Python, который использует wx.STC.StyledTextCtrl. В этом styledtextctrl я выводю шестнадцатеричные данные с помощью функции hexdump Scapy. Добавляет номера строк, шестнадцатеричный дамп и символьный транскод. К сожалению, я не могу понять, как отформатировать этот текст в StyledTextCtrl, чтобы он отображался как обычный шестнадцатеричный редактор (см. Изображения здесь http://imgur.com/a/tqE02). Спасибо!

1 ответ

Решение

Поскольку вы сказали, что в других редакторах выходные данные выглядят нормально, я предполагаю, что проблема заключается в том, что шрифт использует переменную ширину пикселя для символов (например, если широкий символ, такой как "w", имеет ширину 15 пикселей, то более тонкий символ, такой как "i") может быть только 10 пикселей). В шрифте фиксированной ширины (иногда называемом шрифтом monowidth или шрифтом текста пишущей машинки) все символы имеют одинаковую ширину.

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

Вам нужно найти шрифт, который IsFixedWidth() возвращает True затем настройте свой STC на использование этого шрифта. Обычно вы устанавливаете это с помощью метода SetFont(), но я случайно знаю, что STC предпочитают использовать свои собственные методы. Я нашел этот метод StyleSetFont(), специфичный для STC, так что это, вероятно, лучшая ставка.

Что касается выбора шрифта, вот хороший учебник о том, как шрифты работают в wxpython. Автор на самом деле является активным участником здесь. Специально найдите в этой статье его пример "виджета wx.FontEnumerator". Это должно позволить вам найти шрифты фиксированной ширины и просмотреть их, чтобы увидеть, нравятся ли они вам. Для быстрого и грязного решения этот пост на форуме говорит о wx.TELETYPE флаг, который гарантирует фиксированную ширину, и эти примеры кода должны дать вам некоторое представление о том, как его использовать.

Удачи!

----РЕДАКТИРОВАТЬ----
Я не очень знаком с STC, но я помню из предыдущего ответа, который я дал на вопрос о STC, который вам, возможно, понадобится StyleClearAll() после настройки вашего шрифта. См. Раздел РЕДАКТИРОВАНИЯ этого ответа для получения дополнительной информации о том, почему это может потребоваться.

Другие вопросы по тегам