PyGTK TextBuffer 添加标签并读取文本

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)

如果我能得到像“测试文本”是“粗体”这样的输出,那就最好了。

谢谢你的帮助。

答案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() 方法来获取字符所具有的标签。

最后,更好的办法可能是在开始应用标签时将边界存储在某个列表中。

相关内容