PyGTK TextBuffer добавление тегов и чтение текста

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

Вот часть кода:

    self.textview = Gtk.TextView()
    self.buffer = self.textview.get_buffer()
    self.scrolledwindow.add(self.textview)
    self.textview.show()

    self.tag_bold = self.buffer.create_tag("bold", weight=Pango.Weight.BOLD)

Было бы лучше, если бы я мог получить вывод типа «тестовый текст» «жирный».

Спасибо за любую помощь.

2
задан 26 March 2013 в 03:17

1 ответ

РЕДАКТИРОВАТЬ Вот правильная функция для использования: Gtk.TextIter.forward_to_tag_toggle()

вот пример, который генерирует список всех жирных слов:

    start = self.textbuffer.get_start_iter()
    bolded=[]
    while start.forward_to_tag_toggle(self.tag_bold):
        begin=start.copy()
        start.forward_to_tag_toggle(self.tag_bold)
        bolded.append(self.textbuffer.get_text(begin,start,False))
    print bolded

Пока вы используя pygi (не pyGTK; обратите внимание на прописные Gtk в ваших функциях), многие из функций pyGTK все еще действуют, хотя могут потребовать некоторой настройки. Вы можете получить документацию здесь для gtk.textiter в pygtk.

СТАРЫЙ ОТВЕТ: Не уверен, что это оптимальный путь, но я обнаружил, что вы можете перебирать каждый символ (может быть, каждое слово, если хотите) и проверять, есть ли у символа нужный тег: Вот простая функция для этого:

    start = self.textbuffer.get_start_iter()
    plus = self.textbuffer.get_start_iter()
    bolded=''
    while plus.forward_char():
        if start.has_tag(self.tag_bold):
            bolded=bolded+(start.get_text(plus))
        start.forward_char()
    print bolded

вы также можете использовать метод get_tags () Gtk.TextIter, чтобы получить теги, которые есть у символа.

Наконец, что может работать лучше, это сохранять границы в каком-то списке, когда вы применяете теги для начала.

0
ответ дан 26 March 2013 в 03:17

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

Похожие вопросы: