Perl Tkx,"button" 和 "ttk__button" 有什么区别?

Perl Tkx, What is the Difference Between "button" and "ttk__button"?

我一直在使用 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');

Button 是 'traditional' 小部件之一。 ttk 系列小部件更现代,旨在关注主机 OS 的显示配置。如果您希望您的应用与用户选择的 'theme' 融为一体,请使用 ttk 小部件。另一方面,如果您想做很多工作来适应,或者希望您的应用程序像拇指一样突出,那么一定要使用 'traditional' 小部件。

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

就其价值而言,按钮并不经常包含多行文本。还有其他小部件在设计时考虑了文本布局。

编辑:

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

Tk 有两个 类 小部件:传统和 tiled. Traditional widgets are those that have been around since Tk's inception. Tiled widgets are relatively new. They emulate native widgets via support for themes. Many (but not all) widgets are available in both forms. Tile started as a separate library before being integrated into Tk 8.5 as Ttk

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

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

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

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