我该如何在Perl 5.004下增强Perl/TK GUI的外观?

8

我有一个应用程序,它是为Windows、Linux和Solaris构建的,使用Perl/TK GUI。由于限制,我们只能使用Perl/TK 而且我们只能使用旧版本的Perl/Tk,即5.00404

我想在这些限制内尽可能使GUI看起来更漂亮和现代化。

是否有任何网络资源提供了TK设计方案(按钮、框架、颜色等),可以帮助我完成这个任务?


我还在寻求现代化建议,就像我在这里找到的那样:

If you're finding that your Tk apps look a little ugly on X-based systems, try adding the following lines to the top of your script:

$mw->optionAdd("*font", "-*-arial-normal-r-*-*-*-120-*-*-*-*-*-*");
$mw->optionAdd("*borderWidth", 1);

1
你能给我们提供应用程序的截图吗?根据我的经验,使GUI界面美观更多地涉及设计而非小部件集(当然这取决于你对“美观”的定义)。也许如果我们看到你现在拥有什么,我们可以提出一些建议。 - Bryan Oakley
1
让我猜猜,伊戈尔,你在英特尔工作? - Artem Russakovskii
Artem:是的,我记得你,你在一个项目中优化了现有的perl代码。 - Igor
1
呵呵,世界真小。 - Artem Russakovskii
5个回答

5
尝试使用图像代替按钮元素,这样您就可以拥有任何样式并且字体可以嵌入其中。这适用于几乎任何内容不是动态的元素 - 包括窗格背景等。虽然需要更多工作,但它确实解决了您的问题,特别是如果您的项目组中有一位熟练的艺术家。

这可能不是最优雅的代码解决方案,但它非常实用。需要注意的一件事是调整大小。 - Martin DeMello
哇哦!我的第一个赏金!谢谢。 - SpliFF

5

1
因为在Perl 5.004中无法访问ttk的内容,所以被踩了。据我所知,您至少需要5.6才能访问新的绑定(Tkx或Tcl :: Tk),这些绑定允许使用最新版本的Tk中的主题支持。 - Michael Carman
这并不完全正确。有一个兼容性库(名为“tile”),可以与8.5一起使用(而且已经可以使用了几年)。我不知道它是否可以与Python一起使用,或者使用起来有多容易。 - Bryan Oakley
1
不确定它是否与Python兼容的相关性有多大? - MkV

2
使用optionAdd通过选项数据库来调整默认值是一个不错的开始。关于这个话题的讨论可以在以下链接中找到:http://tcl.projectforum.com/tk/221
从该链接下载griffin.kit,使用sdx工具来解包并定位griffin.tcl以获取一组良好的选项设置。
sdx工具请参考http://wiki.tcl.tk/3411

它是为Tcl编写的,但应该很容易地转换成Perl。 - PeterS

1

由于在Linux中,Tk :: Entry和Tk :: Text的背景是灰色的,因此我也会使用以下两行代码。

$mw->optionAdd( '*Entry.background',   'snow1' );
$mw->optionAdd( '*Text.background',    'snow1' );

将'snow1'替换为您选择的颜色。您还可以使用颜色的十六进制表示法(RGB),例如'#ff9696'。


永远不要担心问题的年龄!2年后,我在阅读您的答案,并发现它非常有用! - Glutanimate

1

Tile主题引擎可以让Tk的外观更漂亮。然而,Perl/Tk的开发落后于Tk的发展,并且无法利用Tile和其他进步。

您应该调查一下Tkx是否适合您。它与Perl/Tk并不完全兼容,但API非常接近。它是Perl和Tcl/Tk之间的桥梁,因此可以使用所有现代Tcl/Tk功能(如Tile),同时仍然将应用程序逻辑编码在Perl中。相当多的ActiveState自己的图形实用程序使用Tkx,效果相当不错。
ActiveState PPM
(来源:activestate.com)

Perl 5.00404实在是非常古老了。Tkx分发版声称依赖于Perl≥5.008...我没有足够古老的Perl来验证这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接