有人可以将我的问题视为标题吗?我在我创建的表单中有文本和条目小部件,但不知何故,我希望如果我可以做一些文本和条目小部件,我会放置""其中的措辞,如果用户想要使用该条目,他们只需鼠标点击列和""措辞会自动清除。我可以知道怎么做吗? 这是我没有用鼠标点击清除功能的代码。感谢。
#This section apply text widget.
$mwf->Label(-text => 'Waiver',
-justify => 'left'
)->grid(-sticky => 'w', -column => 0, -row => 8);
my $scrollbar = $mwf->Scrollbar()
->grid( -sticky => 'ns',-column=>2, -row => 8);
my $waiver = $mwf->Text(-height => 5,
-width => 100,
-background => "white",
-wrap => 'word',
-yscrollcommand => ['set' => $scrollbar],
)->grid(-sticky => 'w', -column => 1, -row => 8);
#This section apply entry widget.
$mwf->Label(-text => 'Exclude View',
-justify => 'left'
)->grid(-sticky => 'w', -column => 0, -row => 10);
my $exclude = $mwf->Entry(-width => 100,
-background => "white",
)->grid(-sticky => 'w', -column => 1, -row => 10);
push @entries, $exclude ;
$exclude -> insert('end', '<optional>') ;
答案 0 :(得分:2)
您可以使用触发事件时调用的绑定
格式$widget->bind('<event>' => callback);
参见下面的示例程序
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
use Tk::Entry;
use Tk::TextUndo;
my $win = new MainWindow;
$win->geometry("400x300");
my $entry = $win->Entry()->pack;
my $text = $win->TextUndo()->pack;
$text->insert('end', 'default');
$entry->insert('end', 'default');
$text->bind('<FocusIn>' => \&textfocus);
$entry->bind('<FocusIn>' => \&entryfocus);
MainLoop;
sub textfocus {
my $info = $text->Contents();
if($info =~ /^default$/){
$text->delete('1.0', 'end');
}
}
sub entryfocus {
my $info = $entry->get();
if($info =~ /^default$/){
$entry->delete('0.0', 'end');
}
}
有关perl \ tk事件的更多信息:http://docstore.mik.ua/orelly/perl3/tk/ch15_02.htm#INDEX-2191
编辑:
触发事件时,对调用窗口小部件的引用将传递给回调。 下面是一种只为每个小部件使用一个回调子的方法。
$text->bind('<FocusIn>' => \&w_focus);
$entry->bind('<FocusIn>' => \&w_focus);
MainLoop;
sub w_focus {
my $widget = shift;
my ($start, $info);
if($widget == $text){
$start = '1.0';
$info = $widget->Contents();
}
else {
$start = '0.0';
$info = $widget->get();
}
if($info =~ /^default$/){
$widget->delete($start, 'end');
}
}