以编程方式更改 GTK3 TextView 的字体(快速小部件文本编辑器)

以编程方式更改 GTK3 TextView 的字体(快速小部件文本编辑器)

在使用 PyGI 和 GTK3 的应用中,我尝试让用户通过应用的设置对话框在 TextView 中设置字体系列和大小。在 PyGI 中,TextView 对象具有针对多个属性的“设置”方法,但没有针对字体属性的“设置”方法。我可以使用 CSS 样式提供程序通过 CSS 设置字体系列。但我无法动态更改该 CSS 以遵循用户选择的字体。那么我该怎么做呢?(请注意,所讨论的小部件实际上是来自 rapid-widgets 包的 TextEditor,我正在使用 Quickly 来构建应用。)

编辑以澄清:我并不坚持使用 CSS,这似乎是 GTK 的首选方法。我希望的是某种方法,如 GtkTextView.setFontProperties() 或类似的东西。我找不到任何类似的字体属性。

谢谢,

伊恩

答案1

您可以使用 GTK+ 的内置按钮和对话框在文本视图中设置字体Gtk.FontButton()

#!/usr/bin/python

from gi.repository import Gtk

class TextViewWindow:
    def __init__(self):
        self.window = Gtk.Window()
        self.window.set_default_size(400, 400)

        main_vbox = Gtk.VBox(homogeneous=False, spacing=0)
        self.window.add(main_vbox)

        self.tview = Gtk.ScrolledWindow()
        main_vbox.add(self.tview)

        self.textview = Gtk.TextView()
        self.textbuffer = self.textview.get_buffer()
        self.textbuffer.set_text("Here is a text view.")
        self.textview.set_wrap_mode(Gtk.WrapMode.WORD)

        self.tview.add(self.textview)

        self.font_button = Gtk.FontButton()
        self.font_button.connect('font-set', self.on_font_set)
        main_vbox.pack_start(self.font_button, False, False, 0)

        self.window.show_all()
        self.window.connect('destroy', lambda w: Gtk.main_quit())

    def on_font_set(self, widget):
        font_description = widget.get_font_desc()
        print "You chose: " + widget.get_font()
        self.textview.modify_font(font_description)

def main():
    app = TextViewWindow()
    Gtk.main()

if __name__ == "__main__":
    main()

我的演示:

演示

内置对话框:

选择器

答案2

您应该能够使用文本标签来执行此操作,但我不确定这是否是“最佳”方法。

首先,选择所有文本,这是readthedocs 网站上有关应用标签的页面。

这是来自 C/C++ 参考的属性列表。

只需添加这个...我最近需要做一些类似的事情,我不得不做一些寻找才能得出这个片段:

self.textview = Gtk.TextView()
self.textview.override_font(
    Pango.font_description_from_string('DejaVu Sans Mono 12')
    )

相关内容