将标记与Gtk.TextVi公司

2024-07-01 07:52:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试在Python-GObject中使用带Gtk.TextView和{}的Pango标记,但似乎这个功能只适用于工具提示和标签。Gtk.TextBuffer具有^{}方法,但需要Gtk.TextIter作为输入,并且必须具有指定的长度。在

这里的问题是我只想使用Gtk.TextView来显示文本,而不想对其进行编辑。因此,虽然我认为我了解如何使用Gtk.TextTag与可编辑/可选择文本一起使用,以实质性地改变其外观(甚至行为),但我不完全确定如何对静态文本执行相同的操作。将标记应用于此类的最简单方法是什么?在

例如:将“<;b>;Some text<;/b>;”转换为“某些文本”(或使用哪个标记)


Tags: 工具方法标记文本ltgt功能编辑
1条回答
网友
1楼 · 发布于 2024-07-01 07:52:21

pythongtk+3教程中有一个很好的例子,TextView Example

但是为了使重要部分更清楚(希望如此),正如您所猜测的那样,您必须在TextBuffer中定义这些标记,而不是在TextView中,例如

self.tag_bold = self.textbuffer.create_tag("bold", weight=Pango.Weight.BOLD)

然后,您可以将标记应用于要加粗的文本部分,为此,您必须提供给TextBuffer.apply_标记()方法该部分文本的边界(开始、结束),如:

^{pr2}$

你会准备好的。在

在上面的例子中,边界是由用户选择的文本部分决定的,但是如果您显示的是只读文本,您可以自己在代码中提供边界,请查看TextBuffer文档。在

也可以通过以下方法添加具有有效pango标记的文本:

self.textbuffer.insert_markup(iter, markup)

如果该方法可以返回指向插入文本末尾的新iter,这将使工作更加简单,但是该方法来自于简单的内省,它需要重写才能这样做。在

请参阅下面的最小示例(您可以让它变得更好):

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()

相关问题 更多 >

    热门问题