19 de mayo de 2016

52. GTK: Imágenes y etiquetas.

Incrustando una imagen en la ventana

De una primera forma... En la que se crea una imagen desde un fichero como un objeto y se añade a la ventana. GtkImage
# -*- coding: utf-8 -*-
from gi.repository import Gtk
import sys

# Una ApplicationWindow GTK

class miventana(Gtk.ApplicationWindow):
    # Constructor de ApplicationWindow

    def __init__(self, app):
        Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
        # también puede venir aquí win.show_all()
        self.set_default_size(800,800)
        
        # Crear una imagen
        image = Gtk.Image()
        # Obtenerla desde un fichero
        image.set_from_file("coche.png")
        # añadirla a la ventana.
        self.add(image)

class miaplicacion(Gtk.Application):
    
    # Constructor de Gtk.Application
    def __init__(self):
        Gtk.Application.__init__(self)

    # al activarse la aplicación, crea un objeto miventana.
    # Paso la aplicación "self" como argumento.
    def do_activate(self):
        win = miventana(self)
        # Muestra la ventana
        win.show_all()

    # hacer un startup
    def do_startup(self):
        Gtk.Application.do_startup(self)

# al igual que antes se crea y se ejecuta la aplicación
app = miaplicacion()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
= = =
De otra forma, definiendo la imagen como una clase.
# -*- coding: utf-8 -*-
from gi.repository import Gtk
import sys

# Una Imagen como clase
class miimagen(Gtk.Image):
    
    def __init__(self):
        Gtk.Image.__init__(self)
        self.set_from_file("coche.png")

# Una ApplicationWindow GTK
class miventana(Gtk.ApplicationWindow):
    # Constructor de ApplicationWindow

    def __init__(self,app):
        Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
        # también puede venir aquí win.show_all()
        self.set_default_size(800,800)

class miaplicacion(Gtk.Application):
    
    # Constructor de Gtk.Application
    def __init__(self):
        Gtk.Application.__init__(self)

    # al activarse la aplicación, crea un objeto miventana.
    # Paso la aplicación "self" como argumento.
    def do_activate(self):
        win = miventana(self)
        # añade la imagen
        win.add(miimagen())
        # Muestra la ventana
        win.show_all()

    # hacer un startup
    def do_startup(self):
        Gtk.Application.do_startup(self)

# al igual que antes se crea y se ejecuta la aplicación
app = miaplicacion()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
= = =

Etiquetas

Según la documentación GTK usa en Python cadenas str codificadas en utf-8. Ver apartado Unicode en GTK+
El siguiente código ilustra las dos formas de llamar a una etiqueta, como una clase o directamente como una instancia de la clase Gtk.Label. Son métodos que no se pueden usar a la vez, por eso uno está comentado.
# -*- coding: utf-8 -*-
from gi.repository import Gtk
import sys

"""
#Poner una etiqueta como clase
class  mietiqueta(Gtk.Label):
    
    def __init__(self):
        Gtk.Label.__init__(self)
        self.set_text("¡Hola, soy una etiqueta con clase")"""

# Una ApplicationWindow GTK
class miventana(Gtk.ApplicationWindow):
    # Constructor de ApplicationWindow

    def __init__(self,app):
        Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
        # también puede venir aquí win.show_all()
        self.set_default_size(800,800)
        
        # Quitar este ejemplo si se quiere 
        # comprobar como se hace con una clase
        # =======================
        # Otra etiqueta sin clase
        # =======================
        label2 = Gtk.Label()
        label2.set_text("Soy una etiqueta sin clase")
        self.add(label2)
        # =======================

class miaplicacion(Gtk.Application):
    
    # Constructor de Gtk.Application
    def __init__(self):
        Gtk.Application.__init__(self)

    # al activarse la aplicación, crea un objeto miventana.
    # Paso la aplicación "self" como argumento.
    def do_activate(self):
        win = miventana(self)
        # añade la imagen
        """ win.add(mietiqueta()) """
        # Muestra la ventana
        win.show_all()

    # hacer un startup
    def do_startup(self):
        Gtk.Application.do_startup(self)

# al igual que antes se crea y se ejecuta la aplicación
app = miaplicacion()
exit_status = app.run(sys.argv)
sys.exit(exit_status)
= = =
Otros métodos son los siguientes:
  • set_line_wrap(True) rompe líneas si el texto de la etiqueta excede el tamaño del widget.
  • set_justify(Gtk.Justification.LEFT) (o Gtk.Justification.RIGHT, Gtk.Justification.CENTER, Gtk.Justification.FILL) establece la alineación en etiquetas con más de una línea
  • Para decorar el texto se puede usar set_markup("texto"), donde "texto" es un texto en el lenguaje de marcación Pango.
En el siguiente ejemplo se modifica el programa anterior y se cambia el __init__ de miventana. Atención a modificar el tamaño de la misma a 100, 100.
...
    def __init__(self,app):
        Gtk.Window.__init__(self, title="Welcome to GNOME", application=app)
        # también puede venir aquí win.show_all()
        self.set_default_size(100,100)
        
        # Quitar este ejemplo si se quiere 
        # comprobar como se hace con una clase
        # =======================
        # Otra etiqueta sin clase
        # =======================
        label2 = Gtk.Label()
        label2.set_text("Este es un texto muy largo, tan largo que creo que no cabrá en el widget ventana")
        label2.set_line_wrap(True)
        label2.set_justify(Gtk.Justification.CENTER)
        # label2.set_markup("<b>Texto</b> en varios <small>tamaños</small> o <span foreground='darkred' background='peru'>en color</span>")
        self.add(label2)
        # =======================
...

= = = 
 

No hay comentarios:

Publicar un comentario