Segnali di collegamento con perl e gtkbuilder
-
27-10-2019 - |
Domanda
Sto cercando di capire come accedere a un widget all'interno di un gestore del segnale.
Ho un'etichetta chiamata "Lblverify" che voglio solo cambiare il testo in "Verified" quando faccio clic sul pulsante. So che devo usare qualcosa come gtk2 :: etichetta-> set_text ma non sono del tutto sicuro di come accedere alle proprietà del widget dalla funzione ON_BTNVERIFICE_CLICKED.
#!/usr/bin/perl
use strict;
use warnings;
use Glib qw{ TRUE FALSE };
use Gtk2 '-init';
my $builder;
my $window;
# get a new builder object
$builder = Gtk2::Builder->new();
# load the Gtk File from GLADE
$builder->add_from_file( "testglade.xml" )
or die "Error loading GLADE file";
# create the main window
$window = $builder->get_object( "window1" )
or die "Error while creating Main Window";
# connect the event handlers
$builder->connect_signals( undef );
$window->show_all();
$builder = undef;
Gtk2->main();
exit;
sub on_btnVerify_clicked
{
}
Soluzione
È necessario passare i widget a cui si desidera accedere come parametro "dati utente" al gestore del segnale. In questo caso, faresti qualcosa di simile
$label = $builder->get_object("lblVerify");
$builder->connect_signals($label);
che passa l'etichetta come parametro dati utente a tutto I tuoi gestori di segnale. Quindi gli argomenti sono passati on_btnVerify_clicked
sarà il pulsante stesso e l'etichetta. (Ci scusiamo per eventuali errori, il mio perl è piuttosto arrugginito.)
Altri suggerimenti
Grazie Ptomato.
Questo era ciò di cui avevo bisogno per far passare il widget alla funzione. Per quanto riguarda la funzione stessa, ha funzionato:
sub on_btnSpacewalkVerify_clicked
{
my $self = shift;
my $label = shift;
$label->set_text("Verified");
}