miércoles, 27 de junio de 2012

Variables de clase

Este código me ha funcionado de chiripa, pero me he alegrado mucho puesto que ya no sabía como declarar variables para toda la clase. He creido entender un poco como se pueden definir estas variables. Como podemos ver texto1,boton1,contador y el contenedor vbox son declaradas como variables de la clase cuando se declaran antes que init y a su mismo nivel de identación.  La variable contador ahora pertenece a toda la clase Ventana y por lo tanto puede ser usada desde cualquier parte inclusive desde una función como "contador", "self.contador" o también "this.contador".
Se puede ver un ejemplo de conversión de numero a cadena de caracteres: de modo que un numero declarado como int (es decir entero del inglés Integer) lo podemos convertir a cadena añadiendo .to_string().
Por otro lado podemos ver un ejemplo de Entry que es un cuadro para la introducción de texto. Este cuadro tiene múltiples metodos y propiedades. Yo en este ejemplo he usado el set_text () y el get_text. Muy sencillo. Set text sirve para introducir texto dentro y get text para obtener el texto escrito en el.

En cuanto a los contenedores VBox y HBox. Es la forma que GTK usa para ordenar nuestros controles(botones,Entrys,labels) dentro de la ventana. En este caso he elegido un VBox y lo que consigo es que los controles se introduzcan verticalmente. Atención también podemos introducir un control vertical sobre un control horizontal y viceversa. Lo cual nos da inmensas posibilidades para construir una ventana a nuestro gusto. Si bien todavía no he probado un IDE con un constructor de ventanas integrado para Genie. Pero quizás ya exista alguno como Glade o Code Bloks que sirva para Genie. No lo se. La verdad es que desde la programación con Python no utilizo este tipo de herramientas y me las ingenio creandolo desde el mismo codigo.

Para compilarlo en Geany introducir esto en las opciones del builder:  
$ valac --pkg gtk+-2.0 "%f"
Aquí tenemos el código dichoso:

[indent=4]
uses
    Gtk
init
    Gtk.init (ref args)
    var test = new Ventana ()
    test.show_all ()
    Gtk.main (); 

  
class Ventana : Window
    texto1: Gtk.Entry = new Gtk.Entry
    boton1: Button= new Button.with_label ("Pulsa este botón")
    contador: int = 0
    vbox : VBox = new VBox (true, 5)
       
    init
        title = "Ventana de prueba"
        default_height = 360
        default_width = 560
        window_position = WindowPosition.CENTER
        texto1.set_text ("hola")
        boton1.clicked.connect (pulsado)
        destroy.connect(Gtk.main_quit)
        vbox.add (boton1)
        vbox.add(texto1)
        add (vbox)
       
    def pulsado (btn : Button)
        this.contador++
        title = contador.to_string()
        btn.label = "El botón ha sido pulsado"
        texto1.set_text (texto1.get_text()+ "_ "+contador.to_string())



No hay comentarios:

Publicar un comentario