[PYGtk] Fuente Botón

Existe alguna manera asequible de cambiar la
fuente de un botón?

De momento lo hago chapuceramente agregando
un HBox al botón, y añadiendo una imagen y una
label a dicho contenedor, modificando la fuente
de la etiqueta con pango.FontDescription.

Gracias de antemano
Todos los widgets que contienen texto tienen un método modify_font, pero Button en concreto no lo tiene porque no es más que un contenedor. Así que tu forma no es chapucera, es como se tiene que hacer.

O bien podrías acceder a una referencia del widget que contiene el button mediante la propiedad child, y, entonces si, usar modify_font sobre el widget hijo.
Hola Zoo,

gracias por responder!

Si hago lo que me dices, el hijo del botón es un objeto Alignment,
al cual no se le puede aplicar la propiedad font. S i sigo buscando
hijos, el siguiente es el objeto HBox, pero éste ya no contiene ni
imagen ni label !?!?!

Hay alguna manera de 'imponer' una sola fuente para una gtk.Window
y todos sus hijos? He creado un fichero .rc donde he definido la
fuente con el parametro siguiente:

font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
widget_class "GtkWindow" style "window"

pero ni puñetero caso!

Gracias de nuevo,

Saludos
Si creas un button con el constructor que tiene como parámetro el texto a mostrar lo que hace es crear el contenedor button con un label dentro. Así que si haces un child debería darte el label y con modify_font poder modificar la fuente.

import gtk
import pango

w = gtk.Window()
b = gtk.Button("Hola")

# Esto no funciona porque button es un contenedor; no modifica el estilo de los
# hijos
b.modify_font(pango.FontDescription("Arial 20"))

# Esto si porque modificas el estilo del label en sí
b.child.modify_font(pango.FontDescription("Arial 20"))

w.add(b)
w.show_all()

gtk.main()



Sobre lo segundo no estoy muy seguro, pero lo mismo esto te funciona:
style "mi-fuente"
{
   font_name = "arial 20"
}
class "*" style "mi-fuente"
Holas,

lo del child va de lujo! Peeeero si añado una imagen al
botón con set_image, pues ya no funciona el invento. :-(

Y lo último funciona 100%!!!

Gracias de nuevo, maeztro!

Nz
En ese caso el widget que se crea es un button que contiene un alignment, que contiene un hbox, que contiene un label y un image.

Ergo b.child te daría el alignment
b.child.child el hbox
b.child.child.get_children() una lista con los hijos de hbox (el label y el image)
b.child.child.get_children()[0] la imagen
b.child.child.get_children()[1] el label

Luego puedes hacer, por ejemplo:
b.child.child.get_children()[1].modify_font(pango.FontDescription("Arial 20"))

o crear tú la etiqueta como hacías, modificarla primero, y añadirla después.
5 respuestas