2011-05-02 59 views
4

我在想如何從信號處理程序中訪問一個小部件。使用Perl和GtkBuilder連接信號

我有一個名爲「lblVerify」的標籤,我只是想在點擊按鈕時將文本更改爲「已驗證」。我知道我需要使用像Gtk2 :: Label-> set_text,但我不完全確定如何從on_btnVerify_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 
{ 



} 

回答

2

您需要將想要訪問的小部件作爲「用戶數據」參數傳遞給信號處理程序。在這種情況下,你會做這樣的事情

$label = $builder->get_object("lblVerify"); 
$builder->connect_signals($label); 

其通過標籤的用戶數據參數所有的信號處理程序。然後傳遞給on_btnVerify_clicked的參數將是按鈕本身和標籤。 (對不起,我的Perl很生鏽。)

+0

這工作的第一個功能/插件,但我不完全知道如何通過更多的widget,在其他信號處理程序訪問它們。我已經嘗試了一些東西,但沒有提到。有什麼建議麼? – 2011-05-02 18:07:33

+0

是的,在一個更大的應用程序中通常會發生的情況是,您需要在信號處理程序中創建需要訪問的所有窗口小部件指針的結構(或者在Perl中,可能是哈希)。然後您將該散列作爲用戶數據參數傳遞。 – ptomato 2011-05-03 09:42:06

0

感謝ptomato。

這就是我需要讓窗口部件傳遞給函數的東西。至於本身的功能,這工作:

sub on_btnSpacewalkVerify_clicked 
{ 

    my $self = shift; 
    my $label = shift; 

    $label->set_text("Verified"); 

}