gpt4 book ai didi

python - 在 Gtk.TextView 中使用标记

转载 作者:太空宇宙 更新时间:2023-11-04 08:00:15 25 4
gpt4 key购买 nike

我一直在尝试寻找一种在 Python GObject 中将 Pango 标记与 Gtk.TextViewGtk.TextBuffer 结合使用的方法,但它似乎此功能仅适用于工具提示和标签。 Gtk.TextBufferinsert_markup方法,但需要 Gtk.TextIter 作为输入,并且必须具有指定的长度。

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

例如:将“Some text”变成“Some text”(或将使用的任何标签)

最佳答案

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)

如果该方法可以返回指向插入文本末尾的新迭代器,那就太好了,这会让生活变得更轻松,但该方法来自简单的内省(introspection),它需要重写才能像那样工作。

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

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

关于python - 在 Gtk.TextView 中使用标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41452162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com