通过在带有字符串参数的 a上使用该->put
方法,可以创建一个简单的小部件。标签只能配置为具有单一的前景色。要实现您想要的,您可以使用(只读文本小部件)。以下代码显示一个标签小部件和一个文本小部件,但后者具有不同的颜色:Tk::Table
Tk::Label
Tk::ROText
use strict;
use Tk;
use Tk::ROText;
my $mw = tkinit;
# The monocolored Label variant
my $l = $mw->Label
(
-text => "First Name\nMYO",
-font => "{sans serif} 12",
)->pack;
# The multicolored ROText variant
my $txt = $mw->ROText
(
-borderwidth => 0, -highlightthickness => 0, # remove extra borders
-takefocus => 0, # make widget unfocusable
-font => "{sans serif} 12",
)->pack;
$txt->tagConfigure
(
'blue',
-foreground => "blue",
-justify => 'center', # to get same behavior as with Tk::Label
);
$txt->tagConfigure
(
'red',
-foreground => "red",
-justify => 'center', # to get same behavior as with Tk::Label
);
$txt->insert("end", "First Name\n", "blue", "MYO", "red");
# a hack to make the ROText geometry the same as the Label geometry
$txt->GeometryRequest($l->reqwidth, $l->reqheight);
MainLoop;
如您所见,要使文本小部件变体正常工作,需要更多的输入。因此,将此代码抽象为子例程或小部件类(可能是 CPAN 的东西?)可能很有用。另请注意,您必须自己处理文本小部件的几何形状。标签自动扩展以适应标签内容。默认情况下,文本小部件具有 80x24 个字符的几何形状,并且不会根据其内容自动缩小或扩展。在示例中,我使用 hackGeometryRequest
来强制使用与等效标签小部件相同的几何形状。也许你对硬编码很好,-width
而-height
不是。另一种解决方案可能是使用/的bbox()
方法来计算几何。Tk::Text
Tk::ROText