2017-02-02 8 views
0

Итак, текстовый редактор tkinter!
Редактор, очевидно, должен иметь текстовые стили, которые необходимо изменить набранный текст для любого форматирования в настоящее время, используя теги. Но проблема в том, что имя тега должно измениться при изменении форматирования, иначе тег будет применен ко всему тексту. (Это была проблема, что я изо всех сил, чтобы определить, в течение некоторого времени)
Чтобы избежать этого, вам нужно будет много меток (как bold, both, calibri и т.д.), так что код будет выглядеть следующим образомtkinter - управление несколькими тегами

if style == 'bold': 
    tag_add('bold', 'insert -1c', 'insert') 
    tag_configure('bold', font=('Calibri', 12, 'bold')) 

if stlye == 'italic': 
    etc etc 

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

tag.add(currentstyle, 'insert -1c', 'insert') 
tag.config(currentstyle, font=(currentfont, currentsize, currentweight, currentslant)) 

Спасибо за вашу помощь

UPDATE
решен с немалым количеством помощи от Bryan

tagname = '{}-{}-{}-{}'.format(font, fontsize, weight, slant) 

textbox.tag_add(tagname, 'insert -1c', 'insert') 
textbox.tag_configure(tagname, font=(font, fontsize, weight, slant)) 

теперь каждая бирка имеет уникальное имя

ответ

1

Да, вам нужно создать уникальный тег для каждого используемого шрифта. На практике это не так уж плохо, потому что большинство документов используют только 3-4 варианта, или, возможно, худший вариант, возможно, десяток. Единственная реальная трудность заключается в том, что если вы хотите выделить полужирный и курсив, вам нужно создать жирный тег, курсив и ярлык курсивом.

Это ужасный код и делает невозможным использование разных шрифтов/размеров.

Это не делает невозможным, просто немного сложно. Ваш код на самом деле довольно близок к тому, как вы это сделаете.

Когда пользователь меняет стиль символа, вам нужно создать каноническую форму для имени стиля, объединив текущий стиль и любые новые атрибуты. Например, если символ в настоящий момент выделен жирным шрифтом 12 пунктов, и они меняют его на курсивную 14 точек, новый тег может быть «курсивом-12». Если они хотят сохранить смелый, это может быть «полужирным шрифтом-12». Затем вам нужно проверить, есть ли у вас тег этим именем и создать его, если вы этого не сделаете, затем удалить любой предыдущий тег шрифта и добавить новый тег шрифта.

Это действительно проблема только с шрифтами. Для других атрибутов, таких как цвета и границы, вы можете просто использовать все разные теги отдельно (например: если вы создаете тег для «background-blue» и «foreground-red», вы можете применить оба эти тега отдельно к тексту.

я приведу пример, который делает что-то похожее на это здесь: https://stackoverflow.com/a/3736494/7432

+0

думаю, вы должны думать за пределами коробки иногда, благодаря – EriktheRed

+0

@EriktheRed: Tkinter больше похож на магазин пиломатериалов, чем мебельный магазин вы. могут создавать действительно приятные интерфейсы с Tkinter, но вам иногда приходится выполнять работу самостоятельно. –

 Смежные вопросы

  • Нет связанных вопросов^_^