Chapter 4. Button, Checkbutton, and Radiobutton Widgets 按钮,复选按钮,单选按钮
几乎所有的Perl/Tk 应用使用按钮以这样或者那样的方式。有3种不同的按钮类型 部件 在标准的TK里
Button,Checkbutton 和Radiobutton.
这章节覆盖了3种类型的按钮 :
每个按钮在这章看起来都不同,主要是选择指标的使用
按钮部件根本不使用指标, 但是Checkbutton 和Radiobutton 部件使用它们来表明
按钮是否被选中 ,按钮部件是:
Button:
一个简单的按钮,shown in Figure 4-1. 用户可以按下按钮 通常一个立即的动作产生结果
Figure 4-1. Button widget 按钮部件
Checkbutton
一个Checkbutton 显示在图4-2,选中或者未被选中,只有可见的表示被改变,
状态是不校验的 直到后面,
Checkbuttons 按钮可以用于单个的或者按组
Figure 4-3. Radiobutton widget 单点按钮
一个按钮 是Tk的简单的部件,用户按下它 然后一些立即发生。
按钮的标签 让动作更清晰,
比如, 文本比如Quit, save 或者打印给出用户一个好的注意 当按下按钮会看到的操作,
当按钮被按下, 看起来一模一样,除非程序改变了文本或者颜色
Checkbuttons 是当你需要选择一个,一些或者所有的条目。 比如,
一个消费清单 可能有 Bread, Milk, Soda, and Eggs.
如果你都不需要 你可以不选, 或者选择所有 如果选择一切
当用户点击每个按钮, 选项指标会被填满 或留空
Figure 4-4. Checkbuttons used for a shopping list 可选按钮用于消费列表
Figure 4-5. Radiobuttons
对于任何部件被创建, 你调用一个方法从父部件 匹配部件的名字:
4.1. Creating Button Widgets
对于任何你创建的部件,你调用一个方法从父部件 匹配部件的名字:
$button = $mw->Button->pack;
$rb = $mw->Radiobutton->pack;
$cb = $mw->Checkbutton->pack;
这些是不现实的例子 你最有可能用一些选项 当你创建不同类型的按钮:
# Create a Button widget
$mw->Button(-text => 'Go', -command => \&go_go_go)->pack;
# Create a Checkbutton
$cb = $mw->Checkbutton(-text => 'Red', -onvalue => 'Red',
-offvalue => '')->pack;
# Create three Radiobuttons in Frame widget $f1
# Link them using $favcolor
foreach (qw/red blue green/) {
$f1->Radiobutton(-text => $_, -variable => \$favcolor,
-value => $_)->pack(-anchor => 'w');
}
我们将解释 选项用于先前的例子 ,特别是 -command 预计回调
唯一一次 你可能要保存一个引用 当你创建一个按钮,设置文本 设置一个简单的回调
$mw->Button(-text => 'Quit', -command => sub { print 'Bye!'; exit; })->pack;
4.2. Standard Options for Each Button Type 对于每种按钮类型的标准选项:
在我们进入所有的选项 对于每个按钮部件, 让我们来看看常见的问题:
当我们创建一个按钮,使用 -text and -command options.
-text 选项让用户指导 按钮是干什么用的,
-command 选项 当用户按下按钮 执行了什么
$b = $mw->Button(-text => 'Exit', -command => sub { exit; } )->pack;
# Use the same sub for many Buttons
$b = $mw->Button(-text => 'Red', -command => [\&change_color, 'red'])->pack;
$b = $mw->Button(-text => 'Blue',
-command => [\&change_color, 'blue'])->pack;
$b = $mw->Button(-text => 'Green',
-command => [\&change_color, 'green'])->pack;
当创建Checkbuttons时, 你是用 -variable除了 -text
使用 -variable 给你一个简单的方式来发现 按钮是否被点击(你想很少用到-command 在Checkbutton里)
$mw->Checkbutton(-text => 'Print Header', -variable => \$print_header);
sub print_document {
if ($print_header) {
# Code to print header here...
}
}
存储在$print_header 的值 是1或者0 一个简单的test 会告诉你 如果Checkbutton 是被检查了
当我们创建单选按钮,我们总是创建多于一个使用 -text, -variable, and -value options:
4.3. Table of Options for Button-Type Widgets 表选项用于 按钮类型部件
按钮组件贡献几乎所有的相同选项,表4-1 显示了一个完整的选项列表
哪个部件会应用 我们将讨论选择在更多的细节 放我们研究按钮能干什么
4.4. Displaying Text on Buttons 在按钮上显示文本框:
显示当按钮按下后 按钮会做什么,设置它的文本字符串使用 -text or -textvariable 选项
描述的文本字符串应该是短的和简单的:
文本选项 是更加通用的方式来指定文本字符串:
-text => 'Submit'
字符串可以是任何东西, 字母数字,新行 或者变量。
文本字符串 像其他字符串一样 在perl, 如果它是放在单引号里,它就是字面上的意思
如果放在双引号里,它是插入的。
插值只发生一次( 第一次是选项被解析)
如果一个变量在程序后面改变, 它对按钮的文本没有影响。
没有默认的对于-text岫岩县,如果text没有指定,Button 会简单没有任何文本。
另外一种方式来实现文本是通过使用 -textvariable选项。
-textvariable 选项 总是一个scalar 标量来关联按钮
4.9. The -command Option 命令行选项:
你总是创建按钮部件 带上 -command option,这是因为 当按钮点击后做一些事情,
我们和一个按钮回调联系在一起。一个按钮实际上是的Perl的一个子函数
会被调用当鼠标按钮 1 被释放
简单的方式来指定一个 -command 回调是通过使用一个函数引用,在我们的很多例子中,
我们使用一个匿名代码引用到一个子函数 来简单的执行一个exit语句
$mw->Button(-text => "Done", -command => sub { exit })->pack;
我们也可以引用一个显示的子过程( 可以从多个地方调用)
$mw->Button(-text => "Done", -command => \&save_and_exit)->pack;
注意 在两个例子里,-command 除了一个引用到一些Perl代码。
还有另外的回调格式
fully explained in Chapter 15, "Anatomy of the MainLoop".
Whereas Button widgets 基本没有回调, Checkbutton and Radiobutton widgets
是设计用于改变变量的值
通常, 没有立即的动作是需要的 当一个Checkbutton or Radiobutton 切换
4.20. Configuring a Button 配置一个按钮:
通常,你创建一个目录 随后显示它 我们还没有明确讨论的是你能做什么:
所有选项 没有被指定 ,当你创建一个部件。 你可以配置一个部件 随后 使用配置方法,
只要你还有部件的引用,此外, 你可以找出一个部件是如何配置的通过使用cget 方法 这里有一个例子:
$b = $mw->Button(-text => "Self referencing Button")->pack;
$b->configure(-command => [\&send_button, $b]);
在本例中,我们需要使用实际的部件引用 在回调 -command.
我们不能创建回调在没有部件引用的情况下, 使用配置方法
实际上,我们可以创建回调当部件被创建时 如果部件引用是预先申明的 在$b对象
确定 当前选项的值,调用cget
$state = $button->cget(-state); # Get the current value for -state
转载于:https://www.cnblogs.com/zhaoyangjian724/p/6200336.html