Alterar fonte de forma programática para o GTK3 TextView (editor de texto de widgets rápidos)

2

Em um aplicativo que usa PyGI e GTK3, estou tentando deixar o usuário definir a família e o tamanho da fonte em um TextView por meio da caixa de diálogo de configurações do meu aplicativo. No PyGI, o objeto TextView tem métodos "set" para várias propriedades, mas não para propriedades de fontes. Eu posso definir a família de fontes via CSS usando um provedor de estilo CSS. Mas não posso alterar esse CSS dinamicamente para respeitar a fonte selecionada por um usuário. Então, como posso fazer isso? (Observe que o widget em questão é realmente o TextEditor do pacote quick-widgets e estou usando o Quickly para criar o aplicativo.)

Editar para esclarecer: não estou interessado em usar CSS, que parece ser a abordagem preferida do GTK. O que eu estou esperando é um método de algum tipo, como GtkTextView.setFontProperties () ou algo parecido. Não consigo encontrar nada parecido com as propriedades da fonte.

Obrigado,

Ian

    
por monotasker 29.08.2012 / 17:32

2 respostas

3

Você pode definir a fonte em uma visão de texto usando o botão interno do GTK + e a caixa de diálogo para isso, 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()

Minha demonstração:

Diálogoincorporado:

    
por andrewsomething 31.08.2012 / 23:45
2

Você deve poder usar texttags para fazer isso, mas não tenho certeza se é a melhor maneira.

Primeiro, você selecionaria todo o texto, aqui na página do site readthedocs na aplicação de tags.

E aqui está uma lista de propriedades da referência C / C ++.

Apenas adicionando isso em ... Recentemente, precisei fazer algo semelhante e tive que fazer uma pequena pesquisa para criar este snippet:

self.textview = Gtk.TextView()
self.textview.override_font(
    Pango.font_description_from_string('DejaVu Sans Mono 12')
    )
    
por RobotHumans 29.08.2012 / 17:39