《Perl-Tk教程之
按钮Button、
复选按钮Checkbutton、
单选按钮Radiobutton》
Perl-Tk中有三种不同形式的按钮组件可供选择,它们分别是按钮(Button), 复选按钮(Checkbutton), 和单选按钮(Radiobutton),如下图所示:

这三种按钮看起来是不同的,且最重要的不同之处在于它们的选择指示器(
selection indicators)的使用是不同的。Button根本就没有选择指示器,使用非常简单;Checkbutton和Radiobutton控件都有选择指示器,用来指示哪些选项被选中了,前者可以选中多项内容,而后者只能选中一项内容。
按钮Button
我们可以用下面的方式在主窗口$mw里面创建一个按钮,$bt是生成的按钮的指针。
$bt = $mw->Button->pack;
在Button里面有一些选项,我们可以控制按钮上面显示的文字以及鼠标单击按钮希望执行的命令。
例如,下面的-text选项用来控制按钮上显示文字“Click Me”,鼠标单击按钮之后将调用子程序print_click_info打印"Button is clicked!\n"。
$bt = $mw->Button(-text => 'Click Me', -command => \&print_click_info)->pack;
完整的程序如下:
#!/usr/bin/perl -wuse Tk; $mw = MainWindow->new;$mw->geometry("300x140");$mw->title("Button"); my $bt = $mw->Button(-text => "Click Me", -command => \&print_click_info)->pack(); sub print_click_info { print "Button is clicked!\n";} MainLoop; |
效果:
复选按钮Checkbutton
我们可以用下面的方式在主窗口$mw里面创建一个复选按钮Checkbutton,$cb是生成的复选按钮的指针。
$cb = $mw->Checkbutton->pack;
与Button类似,Checkbutton也有控制显示文字的选项-text,以及复选按钮被勾选之后执行某个子程序的选项-command。
除此之外我们还可以通过该选项是否被勾选来控制一些变量的值。
比如我们想通过某个选项是否被勾选来控制$a_selected的值,如果被勾选赋值为'a',没有被勾选就赋值为0。
我们可以用下面的语句:
$cb = $mw->Checkbutton(-text => 'a', -variable => \$a_selected, -onvalue => 'a', -offvalue => 0)->pack;
为了显示出当前变量$a_selected的值,我们可以再加上-command选项打印它的值。
完整的程序如下:
#!/usr/bin/perl -wuse Tk; $mw = MainWindow->new;$mw->geometry("300x140");$mw->title("Hello"); my $a_selected;$mw->Checkbutton(-text => 'a', -variable => \$a_selected, -onvalue => 'a', -offvalue => 0, -command => \&print_click_info)->pack; sub print_click_info { print "the value of var \$a_selected is $a_selected!\n";} MainLoop; |
点击效
果如下:

Checkbutton经常单个使用或者多个组成一组共同使用。
单选按钮Radiobutton
单选按钮,顾名思义类似于我们做的单选题,给你很多个答案,让你从中选一个,因此选项一般大于等于2个。
根据前面的讲解,这个内容应该很容易理解,就不详细解释了,我们用foreach来创建多个选项,当某个选项被选中后打印当前选中的颜色。
程序:
#!/usr/bin/perl -wuse Tk; $mw = MainWindow->new;$mw->geometry("300x200");$mw->title("Listbox"); my $selected_color; foreach (qw/red yellow green blue grey/) { $mw->Radiobutton(-text => $_, -value => $_, -variable => \$selected_color, -command => sub {print "current color is $selected_color\n";})->pack(-fill => 'x');} MainLoop; |
动图效果:
习题:感兴趣的童鞋可以尝试将三种不同的Button集成到一起,实现类似推文开头的效果,点击某个Button,在terminal里面打印出被点击的项。
Hello summer
相关推文
Perl Tk在IC设计中的应用、Windows、Linux平台下的安装-各种错误的摸索解决Perl-Tk入门教程 - 创建一个窗口Perl-Tk教程之小部件 - 框架、文本、入口、按钮、标签Perl-Tk教程之Listbox列表框控件(附完整代码)
网易云课堂
视频课程

如果喜欢本公众号也请多多分享哟
谢谢您的关注

## 为了方便大家交流
讨论 ##
## 建了一个QQ群 ##
##
集成电路设计及EDA教程
##
## 加群请备注:
EDA
##

# 本公众号有个红包和资料福利
微信群
#
# 可以先加我微信,我拉你进群 #
# 加我微信 请备注下面问题的答案 #
# ASIC的全称 #