文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Gtk2-Perl···win下的第一个perl的gtk程序····

Gtk2-Perl···win下的第一个perl的gtk程序····

时间:2010-07-25  来源:wfnh

最近不知怎样··搞去了··gtk-perl了·······以前在linux用c写过gtk···不过··不是一般的难哇··可能我的c太烂了···发现用perl容易写很多哇··哈哈··

#BY Weigun http://blog.chinaunix.net/u2/70443/

use strict;
use Gtk2 '-init';
use Glib qw(TRUE FALSE);
use Encode qw(decode);
my $encoding = "gbk";
my $win=Gtk2::Window->new('toplevel');
$win->set_position('center_always');
$win->set_title(decode($encoding, '简单计算器' ));
$win->set_size_request(300,300);
my @btns;#按钮数组

#create button

for (0..9,'+','-','CE','=')
{
    push @btns,Gtk2::Button->new($_);
}
#create label

my $label=Gtk2::Label->new('0');
$label->set_justify("right");
#boxes and table

my $vbox=Gtk2::VBox->new(FALSE,4);
my $hbox=Gtk2::HBox->new(FALSE,4);
my $table=Gtk2::Table->new(4,3,FALSE);
#pack in hbox

for my $btn (@btns)
{
    my $btn_label=$btn->get_label();
    $hbox->add($btn) if $btn_label eq 'CE' or $btn_label eq '=';
}
#pack in table

my ($i,$j)=(0,0);
for my $num_btn (@btns)
{
    my $btn_label=$num_btn->get_label();
    if($btn_label=~/^[0-9+-]$/)
    {
        while($i<=2)#控制行

        {
            while($j<4)#控制列

            {
                $table->attach_defaults($num_btn,$i, $i+1, $j, $j+1);
                last;
            }
            $i>=2 ?($i=0,++$j) : (++$i);
            last;
        }
    }
}
#pack label,table,hbox in vbox

$vbox->pack_start($label,TRUE,TRUE,0);
$vbox->pack_start($table,TRUE,TRUE,0);
$vbox->pack_start($hbox,TRUE,TRUE,0);
my $text='';#存放计算式

#设置callback

for (@btns)
{
    my $btn_lb=$_->get_label();
    if($btn_lb=~/^[0-9+-]$/)
    {
        $_->signal_connect(clicked =>\&btn_clicked);
    }
    elsif($btn_lb=~/^CE$/)
    {
        $_->signal_connect(clicked =>\&btn_CE);
    }
    else
    {
        $_->signal_connect(clicked =>\&btn_equal);
    }
}
$win->signal_connect('delete_event' => sub { Gtk2->main_quit; });
#pack vbox in window

$win->add($vbox);
$win->show_all();
Gtk2->main();

sub btn_clicked
{
    my $btn=shift;
    $text.=$btn->get_label();
    $label->set_text($text);
}

sub btn_CE
{
    my $btn=shift;
    $text='';
    $label->set_text(0);
}

sub btn_equal
{
    my $btn=shift;
    $text=eval($text);
    $text='ERROR' if !defined $text;
    $label->set_text($text);
}


相关阅读 更多 +
排行榜 更多 +
幸存者的命运

幸存者的命运

飞行射击 下载
精英战区3d

精英战区3d

飞行射击 下载
货运猎人

货运猎人

飞行射击 下载