Установите выделение выделенного текста с помощью тегов - PullRequest
4 голосов
/ 28 марта 2012

Я работал над созданием простого текстового редактора и экспериментировал с тегами. Я был в состоянии создать оправдание с помощью тегов. Теперь я добавляю жирный вариант.

Моя проблема в том, что я не могу найти много примеров использования тега "sel", тега, используемого при текущем выборе.

Всякий раз, когда я использую тег SEL, текст выделяется полужирным шрифтом только до тех пор, пока он выделен, когда он становится невыделенным, он возвращается к своему старому тонкому шрифту.

Это небольшая часть моего кода:

def Bold(self, body, Just, Line, selected font):
    bold font = tkFont.Font(family=selectedfont, weight="bold")
    selected font = boldfont
    body.tag_config("sel",font=selectedfont)
    body.tag_add("sel", 1.0,END)

При нажатии кнопки Bold вызывается предыдущая функция. Прямо сейчас у меня установлен body.tag_add("sel", 1.0, END) с 1.0 на END, потому что я не знаю, как получить выбранный домен. Я пробовал <<Selection>>, но после долгих экспериментов мне это не помогло.

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Вам понадобится только tag_add() внутри вашей функции:

import Tkinter as tk

def make_bold():
    aText.tag_add("bt", "sel.first", "sel.last")

lord = tk.Tk()

aText = tk.Text(lord, font=("Georgia", "12"))
aText.grid()

aButton = tk.Button(lord, text="bold", command=make_bold)
aButton.grid()

aText.tag_config("bt", font=("Georgia", "12", "bold"))

lord.mainloop()

Я только что натолкнулся на довольно образовательный пример не кем иным, как Брайаном Окли,
на совершенно не связанный поиск!

Вот краткий пример более динамичной альтернативы:

import Tkinter as tk
import tkFont

def make_bold():
    current_tags = aText.tag_names("sel.first")
    if "bt" in current_tags:
        aText.tag_remove("bt", "sel.first", "sel.last")
    else:
        aText.tag_add("bt", "sel.first", "sel.last")


lord = tk.Tk()

aText = tk.Text(lord, font=("Georgia", "12"))
aText.grid()

aButton = tk.Button(lord, text="bold", command=make_bold)
aButton.grid()

bold_font = tkFont.Font(aText, aText.cget("font"))
bold_font.configure(weight="bold")
aText.tag_configure("bt", font=bold_font)

lord.mainloop()
1 голос
/ 28 марта 2012

Атрибуты тега принадлежат тегу, а не тексту.Таким образом, когда вы выделяете что-то, а затем применяете атрибуты к тегу "sel", это влияет только на текст с тегом "sel".При удалении тега (без выделения) атрибуты возвращаются к значениям по умолчанию (или любым другим тегам, которые могут присутствовать).

Чтобы сделать текст жирным, необходимо создать тег с атрибутом boldназначьте этот тег тексту.Пока текст имеет этот тег, он будет иметь атрибуты этого тега.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...