【问题标题】:Perl Tkx, What is the Difference Between "button" and "ttk__button"?Perl Tkx,“按钮”和“ttk__button”有什么区别?
【发布时间】:2015-01-12 17:47:24
【问题描述】:

我一直在使用 Perl Tkx 开发 GUI,发现有两个单独的函数可以用来创建按钮。 (buttonttk__button)。

到目前为止,我发现的唯一区别是 button 函数似乎使文本居中对齐,而 ttk__button 函数似乎使文本左对齐。


使用button的示例:

#!/usr/bin/perl

use strict;
use warnings;

use Tkx;

my $text = "Hello\nworld!\n\nThis is some text...";
my $mw = Tkx::widget->new(".");

my $b = $mw->new_button(
    -text => $text,
    -command => sub { exit; },
);
$b->g_grid;

Tkx::MainLoop()

此脚本将使文本居中:


使用ttk__button的示例:

#!/usr/bin/perl

use strict;
use warnings;

use Tkx;

my $text = "Hello\nworld!\n\nThis is some text...";
my $mw = Tkx::widget->new(".");

my $b = $mw->new_ttk__button(
    -text => $text,
    -command => sub { exit; },
);
$b->g_grid;

Tkx::MainLoop()

此脚本将左对齐文本:


我想知道这两个函数之间还有哪些其他区别,以及是否有任何特殊原因有两个单独的函数可以创建按钮。其中一个通常比另一个更好用吗?

还有什么方法可以使用ttk__button 函数使文本居中对齐?

编辑:

我为此添加了“Tcl”标签,因为 Perl Tkx 本质上是由 Tcl 构建的。我对 Perl 很熟悉,但在 Tcl 方面我还是个新手。

虽然乍一看可能不像,但实际上这更像是一个 Tcl 问题而不是 Perl 问题,所以我很想听听有 Tcl 经验的人的回答。


注意:

要在ttk__button 中居中文本,请将以下行添加到您的代码中:

Tkx::ttk__style_configure('TButton', -justify => 'center');

【问题讨论】:

    标签: perl user-interface button tcl tkx


    【解决方案1】:

    Button 是“传统”小部件之一。 ttk 系列小部件更现代,旨在关注主机操作系统的显示配置。如果您希望您的应用与用户选择的“主题”融为一体,请使用ttk 小部件。另一方面,如果您喜欢做很多工作来适应,或者希望您的应用程序像拇指酸痛一样突出,那么请务必使用“传统”小部件。

    可以通过-style 选项更好地控制ttk 小部件。你可能想看看教程页面@http://www.tkdocs.com/tutorial/styles.html

    不管怎样,按钮并不经常包含多行文本。还有其他一些在设计时考虑到文本布局的小部件。

    编辑:

    来自 tjwrona1992 的评论: Tkx::ttk__style_configure('TButton', -justify => 'center');

    【讨论】:

    • 好吧,这正是我想知道的,但有没有办法将文本集中在 ttk button 上?当我使用多行文本并将其全部对齐时,它看起来很丑。
    • 就个人而言,我会重新评估在按钮中放置多行文本的设计。可以通过-style 属性对ttk 小部件进行更精细的控制。
    • 嗯,我有一个按钮需要适合相对较小的空间。即使它有自己的方式来对有用的文本进行自动换行。现在,如果我不使用 "\n" 使其跨越多行,它将全部放在一行中并拉伸显示以适应它,这看起来也不是很好。
    • 您确定没有空间容纳包含文本最少的按钮和随附标签的框架?
    • 感谢使用style 的提示!在玩了一会儿之后,我开始工作了。 Tkx::ttk__style_configure('TButton', -justify => 'center');
    【解决方案2】:

    Tk 有两类小部件:传统的和tiled。传统的小部件是那些自 Tk 成立以来就存在的小部件。平铺小部件相对较新。它们通过对主题的支持来模拟原生小部件。许多(但不是全部)小部件在这两种形式中都可用。 Tile 在以Ttk 的形式集成到 Tk 8.5 之前作为一个单独的库开始。

    不幸的是,从传统小部件切换到平铺 Tk 小部件并不像添加“use ttk”语句那么简单,因为传统小部件和平铺小部件不一定具有相同的配置选项集。

    在 Tkx 中,ttk 前缀用于指定小部件的平铺版本。 Tcl Tk wiki 有一个 comparison 使用各种主题的 ttk 小部件。 (“经典”主题与传统 Tk 的外观和感觉相匹配。)以下是 buttonttk__button 在我的系统 (Win7) 上的呈现方式:

    传统的小部件更加灵活。您可以配置更多属性并在每个小部件的基础上执行此操作。平铺小部件看起来更好(即原生),并且可以更轻松地更改应用程序的整体外观。

    就个人而言,我总是在可用时使用 ttk 小部件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 2015-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多