Python GTK+ 3 教程中有一个很好的例子,TextView Example
但是为了使重要部分更清楚(希望如此),正如您猜想的那样,您必须使用文本标签,您必须在 TextBuffer 中定义它们,而不是在 TextView 中,例如
self.tag_bold = self.textbuffer.create_tag("bold", weight=Pango.Weight.BOLD)
然后您可以将标签应用到要加粗的文本部分,为此,您必须向 TextBuffer.apply_tag() 方法提供该部分文本的边界(开始,结束),喜欢:
start, end = self.textbuffer.get_selection_bounds()
self.textbuffer.apply_tag(self.tag_bold, start, end)
你会准备好的。
在上面的示例中,边界由用户选择的文本部分获取,但当然,如果您正在显示只读文本,您可以在代码中自己提供边界,请查看 TextBuffer 文档。
您还可以通过以下方法添加具有有效 pango 标记的文本:
self.textbuffer.insert_markup(iter, markup)
如果该方法可以返回指向插入文本末尾的新迭代器会很好,这将使生活变得更容易,但该方法来自简单的内省,它需要一个覆盖才能像那样行事。
请参阅下面的最小示例(您可以使它变得更好):
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango
class TextViewWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="TextView Example")
self.set_default_size(-1, 350)
self.grid = Gtk.Grid()
self.add(self.grid)
self.create_textview()
def create_textview(self):
scrolledwindow = Gtk.ScrolledWindow()
scrolledwindow.set_hexpand(True)
scrolledwindow.set_vexpand(True)
self.grid.attach(scrolledwindow, 0, 1, 3, 1)
self.textview = Gtk.TextView()
self.textbuffer = self.textview.get_buffer()
start_iter = self.textbuffer.get_start_iter()
self.textbuffer.insert(start_iter, "This is some text ")
self.textbuffer.insert_markup(self.textbuffer.get_end_iter(), "<b>and some bold text</b>", -1)
scrolledwindow.add(self.textview)
win = TextViewWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()