web-dev-qa-db-fra.com

Changer la police par programme pour GTK3 TextView (TextEditor à widgets rapides)

Dans une application utilisant PyGI et GTK3, j'essaie de laisser l'utilisateur définir la famille et la taille de la police dans un TextView via la boîte de dialogue des paramètres de mon application. Dans PyGI, l’objet TextView dispose de méthodes "set" pour plusieurs propriétés, mais pas pour les propriétés de police. Je peux définir la famille de polices via CSS à l'aide d'un fournisseur de style CSS. Mais je ne peux pas changer ce CSS dynamiquement pour respecter la police sélectionnée par un utilisateur. Alors, comment puis-je faire cela? (Notez que le widget en question est en fait le TextEditor du paquet quick-widgets et j'utilise Quickly pour créer l'application.)

Modifier pour clarifier: je ne suis pas attaché à l'utilisation de CSS, cela semble être l'approche préférée de GTK. Ce que j'espère, c'est une méthode, telle que GtkTextView.setFontProperties () ou quelque chose comme ça. Je ne trouve rien de tel pour les propriétés de police.

Merci,

Ian

2
monotasker

Vous pouvez définir la police dans une vue texte à l'aide du bouton intégré de GTK + et de la boîte de dialogue correspondante, 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()

Ma démo:

demo

Dialogue intégré:

picker

3
andrewsomething

Vous devriez pouvoir utiliser les étiquettes de texte pour le faire, mais je ne suis pas sûr que ce soit la "meilleure" façon.

Tout d’abord, vous sélectionneriez tout le texte, voici la page du site readthedocs sur l’application des balises.

Et voici une liste de propriétés de la référence C/C++.

J'ajoute simplement ceci… J'ai récemment eu besoin de faire quelque chose de similaire, et je devais faire un peu de recherche pour arriver à cet extrait:

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