web-dev-qa-db-ja.com

GTK3 TextView(クイックウィジェットTextEditor)のフォントをプログラムで変更する

PyGIとGTK3を使用するアプリでは、ユーザーがアプリの設定ダイアログを使用してTextViewのフォントファミリーとサイズを設定できるようにしています。 PyGIでは、TextViewオブジェクトにはいくつかのプロパティ用の「set」メソッドがありますが、フォントプロパティ用ではありません。 CSSスタイルプロバイダーを使用して、CSS経由でフォントファミリを設定できます。しかし、ユーザーが選択したフォントを尊重するようにそのCSSを動的に変更することはできません。どうすればこれを行うことができますか? (問題のウィジェットは、実際にはquick-widgetsパッケージのTextEditorであり、Quicklyを使用してアプリをビルドしていることに注意してください。)

編集して明確にする:私はCSSを使うことに夢中ではありません。これはGTKの推奨アプローチのようです。私が望んでいるのは、GtkTextView.setFontProperties()またはそのような何かのような、ある種のメソッドです。フォントプロパティのようなものを見つけることができません。

おかげで、

イアン

2
monotasker

このための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 __== "__main__":
    main()

私のデモ:

demo

組み込みダイアログ:

picker

3
andrewsomething

テキストタグを使用してこれを行うことができるはずですが、それが「最良の」方法であるかどうかはわかりません。

最初に、すべてのテキストを選択します here's タグの適用に関するreadthedocsサイトのページ。

そして こちら C/C++リファレンスのプロパティのリスト。

これを追加するだけです...私は最近、似たようなことをする必要がありました。

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