免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2929 | 回复: 4
打印 上一主题 下一主题

用perl以来,第一个gtk的程序··· [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-25 01:19 |只看该作者 |倒序浏览
发现用perl写gtk挺容易上手的,第一次用perl写gtk····当入门写的一个小东西·····呵呵···写的不地道···呵呵··
  1. use strict;
  2. use Gtk2 '-init';
  3. use Glib qw(TRUE FALSE);
  4. use Encode qw(decode);
  5. my $encoding = "gbk";
  6. my $win=Gtk2::Window->new('toplevel');
  7. $win->set_position('center_always');
  8. $win->set_title(decode($encoding, '简单计算器' ));
  9. $win->set_size_request(300,300);
  10. my @btns;#按钮数组
  11. #create button
  12. for (0..9,'+','-','CE','=')   
  13. {
  14.         push @btns,Gtk2::Button->new($_);
  15. }
  16. #create label
  17. my $label=Gtk2::Label->new('0');
  18. $label->set_justify("right");
  19. #boxes and table
  20. my $vbox=Gtk2::VBox->new(FALSE,4);
  21. my $hbox=Gtk2::HBox->new(FALSE,4);
  22. my $table=Gtk2::Table->new(4,3,FALSE);
  23. #pack in hbox
  24. for my $btn (@btns)
  25. {
  26.         my $btn_label=$btn->get_label();
  27.         $hbox->add($btn) if $btn_label eq 'CE' or $btn_label eq '=';
  28. }
  29. #pack in table
  30. my ($i,$j)=(0,0);
  31. for my $num_btn (@btns)
  32. {
  33.         my $btn_label=$num_btn->get_label();
  34.         if($btn_label=~/^[0-9+-]$/)
  35.         {
  36.                 while($i<=2)#控制行
  37.                 {
  38.                         while($j<4)#控制列
  39.                         {
  40.                                 $table->attach_defaults($num_btn,$i, $i+1, $j, $j+1);
  41.                                 last;
  42.                         }
  43.                         $i>=2 ?($i=0,++$j) : (++$i);
  44.                         last;
  45.                 }
  46.         }
  47. }
  48. #pack label,table,hbox in vbox
  49. $vbox->pack_start($label,TRUE,TRUE,0);
  50. $vbox->pack_start($table,TRUE,TRUE,0);
  51. $vbox->pack_start($hbox,TRUE,TRUE,0);
  52. my $text='';#存放计算式
  53. #设置callback
  54. for (@btns)
  55. {
  56.         my $btn_lb=$_->get_label();
  57.         if($btn_lb=~/^[0-9+-]$/)
  58.         {
  59.                 $_->signal_connect(clicked =>\&btn_clicked);
  60.         }
  61.         elsif($btn_lb=~/^CE$/)
  62.         {
  63.                 $_->signal_connect(clicked =>\&btn_CE);
  64.         }
  65.         else
  66.         {
  67.                 $_->signal_connect(clicked =>\&btn_equal);
  68.         }
  69. }
  70. $win->signal_connect('delete_event' => sub { Gtk2->main_quit; });
  71. #pack vbox in window
  72. $win->add($vbox);
  73. $win->show_all();
  74. Gtk2->main();

  75. sub btn_clicked
  76. {
  77.         my $btn=shift;
  78.         $text.=$btn->get_label();
  79.         $label->set_text($text);
  80. }

  81. sub btn_CE
  82. {
  83.         my $btn=shift;
  84.         $text='';
  85.         $label->set_text(0);
  86. }

  87. sub btn_equal
  88. {
  89.         my $btn=shift;
  90.         $text=eval($text);
  91.         $text='ERROR' if !defined $text;
  92.         $label->set_text($text);
  93. }
复制代码

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
2 [报告]
发表于 2010-07-25 21:33 |只看该作者
加油,好好加油

论坛徽章:
0
3 [报告]
发表于 2010-07-26 11:15 |只看该作者
不知道楼主能不能回答一下我的问题:
http://bbs.chinaunix.net/thread-1754558-1-1.html

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
4 [报告]
发表于 2010-07-26 13:32 |只看该作者
都,2010年了
还脱离图形化界面编制工具,开发GUI就是杯具。。。。。。

论坛徽章:
0
5 [报告]
发表于 2010-07-26 14:28 |只看该作者
回复 2# iakuf

小弟是参考你的文章哇··受益匪浅·
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP