В учебнике Python GTK+ 3 есть хороший пример, TextView Пример
Но чтобы прояснить (надеюсь) важные части, как вы уже догадались, вам нужно использовать текстовые теги, вы должны определить их в 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.
Вы также можете добавить текст с валидной панго-разметкой методом:
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()
04.01.2017
Gtk.TextBuffer
, то я просто не знаю, как разместитьGtk.TextIter
в нужных местах, чтобы пометить определенные части текста. 04.01.2017