我真的很喜欢Perl/Tk,但已经认为它是DOA.我认为Tcl::Tk并且Tkx是更好的解决方案.假设我放弃了Perl/Tk.是否是"最受支持"的路线Tcl::Tk(自2007年以来一直没有更新,其作者似乎无法联系到),或者Tkx?这些是否被积极使用/支持?
有没有人知道用TKX制作的GUI的好IDE?像NetBeans或VS这样的拖放功能会很棒.
我一直在使用Perl Tkx开发GUI,并发现可以使用两个单独的函数来创建按钮.(button和ttk__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()
Run Code Online (Sandbox Code Playgroud)
此脚本将使文本居中:

示例使用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 …Run Code Online (Sandbox Code Playgroud) 我正在使用Perl Tkx创建一个简单的应用程序,并允许用户选择一个目录.而不是使用文本包装或将框拉伸到荒谬的长度来显示整个目录名称,如果名称太长,我想截断它并将"..."追加到最后.
问题是标签的宽度被定义为某个任意值(如40).如果这个值是标签可以容纳多少个字符的度量,我可以将字符串截断为37并附加"...",但似乎并非如此.
有谁知道-width使用Perl Tkx的标签实际上是什么?我怎样才能找到-width我的字符串占用的单位数量,这样我就可以找出适当的点来截断它的位置?
编辑:
我在tcl手册中找到了这个答案:
数据库类:宽度指定标签的所需宽度.如果标签中正在显示图像或位图,则该值以屏幕为单位(即Tk_GetPixels可接受的任何形式); 对于文本,它是字符.
如果未指定此选项,则标签的所需宽度将根据图像或位图或其中显示的文本的大小计算.
这应该意味着对于40的宽度来截断文本我应该只需要将字符串截断为37个字符并添加"...".
我通过用所有"M"填充标签来测试这一点.我使用字母"M",因为它通常是最宽的字符(见这里).我编写的代码截断为37"M"并在末尾添加"...",但"M"似乎在大约24"M"之后溢出标签的末尾.
这意味着假设它只是拉伸标签以适应最宽的角色40这是不安全的...因此我的问题仍然没有答案.
如何确定字符串的"宽度",以便我可以适当地截断它?
EDIT2:
我找到了一个解决方法,但它仍然不是我想要的解决方案.如果将标签上的文本更改为固定宽度字体,它将正常工作.它看起来不太好看,所以我真的很喜欢适用于非固定宽度字体的解决方案.
以下是我的规格:OS X Tiger Perl 5.8使用捆绑了ActiveTcl v8.5的Tkx
我已经使用PAR/pp成功创建了具有上述配置的独立应用程序,但它不是一个完全令人满意的解决方案:
是否有其他途径可以绕过这些问题?
我发现在指定-commandTkx小部件的参数时,我必须匿名包装已定义的子例程,这有点奇怪.
TkDocs教程的摘录证明了这一点:
my $cb = $frm->new_ttk__button ( -text => "Calculate",
-command => sub {calculate();} );
sub calculate {
$meters = int(0.3048*$feet*10000.0+.5)/10000.0 || '';
}
Run Code Online (Sandbox Code Playgroud)
为什么当我写不它的工作-command => &calculate()还是-command => \&calculate()?
perl ×6
tkx ×6
tcl ×2
button ×1
ide ×1
par ×1
string ×1
subroutine ×1
tk-toolkit ×1
truncate ×1