通過在帶有字符串參數的Tk::Table
上使用->put
方法,創建了一個簡單的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個字符的幾何圖形,並且不會根據其內容自動收縮或擴展。在示例中,我使用了一個使用GeometryRequest
的黑客來強制與等效標籤小部件相同的幾何體。代替硬編碼-width
和-height
也許你沒問題。另一種解決方案可能是使用bbox()
方法Tk::Text
/Tk::ROText
來計算幾何。