正如主题中所述,我在其中添加了 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)
如果我能得到像“测试文本”是“粗体”这样的输出,那就最好了。
谢谢你的帮助。
答案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 函数仍然有效,尽管可能需要进行一些调整。您可以获取文档这里用于 pygtk 中的 gtk.textiter。
旧答案: 不确定这是否是最佳方法,但我发现您可以遍历每个字符(如果您愿意的话,也许是每个单词)并测试该字符是否具有您想要的标签:这是一个简单的函数来执行此操作:
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
您还可以使用 Gtk.TextIter get_tags() 方法来获取字符所具有的标签。
最后,更好的办法可能是在开始应用标签时将边界存储在某个列表中。