【问题标题】:PerlTk Label - Different colour text in same widgetPerlTk 标签 - 同一小部件​​中的不同颜色文本
【发布时间】:2013-11-22 12:26:12
【问题描述】:

我编写了一个与我们的 psql 数据库交互的 GUI。对于给定的日期,gui 会显示一个包含各种标识符和信息位的人员列表。我使用 Tk::Table 来显示数据

eg
my $f_mainframe = $mw -> Frame(-bg=>'white');
$f_mainframe -> pack(-side=>'top', -expand=>1, -fill=>'both');
my $itable = $f_mainframe -> Table(-rows => 13,
                   -columns=>30,
                   -fixedrows => 1,
                   -fixedcolumns => 1,
                   -relief => 'raised') -> pack();

$itable->put(1,$firstnamecol,"First Name\nMYO");

是否可以将“名字”涂成黑色,将“MYO”涂成红色?

【问题讨论】:

    标签: perl tk perltk


    【解决方案1】:

    通过在带有字符串参数的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 没问题。另一种解决方案是使用Tk::Text/Tk::ROTextbbox()方法来计算几何。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多