免费注册 查看新帖 |

Chinaunix

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

Perl TK有像QQ界面一样的卷帘式菜单的组件吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-03 16:14 |只看该作者 |倒序浏览
RT,请知道的朋友告之,谢谢了!

论坛徽章:
0
2 [报告]
发表于 2011-09-03 20:08 |只看该作者
  1. #!perl -w
  2. use Tk;
  3. $mw = MainWindow->new;
  4. $mw->title( 'Tk' );

  5. $FRAME_L  = $mw->Frame->pack(qw/-side left -fill both/);
  6. $WIDGET_F = $FRAME_L->Labelframe()->pack(qw/-side top -fill both -expand 1/);

  7. my %section = (
  8.         A        => [1,2,3],
  9.         B        => [4,5,6],
  10.         C        => [7,8,9],
  11. );
  12. my (@frames,@button);
  13. for my $sect_name (sort keys %section) {
  14.         my $b;
  15.         my $f = $WIDGET_F->Frame(
  16.                 -bg          => 'green',
  17.                 -relief      => 'sunken',
  18.                 -borderwidth => 1
  19.         );
  20.         $b = $WIDGET_F->Radiobutton(
  21.                 -text        => $sect_name,
  22.                 -indicatoron => 0,
  23.                 -value       => $sect_name,
  24.                 -width                 => 25,
  25.                 -bg                         => '#af1a3c6a6872',
  26.                 -fg                         => 'white',
  27.                 -command => sub {
  28.                         $_->packForget for @frames;
  29.                         $f->pack(
  30.                                 -after => $b,
  31.                                 qw/-side top -fill both -expand 1 -padx 1 -pady 1/
  32.                         );
  33.         }
  34.         )->pack(qw/-fill x -side top -padx 1 -pady 1/);
  35.        
  36.         for my $par_tmp (@{ $section{$sect_name} }) {
  37.                 $f->Button(
  38.                         -text    => "$par_tmp",
  39.                         -relief  => 'ridge',
  40.                         -bg      => '#8189ce14cf5b',
  41.                         -fg      => 'black',
  42.                 )->pack(qw/-side top -fill x -padx 4  /);
  43.         }

  44.         push @frames,$f;
  45.         push @button,$b;
  46. }

  47. $FRAME_L->Button(
  48.         -text        => "CLOSE",
  49.         -relief      => 'sunken',
  50.         -borderwidth => 1,
  51.         -bg          => "white",
  52.         -fg          => "black",
  53.         -command     => sub { exit; },
  54. )->pack(qw/-side bottom -fill x -padx 1 -pady 2 /);

  55. MainLoop;

复制代码

论坛徽章:
0
3 [报告]
发表于 2011-09-05 09:31 |只看该作者
kk这个案例很喜欢{:3_189:}

论坛徽章:
0
4 [报告]
发表于 2012-01-07 15:43 |只看该作者
很好的案列,有前途

论坛徽章:
0
5 [报告]
发表于 2012-01-08 13:01 |只看该作者
回复 2# kk861123

这代码很神奇啊,呵呵。。

论坛徽章:
0
6 [报告]
发表于 2012-01-09 19:02 |只看该作者
回复 5# andy20008


    呵呵,其实就是进行代码的重组。

论坛徽章:
0
7 [报告]
发表于 2012-01-10 20:08 |只看该作者
回复 6# kk861123


:wink:

我的写法是这样的:
  1. pack(-side => 'left', -fill => 'both', -expand => 1);
复制代码
kk861123兄,

  1. $FRAME_L  = $mw->Frame->pack(qw/-side left -fill both/);
  2. $WIDGET_F = $FRAME_L->Labelframe()->pack(qw/-side top -fill both -expand 1/);
  3. $b = $WIDGET_F->Radiobutton(......)->pack(qw/-fill x -side top -padx 1 -pady 1/);
复制代码
这种写法有点看不大习惯啊,感觉有点看不懂,呵呵。。

论坛徽章:
0
8 [报告]
发表于 2012-01-11 08:59 |只看该作者
本帖最后由 kk861123 于 2012-01-11 09:00 编辑

回复 7# andy20008


    很好懂,理解为向pack传递一个hash,我的写法相当于
  1. %param = qw/-side left -fill both/;
复制代码
偷懒~{:3_183:}

论坛徽章:
0
9 [报告]
发表于 2012-01-13 13:27 |只看该作者
回复 8# kk861123


呵呵,理解了,谢谢。。

论坛徽章:
0
10 [报告]
发表于 2012-06-11 11:54 |只看该作者
回复 2# kk861123

达达,有个问题反馈一下
1、这个排序不适合中文吧?特别是自定义的标签?
2、如何对数组里的每个变量定义子程序?

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP