在使用 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()
我的演示:
内置对话框: