【问题标题】:Connecting Signals with Perl and GtkBuilder使用 Perl 和 GtkBuilder 连接信号
【发布时间】:2011-05-02 00:28:06
【问题描述】:

我试图弄清楚如何从信号处理程序中访问小部件。

我有一个名为“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
{



}   

【问题讨论】:

    标签: perl gtk glade gtkbuilder


    【解决方案1】:

    您需要将要访问的小部件作为“用户数据”参数传递给信号处理程序。在这种情况下,你会做类似的事情

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

    将标签作为用户数据参数传递给所有您的信号处理程序。然后传递给on_btnVerify_clicked 的参数将是按钮本身和标签。 (抱歉有任何错误,我的 Perl 生锈了。)

    【讨论】:

    • 这适用于第一个函数/小部件,但我不完全确定如何传递更多小部件并在其他信号处理程序中访问它们。我已经尝试了一些东西,但没有完成。有什么建议吗?
    • 是的,在大型应用程序中通常发生的情况是您创建一个结构(或在 Perl 中,可能是哈希),其中包含您需要在信号处理程序中访问的所有小部件指针。然后将该哈希作为用户数据参数传递。
    【解决方案2】:

    谢谢番茄。

    这就是我将小部件传递给函数所需要的。至于函数本身,这行得通:

    sub on_btnSpacewalkVerify_clicked
    {
    
        my $self = shift;
        my $label = shift;
    
        $label->set_text("Verified");
    
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2012-12-07
      • 1970-01-01
      • 2012-10-15
      相关资源
      最近更新 更多