忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT 视频 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖
楼主: hztj2005

哪位大侠有树的实例代码 [复制链接]

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-05-18 01:50 |显示全部楼层
本帖最后由 rubyish 于 2017-05-19 21:27 编辑

1 ge Gtk3

tree:
  1. [ Sophia
  2.     Emma
  3.     Olivia
  4.     [ Ava
  5.         Mia
  6.         [ Isabella
  7.             Riley
  8.             Aria
  9.             [ Zoe
  10.                 Charlotte
  11.                 Lily
  12.                 [ Layla
  13.                     Amelia
  14.                 ]
  15.             ]
  16.         ]
  17.         Emily
  18.         Madelyn
  19.     ]
  20.     [ Aubrey
  21.         Adalyn
  22.         Madison
  23.         [ Chloe
  24.             [ Harper
  25.                 Abigail
  26.                 [ Aaliyah
  27.                     Avery
  28.                 ]
  29.             ]
  30.             Evelyn
  31.         ]
  32.     ]
  33.     [ Nora
  34.         Kaylee
  35.         Ella
  36.         [ Ellie
  37.             [ Scarlett
  38.                 [ Arianna
  39.                     Hailey
  40.                 ]
  41.             ]
  42.         ]
  43.             
  44.     ]
  45. ]
复制代码

editor2.jpg

tu:
mexp3ok.jpg

code: v1a

  1. #!/usr/bin/perl -w
  2. use 5.010;
  3. use Gtk3 '-init';

  4. sub give;
  5. sub me;
  6. sub that;

  7. my $nor = new Pango::FontDescription;
  8. my $big = new Pango::FontDescription;
  9. $nor->set_size(12000);    # font size
  10. $big->set_size(14000);

  11. my ( $KELAS, @X, @KELAS, @POS ) = 0;
  12. # @POS = ( 50, 100 );       # set @POS or mouse position

  13. my $TREE = 'tree';
  14. give me that $TREE;

  15. #____________________SUB____________________

  16. sub that {
  17.     open my $DATA, shift;
  18.     local $_ = do { local $/; <$DATA> };
  19.     s/(\w+)/'$1',/g, s/\]/],/g;
  20.     eval;
  21. }

  22. sub give {
  23.     local $_ = shift;
  24.     @POS ? $_->move(@POS) : $_->set_position('mouse');
  25.     $_->set_skip_taskbar_hint(0);
  26.     $_->set_title( $TREE // 'tree' );
  27.     $_->show_all;
  28.     Gtk3->main;
  29. }

  30. sub me {
  31.     state $iD = 0;
  32.     my ( $tree, $kelas ) = ( @_, 0 );
  33.     my $win = new Gtk3::Window;
  34.     my $box = new Gtk3::Box( 'vertical', 0 );
  35.     my $i   = $KELAS[$kelas] = 0;

  36.     for (@$tree) {
  37.         my $but = new Gtk3::Button;

  38.         if (ref) {
  39.             $but->set_label("  $_->[0]  >");
  40.             $but->signal_connect(
  41.                 enter_notify_event => \&enter_notify_A,
  42.                 [ $win, $_, $kelas, $i, ++$iD, ~~@$tree ]
  43.             );
  44.         }
  45.         else {
  46.             $but->set_label("  $_   ");
  47.             $but->signal_connect(
  48.                 enter_notify_event => \&enter_notify_B,
  49.                 [$kelas]
  50.             );
  51.         }

  52.         $but->set_alignment( 1, 0 );
  53.         $but->modify_font($nor);
  54.         $box->add($but);
  55.         $i++;
  56.     }

  57.     $win->set_decorated(0);
  58.     $win->set_skip_taskbar_hint(1);
  59.     $win->add($box);
  60.     my ($but) = $box->get_children;
  61.     $but->set_label( $but->get_label . 'x' );
  62.     $but->signal_connect( clicked => sub { Gtk3::main_quit } );
  63.     $but->modify_font($big);
  64.     $win;
  65. }

  66. sub enter_notify_A {
  67.     my $args = pop;
  68.     my ( $win, $tree, $kelas, $i, $id, $size ) = @$args;
  69.     $X[ $KELAS[$_] ]->hide, $KELAS[$_] &&= 0 for $kelas + 1 .. $KELAS;
  70.     $KELAS = $kelas;

  71.     return if $id == $KELAS[$kelas];
  72.     $X[ $KELAS[$kelas] ]->hide if $KELAS[$kelas];
  73.     $X[$id] //= me( $tree, $kelas + 1 );
  74.     $KELAS[$kelas] = $id;
  75.     my ( $x, $y ) = $win->get_position;
  76.     my ( $w, $h ) = $win->get_size;

  77.     $i -= @$tree / 2;
  78.     $X[$id]->move( $x + $w + 1, $y + $h / $size * $i );
  79.     $X[$id]->show_all;
  80. }

  81. sub enter_notify_B {
  82.     my $kelas = pop->[0];
  83.     $KELAS[$_] && $X[ $KELAS[$_] ]->hide, $KELAS[$_] &&= 0 for $kelas .. $KELAS;
  84.     $KELAS = $kelas - 1;
  85. }
  86. __DATA__
  87. $_



复制代码


评分

参与人数 1信誉积分 +10 收起 理由
hztj2005 + 10 很给力!

查看全部评分

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-05-18 01:54 |显示全部楼层
本帖最后由 rubyish 于 2017-05-17 21:59 编辑

d . e . l  ~ ~

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
发表于 2017-05-18 11:20 |显示全部楼层
回复 5# 523066680

论坛徽章:
0
发表于 2017-05-19 23:33 |显示全部楼层
本帖最后由 hztj2005 于 2017-05-19 23:42 编辑



谢谢大侠出手!
请教一下,上面图中第一层中Sophia是父节点,有5个子节点,对吧?
    Emma
    Olivia
    Ava
    Aubrey
    Nora

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-05-20 01:54 |显示全部楼层
本帖最后由 rubyish 于 2017-05-19 21:59 编辑

回复 14# hztj2005

shide~~

print:

  1. #!/usr/bin/perl -w

  2. use 5.010;
  3. sub save;
  4. sub load;
  5. sub draw;

  6. my $tree = load 'tree';
  7. draw $tree;

  8. save $tree, 'test.3';

  9. #____________________SUB____________________

  10. sub draw { D_( $_[0], [], 1 ) }

  11. sub save {
  12.     my ( $config, $file ) = @_;
  13.     open my $save, '>', $file;
  14.     say $save '[', S_( $config, 1 ), ']';
  15.     close $save;
  16. }

  17. sub load {
  18.     open my $DATA, shift;
  19.     local $_ = do { local $/; <$DATA> };
  20.     s/(\w+)/'$1',/g, s/\]/],/g;
  21.     eval;
  22. }

  23. sub S_ {
  24.     my ( $A, $L ) = @_;
  25.     my $first;
  26.     my $TAB = '    ' x $L;

  27.     join '', map {
  28.         ref ? "${TAB}[" . S_( $_, $L + 1 ) . "$TAB]\n"
  29.             : ($first++ ? $TAB : ' ' ) . "$_\n"
  30.     } @$A;
  31. }

  32. sub D_ {
  33.       state $his = [];
  34.       my ( $do, $mo, $x ) = @_;
  35.       if ( !ref $do ) {
  36.           push @$mo, $do;
  37.           for ( my $i = 0 ; $i <= $#$mo ; $i += 2 ) {
  38.               if ( !defined $his->[$i] || $mo->[$i] ne $his->[$i] ) {
  39.                   print "|- $mo->[$i] ";
  40.               }
  41.               else {
  42.                   my $tab = $mo->[ $i + 1 ] ? ' ' : '|';
  43.                   print $tab . ' ' x ( length( $his->[$i] ) + 3 );
  44.               }
  45.           }
  46.           print "\n";
  47.           $his = $mo;
  48.           return;
  49.       }

  50.       D_( $do->[$_], [ @$mo, $do->[0], $x ], 0 ) for 1 .. $#$do - 1;
  51.       D_( $do->[-1], [ @$mo, $do->[0], $x ], 1 );
  52. }

  53. # tree

  54. __DATA__
  55. [ Sophia
  56.     Emma
  57.     Olivia
  58.     [ Ava
  59.         Mia
  60.         [ Isabella
  61.             Riley
  62.             Aria
  63.             [ Zoe
  64.                 Charlotte
  65.                 Lily
  66.                 [ Layla
  67.                     Amelia
  68.                 ]
  69.             ]
  70.         ]
  71.         Emily
  72.         Madelyn
  73.     ]
  74.     [ Aubrey
  75.         Adalyn
  76.         Madison
  77.         [ Chloe
  78.             [ Harper
  79.                 Abigail
  80.                 [ Aaliyah
  81.                     Avery
  82.                 ]
  83.             ]
  84.             Evelyn
  85.         ]
  86.     ]
  87.     [ Nora
  88.         Kaylee
  89.         Ella
  90.         [ Ellie
  91.             [ Scarlett
  92.                 [ Arianna
  93.                     Hailey
  94.                 ]
  95.             ]
  96.         ]
  97.             
  98.     ]
  99. ]

复制代码

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

本版积分规则

【有奖调查】AI时代如何迎接未知挑战?

人工智能一直在医疗行业扮演着重要角色,最早的专家系统和后来的基因诊断都是人工智能技术在医疗的行业探索。近年来,随着深度学习等技术的进步,人工智能在医疗行业的应用领域不断扩展,医学影像智能诊断、语音电子病历、癌症智能诊断等均已逐渐成为热门发展方向。
而作为人工智能重要推动力的深度学习技术的快速发展却亟需认知系统的强力支撑。
----------------------------------------
活动时间:2017年5月15日-6月5日

调查入口>>
  

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP