Как и в теме, к ней добавлены 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)
Было бы лучше, если бы я мог получить вывод типа «тестовый текст» «жирный».
Спасибо за любую помощь.
РЕДАКТИРОВАТЬ Вот правильная функция для использования: 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, чтобы получить теги, которые есть у символа.
Наконец, что может работать лучше, это сохранять границы в каком-то списке, когда вы применяете теги для начала.