Barra laterale

programmazione:perl:intro_perl-gtk2

Introduzione alla librerie Gtk2 con Perl

Autore: Fabio Di Matteo
Ultima revisione: 30/01/2015 - 15:20

Perl è un ottimo linguaggio di programmazione interpretato, utilissimo in tutti quei casi in cui è necessario scrivere un programma che deve essere continuamente corretto o modificato. In questo articolo mostreremo come realizzare uno script grafico tramite le librerie Gtk2 .
Lo script di seguito mostrera' una finestra con una griglia che fungera' da semplice rubrica. Saranno disponibili i comandi per aggiungere, eliminare e modificare le varie righe della griglia.
Per ulteriori approfondimenti e' disponibile il Manuale.

Il codice

E' da notare che in questo script si fa uso del widget Gtk2::SimpleList che semplifica notevolmente la creazione di griglie basate su GtkTreeView.

rubrica.pl

#!/usr/bin/perl
 
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
use Gtk2::SimpleList; 
 
 
#Le callbacks dei bottoni
sub exit
{
	my ($widget, $window) = @_;
	$window->destroy;
 
}
 
sub delete_event
{
	$window->destroy;
	return TRUE;
}
 
 
sub add
{
	my ($widget, $window) = @_;
 
	#Aggiungo una riga (tratto $slist come un normalisimo array)
	push @{$slist->{data}}, [ $txtNome->get_text,$txtCognome->get_text, $txtEmail->get_text ];
}
 
sub del
{
	#Prende l'indice selezionato e cancella la riga
	@sel = $slist->get_selected_indices;
	splice @{ $slist->{data} }, @sel[0], 1;
	clearText();#svuota le entry
}
 
sub get
{
	#Prende l'indice selezionato e visualizza i dati nelle entry
	@sel = $slist->get_selected_indices;
 
	#riga selezionata, colonna 0,1,2...
	$txtNome->set_text($slist->{data}[@sel[0]][0]);
	$txtCognome->set_text($slist->{data}[@sel[0]][1]);
	$txtEmail->set_text($slist->{data}[@sel[0]][2]);
 
 
}
 
sub save
{
	#Prende l'indice selezionato e visualizza i dati nelle entry
	@sel = $slist->get_selected_indices;
 
	#riga selezionata, colonna 0,1,2...
	$slist->{data}[@sel[0]][0]=$txtNome->get_text;
	$slist->{data}[@sel[0]][1]=$txtCognome->get_text;
	$slist->{data}[@sel[0]][2]=$txtEmail->get_text;
	clearText();#svuota le entry
 
}
 
sub clearText
{
	#Questa funzione cancella soltanto il contenuto delle entry
	$txtNome->set_text('');
	$txtCognome->set_text('');
	$txtEmail->set_text('');
 
}
 
# crea la finestra principale e la collega ad alcune callback
$window = Gtk2::Window->new('toplevel');
$window->signal_connect(delete_event => \&delete_event);
$window->signal_connect(destroy => sub { Gtk2->main_quit; });#alla chiusura quit
 
 
# Alcune prprietà della finestra
$window->set_border_width(10);
$window->set_size_request(640, 600);
$window->set_title("Rubrica");
$window->set_position('center');
 
 
#Entry e label per l'inserimento e modifica
$txtNome = Gtk2::Entry->new();
$txtCognome = Gtk2::Entry->new();
$txtEmail = Gtk2::Entry->new();
$lblNome = Gtk2::Label->new ("Nome:");  
$lblCognome = Gtk2::Label->new ("Cognome:");
$lblEmail = Gtk2::Label->new ("Email:");
 
#Bottoni per le azioni
$btnDel = Gtk2::Button->new("Elimina");
$btnExit = Gtk2::Button->new("Esci");
$btnAdd = Gtk2::Button->new("Aggiungi");
$btnSave = Gtk2::Button->new("Salva");
#Callbacks bottoni
$btnExit->signal_connect(clicked => \&exit, $window);
$btnAdd->signal_connect(clicked => \&add, $window);
$btnDel->signal_connect(clicked => \&del, $window);
$btnSave->signal_connect(clicked => \&save, $window);
 
 
#Colonne della griglia e relativo tipo
$slist = Gtk2::SimpleList->new (
                'Nome'    => 'text',
                'Cognome'  => 'text',
                'email'     => 'text',
              );
 
#Inserisco una riga (tratto $slist come un normalisimo array)
@{$slist->{data}} = (
	[ 'Fabio','Di Matteo','myemail@mail.com' ],
	[ 'Tizio','Di Matteo','myemail@mail.com' ],
	[ 'Caio','Di Matteo','myemail@mail.com' ],
 
);
 
#Dimensioni della griglia
$slist->set_size_request(400,400);
 
 
#Al doppioclick su una riga esegui la funzione "get"
$slist->signal_connect(row_activated => \&get, $window); 
 
 
 
 
 
$hbox0 = Gtk2::HBox->new(); 		#contenitore dell'intera area
$vbox0 = Gtk2::VBox->new(); 		#contenitore griglia e bottoni
$vbox1 = Gtk2::VBox->new();			#contenitore caselle di testo ed etichette
 
 
#Aggiungo ad hbox0 gli altri contenitore vbox0 e vbox1
$hbox0->pack_start($vbox0, TRUE, FALSE, 0);
$hbox0->pack_start($vbox1, TRUE, FALSE, 0);
 
#Aggiungo al cntenitore vbox1 i vari campi testo con le relative etichette
$vbox1->pack_start($lblNome, FALSE, TRUE, 0);
$vbox1->pack_start($txtNome, FALSE, TRUE, 0);
 
$vbox1->pack_start($lblCognome, FALSE, FALSE, 0);
$vbox1->pack_start($txtCognome, FALSE, FALSE, 0);
 
$vbox1->pack_start($lblEmail, FALSE, FALSE, 0);
$vbox1->pack_start($txtEmail, FALSE, FALSE, 0);
 
 
#Aggiungo al contenitore vbox0 la griglia e i bottoni sotto di essa
$vbox0->pack_start($slist, TRUE, FALSE, 0);
$vbox0->pack_start($btnAdd, TRUE, FALSE, 0);
$vbox0->pack_start($btnSave, TRUE, FALSE, 0);
$vbox0->pack_start($btnDel, TRUE, FALSE, 0);
$vbox0->pack_start($btnExit, TRUE, FALSE, 0);
 
 
 
# Aggiungo box0 a $window
$window->add($hbox0);
 
 
 
# mostra tutto
$window->show_all;
 
#Ciclo principale delle Gtk
Gtk2->main;
 
0;

programmazione/perl/intro_perl-gtk2.txt · Ultima modifica: 18/04/2018 - 15:49 (modifica esterna)