Introduzione a Perl/Tk
2 partecipanti
Pagina 1 di 1
Introduzione a Perl/Tk
Ultimamente mi sto appasionando parecchio a Perl/Tk, che per chi non lo sapesse è un modulo di Perl per la creazione di interfacce Tk tramite Perl
Perl è un linguaggio decisamente piacevole, che certamente non basa la sua fama sull'aspetto grafico delle sue applicazioni.
Prima di lavorare sul suo abbinamento con Tk ho sempre pensato che fosse un mezzo abbastanza minimale di sviluppo GUI, invece mi sono ricreduto e devo dire che permette la produzione di programmi di buon livello.
Come ogni tutorial sulle applicazioni GUI, iniziamo con il codice di una semplice finestra:
I due elementi fondamentali sono la dichiarazione di MainWindow e la funzione MainLoop che sono obblicatorie.
Sebbene il codice non richieda commenti, si farà qualche precisazione in riferimento ad altri linguaggi...
Innanzitutto la funzione MainWindow indica una finestra contenitore di altri widget; è possibile cioè l'inserimento di più funzioni MainWindow figlie.
Altra caratteristica importante è la chiusura dell'applicazione, che può avvenire semplicemente chiudendo la finestra anche se è presente la possibilità di inserire una funzione "destroy".
Nel prossimo esempio aggiungeremo infatti due bottoni; uno per l'apertura del terminale e uno per la chiusura della finestra:
(lo so che è brutto...aspettate un attimo)
Come si può notare le misure della finestra sono state sostituite con "->minsize(300,200)" per evitare che larghezza e altezza siano gestite in base al contenuto della finestra stessa.
L'elemento "pack" è obbligatorio e può avere valore nullo [->pack()], in questo caso abbiamo inserito la posizione dei bottoni rispetto alla riga in cui sono inseriti. "w" (sinistra) e "e" (destra) stanno per "west" e "east" (e non si usano "l" e "r" come farebbe qualunque essere razionale...)
Come si vede in questo modo non è possibile affiancare più bottoni, per fare ciò è necessaria l'aggiunta di un frame:
Ad esempio lo stesso metodo può venire utilizzato per create un piccolo pannello di controllo del mio Fluxbox, senza aprire kcontrol ogni volta
Per concludere, la nostra GUI cosa deve avere? Ovviamente il menu...
Per motivi di lunghezza, togliamo tutta la parte sui bottoni e creiamo una semplice finestra con un bel menu:
Le dichiarazioni di Tk::FileSelect e Tk::Dialog sono date come implicite nel terminale, quindi anche se vengono omesse il programma funziona ugualmente.
Il nostro menu è inserito in un frame largo tutta la finestra, in questo modo sarà possibile inserire altri frame, facendoli "confinare" con il menu:
my pippo = $mw->Frame()
->form(-top=>$app_menu,-left=>'%0',-right=>'%100',-bottom=>'%100');
Il valore '-relief => "raised"' indica l'aspetto del menu "sbalzato", cioè che sembra essere più alto del resto della finestra. L'altra opzione è "sunken", con un menu dall'aspetto "incavato"...siccome floatman non lo sa spiegare provate xD
Come vedete le voci del menu sono indicate da Menubutton:
$mio_menu->Menubutton( -text=>"Nome", -menuitems=>[ [Button=>"Nome1", -command=>\&func1], [Button=>"NomeN", -command=>\&funcN] ] )
-underline => N, imposta il carattere sottolineato per l'indicazione del tasto rapido (la numerazione parte da "0").
-accelerator => "xyz", visualizza il tasto rapido nel menu.
Le altre due funzioni inserite utilizzano: FileSelect per la visualizzazione della finestra di selezione file, in questo caso senza opzioni perchè tanto il programma non serve a niente xD
Dialog per la creazione di una finestra di dialogo, in modo da specificare bene che il programma non serve a niente...
Per maggiori info su tutte le opzioni e widget disponibili, si rimanda a alla consultazione dell'apposito manuale (man Tk e man Tk::nome_widget)
Come potete vedere in questa descrizione sommaria, l'utilizzo è decisamente semplice ma efficace.
Estremamente divertente ^^
Perl è un linguaggio decisamente piacevole, che certamente non basa la sua fama sull'aspetto grafico delle sue applicazioni.
Prima di lavorare sul suo abbinamento con Tk ho sempre pensato che fosse un mezzo abbastanza minimale di sviluppo GUI, invece mi sono ricreduto e devo dire che permette la produzione di programmi di buon livello.
Come ogni tutorial sulle applicazioni GUI, iniziamo con il codice di una semplice finestra:
- Codice:
#!/usr/bin/perl -w
use strict;
use Tk;
my $progname="Finestra con Perl::Tk";
my $mw=MainWindow->new(-title=>"$progname"
-width=>300,
-height=>200);
MainLoop;
I due elementi fondamentali sono la dichiarazione di MainWindow e la funzione MainLoop che sono obblicatorie.
Sebbene il codice non richieda commenti, si farà qualche precisazione in riferimento ad altri linguaggi...
Innanzitutto la funzione MainWindow indica una finestra contenitore di altri widget; è possibile cioè l'inserimento di più funzioni MainWindow figlie.
Altra caratteristica importante è la chiusura dell'applicazione, che può avvenire semplicemente chiudendo la finestra anche se è presente la possibilità di inserire una funzione "destroy".
Nel prossimo esempio aggiungeremo infatti due bottoni; uno per l'apertura del terminale e uno per la chiusura della finestra:
(lo so che è brutto...aspettate un attimo)
- Codice:
#!/usr/bin/perl -w
use strict;
use Tk;
my $progname="Bottoni con Perl::Tk";
my $mw=MainWindow->new(-title=>"$progname");
$mw->minsize(300,200);
my $butt1=$mw->Button(-text=>"Term",
-command=>sub{system("x-terminal-emulator &")})
->pack(-anchor=>"w");
my $butt2=$mw->Button(-text=>"Close",
-command=>sub{$mw->destroy})
->pack(-anchor=>"e");
MainLoop;
Come si può notare le misure della finestra sono state sostituite con "->minsize(300,200)" per evitare che larghezza e altezza siano gestite in base al contenuto della finestra stessa.
L'elemento "pack" è obbligatorio e può avere valore nullo [->pack()], in questo caso abbiamo inserito la posizione dei bottoni rispetto alla riga in cui sono inseriti. "w" (sinistra) e "e" (destra) stanno per "west" e "east" (e non si usano "l" e "r" come farebbe qualunque essere razionale...)
Come si vede in questo modo non è possibile affiancare più bottoni, per fare ciò è necessaria l'aggiunta di un frame:
- Codice:
#!/usr/bin/perl -w
use strict;
use Tk;
my $progname="Frame con Perl::Tk";
my $mw = MainWindow->new(-title=>"$progname",
-width=>300,
-height=>200);
my $firstframe = $mw->Frame(-relief => "raised")
->form()
->pack(-side=>"left");
my $secondframe = $mw->Frame(-relief => "raised")
->form()
->pack(-side=>"right");
my $butt1 = $firstframe->Button(-text=>"Term1",
-width=>"16",
-command=>sub{system("x-terminal-emulator &")})
->pack();
my $butt2 = $firstframe->Button(-text=>"Close1",
-width=>"16",
-command=>sub{$mw->destroy})
->pack();
my $butt3 = $secondframe->Button(-text=>"Term2",
-width=>"16",
-command=>sub{system("x-terminal-emulator &")})
->pack();
my $butt4 = $secondframe->Button(-text=>"Close2",
-width=>"16",
-command=>sub{$mw->destroy})
->pack();
MainLoop;
Ad esempio lo stesso metodo può venire utilizzato per create un piccolo pannello di controllo del mio Fluxbox, senza aprire kcontrol ogni volta
Per concludere, la nostra GUI cosa deve avere? Ovviamente il menu...
Per motivi di lunghezza, togliamo tutta la parte sui bottoni e creiamo una semplice finestra con un bel menu:
- Codice:
#!/usr/bin/perl -w
use strict;
use Tk;
use Tk::FileSelect;
use Tk::Dialog;
# ------- Main window -------
my $mw = MainWindow->new(-title=>"Menu con Perl::Tk");
$mw->minsize(300,200);
# ------ Frame del menu -----
my $app_menu = $mw->Frame(-relief => "raised",
-borderwidth => 1)
->form(-top=>"%0",
-left=>"%0",
-right=>"%100");
# ----------- Menu -----------
# File
$app_menu->Menubutton(-text => "File",
-menuitems => [
[Button => "Open...",
-command => \&open_file,
-underline => 0,
-accelerator => "CTRL+O" ],
[Button => "Quit",
-command => \&close ],
]
)
->pack(-side=>"left");
# Help
$app_menu->Menubutton(-text => "Help",
-menuitems =>[
[Button => "Help",
-command => \&help,
-underline => 0,
-accelerator => "CTRL+H" ],
[Separator => ""],
[Button => "About",
-command => \&about,
-underline => 0,
-accelerator => "CTRL+H" ],
]
)
->pack(-side=>"right");
MainLoop;
# --- funzioni richiamate: ---
sub open_file {
my $file = '';
$file = $mw->FileSelect()->Show;
}
sub close {
$mw->destroy;
}
sub help {
my $help_box = $mw->Dialog(-title => "What?",
-text => "This program can't do anything!",
-buttons => ["OK"])
->Show;
}
sub about {
my $about_box = $mw->Dialog(-title => "What else?",
-text => "This Stupid program created by floatman Really Can't Do Anything!",
-buttons => ["OK"])
->Show;
}
Le dichiarazioni di Tk::FileSelect e Tk::Dialog sono date come implicite nel terminale, quindi anche se vengono omesse il programma funziona ugualmente.
Il nostro menu è inserito in un frame largo tutta la finestra, in questo modo sarà possibile inserire altri frame, facendoli "confinare" con il menu:
my pippo = $mw->Frame()
->form(-top=>$app_menu,-left=>'%0',-right=>'%100',-bottom=>'%100');
Il valore '-relief => "raised"' indica l'aspetto del menu "sbalzato", cioè che sembra essere più alto del resto della finestra. L'altra opzione è "sunken", con un menu dall'aspetto "incavato"...siccome floatman non lo sa spiegare provate xD
Come vedete le voci del menu sono indicate da Menubutton:
$mio_menu->Menubutton( -text=>"Nome", -menuitems=>[ [Button=>"Nome1", -command=>\&func1], [Button=>"NomeN", -command=>\&funcN] ] )
-underline => N, imposta il carattere sottolineato per l'indicazione del tasto rapido (la numerazione parte da "0").
-accelerator => "xyz", visualizza il tasto rapido nel menu.
Le altre due funzioni inserite utilizzano: FileSelect per la visualizzazione della finestra di selezione file, in questo caso senza opzioni perchè tanto il programma non serve a niente xD
Dialog per la creazione di una finestra di dialogo, in modo da specificare bene che il programma non serve a niente...
Per maggiori info su tutte le opzioni e widget disponibili, si rimanda a alla consultazione dell'apposito manuale (man Tk e man Tk::nome_widget)
Come potete vedere in questa descrizione sommaria, l'utilizzo è decisamente semplice ma efficace.
Estremamente divertente ^^
Re: Introduzione a Perl/Tk
Le Tk sembrano le più facili librerie grafiche a mio avviso.
Ma da quello che ho visto non sono le migliori...
Ma da quello che ho visto non sono le migliori...
Re: Introduzione a Perl/Tk
le tk sono facili da usare, io stesso le utilizzo quando devo fare qualche script e renderlo più "umano", ma le migliori per me sono le gtk2
Ospite- Ospite
Re: Introduzione a Perl/Tk
l'utilizzo di Tk è graficamente parlando abbastanza minimale; diciamo che Perl come ho detto sicuramente non è apprezzato per le sue interfacce
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.