У меня есть TextView и TextBuffer, связанный с ним.
Когда пользователь нажимает Ctrl + b, я бы хотел, чтобы текст начинал печататься жирным шрифтом, пока пользователь снова не нажмет Ctrl + b.
Я пробовал свои собственные методы, которые не работали, а затем я нашел это сообщение в списке рассылки: http://www.daa.com.au/pipermail/pygtk/2009-April/016951.html
Та же проблема, что и у меня, и решение, которое кто-то дал, -
Ваше приложение должно будет обрабатывать бухгалтерию, необходимую для управления тегами в TextBuffer.Когда текст вставляется в курсор, ваше приложение должно поймать сигнал, указывающий, что текст вставляется, а затем применить необходимые теги к вставленному тексту.Я думаю, что это можно сделать, перехватив сигнал «insert-text» в TextBuffer (используя connect_after (), чтобы убедиться, что текст уже вставлен), а затем применив теги к тексту в обратном вызове.
Так что я попытался это.Это мой textbuffer.py
import gtk
import pango
class TextBuffer(gtk.TextBuffer):
def __init__(self):
gtk.TextBuffer.__init__(self)
self.connect_after('insert-text', self.text_inserted)
# A list to hold our active tags
self.tags_on = []
# Our Bold tag.
self.tag_bold = self.create_tag("bold", weight=pango.WEIGHT_BOLD)
def get_iter_position(self):
return self.get_iter_at_mark(self.get_insert())
def make_bold(self, text):
''' add "bold" to our active tags list '''
self.tags_on.append('bold')
def text_inserted(self, buffer, iter, text, length):
# A text was inserted in the buffer. If there are ny tags in self.tags_on, apply them
if self.tags_on:
print self.get_iter_position()
# This sets the iter back N characters
iter.backward_chars(length)
# And this applies tag from iter to end of buffer
self.apply_tag_by_name('bold', self.get_iter_position(), self.get_end_iter())
print self.get_iter_position()
метод make_bold () вызывается из основного скрипта всякий раз, когда кто-то нажимает Ctrl + b.
Теоретически, это именно то, что говорится в справке по почте.сделать.Но не работает.Текст не отображается жирным шрифтом при вводе текста.Если я нажму стрелку влево и переместу курсор назад, а затем наберу символ, то символы справа от курсора будут выделены жирным шрифтом.
Как мне выполнить эту задачу?
Кроме того, может ликто-нибудь добавить тег «textbuffer» к этому?Я не могу создать новые теги и чувствую, что этот тег более точен, чем textview