martes, 27 de noviembre de 2012

Como crear un botón notebook sin mostrar pestañas Perl/Gtk3

Algunas veces si no es que muchas necesitamos crear un botón que al clikearlo pueda cambiar y a la vez cambiar la rutina que estamos usando


Estos dos botones,tienen corriendo detrás una rutina que realiza acciones,por ejemplo puede ir desde un cambio de texto,un boton para frenar,un boton para comenzar,sea una búsqueda,una reproducción multimedia,etc.

Estos botones no solo serán lo que vemos en la interfaz gráfica están corriendo rutinas atrás de ellos.

Por lo menos la rutina que indique cambiarla.

Como se hacen estos botones,hay muchas maneras de hacerlos y en distintos lenguajes de programación debe haber miles de maneras de hacerlos,pero yo aquí me concentre en el widget Notebook de Gtk3 y escribiendo en Perl.

Para crear uno de estos botones se hace lo siguiente

Tutorial

Primero que nada creamos una ventana:

my $ventana = Gtk3::Window->new('toplevel');
$ventana->set_title('Ejemplo');
$ventana->set_default_size(200, 200);$ventana->set_border_width(5);
$ventana->signal_connect( destroy  => sub { Gtk3->main_quit } );

Si queremos podemos crear el hbox de una vez:

my $hbox = Gtk3::Box->new( 'horizontal', 10 );

Y creamos el widget que contendrá los botones:

my $botones = Gtk3::Notebook->new();
$botones->set_show_tabs(FALSE);
$botones->set_show_border(FALSE);
$hbox->pack_start( $botones, TRUE, TRUE, 0 );

Creamos los botones:

1.El primero es el botón de play en este ejemplo,pero puede ser de lo que quieran

my $boton1 = Gtk3::ToolButton->new_from_stock('gtk-media-play');
$boton1->signal_connect( clicked => \&show_stop );
$botones->append_page($boton1);

La parte en rojo es el nombre del stock,para ver mas visitar el url de abajo.

developer.gnome.org/gtk/2.24/gtk-Stock-Items.html
 Si no quieren usar stocks y quieren usar texto se puede definir de esta manera

my $boton = Gtk3::Button->new_with_label('Palabrar');
2.Definimos el segundo botón

Que seria el de stop:


my $boton2 = Gtk3::ToolButton->new_from_stock('gtk-media-stop');
$boton2->signal_connect( clicked => \&show_play );
$botones->append_page($boton2);

Lo de rojo indica que se pase a la sub rutina show_play si se clickea el botón


Creamos dos label,para usar mas efectivamente nuestra futura vbox y nuestras subrutinas:



my $label = Gtk3::Label->new("Perl Gtk3");
my $label2 = Gtk3::Label->new("");


Creamos una vbox

my $vbox = Gtk3::Box->new( 'vertical', 5 );
$vbox->pack_start( $label, FALSE, FALSE, 10 );
$vbox->pack_start( $hbox, FALSE, FALSE, 10 );

$vbox->pack_start( $label2, FALSE, FALSE, 0 );

$vbox->set_border_width(5);

Añadimos nuestra vbox a la ventana y lo mostramos todo:

$ventana->add($vbox);

$ventana->show_all;


Gtk3->main();

Creamos las subrutinas:

La sub rutina del botón play:


sub show_play {
    $botones->set_current_page(0);
   $label2->set_markup("Play");
}

Lo de rojo indica que se muestre la pagina (0) que seria la que contiene nuestro botón play


La sub rutina del botón stop:



sub show_stop {
    $botones->set_current_page(1);
    $label2->set_markup("Stop");
}

Eso es todo,pueden ver como quedo el script completo aquí:

pastebin.com/SQXCvD5G
Así nos queda al ejecutar


Presionamos play y se muestra :




El widget Notebook sirve para muchas cosas,esta es solo una de ellas y su forma verdadera es así


Como pueden darse cuenta ese botón no solo sirve para mostrar el texto de una label,incluso podemos hacer un reproductor de música,usando un modulo como:

Audio::Play::MPG123
O muchas cosas mas,yo voy a ver si lo puedo implementar en simplePerlBrowser para usar multipestañas,aunque va estar complicado, pero se puede usar de muchas maneras,por ejemplo algo mas sencillo que ya hice fue unificar el botón de cargar y detención de simplePerlBrowser.

Solo redirigían la señal de clic a una subrutina,que cambie el botón y que haga sus otras funciones :D

Espero que les funcione ya que yo me tarde un rato en usar la documentación de este widget en Perl

developer.gnome.org/gtk3/stable/GtkNotebook.html

Eso es todo :D



No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.