我非常喜欢Perl/Tk
,但我已经认为它已经过时了。我认为Tcl::Tk
和Tkx
是更好的解决方案。假设我放弃了Perl/Tk
,那么"最受支持"的选择是使用Tcl::Tk
吗?(该软件自2007年以来没有更新,其作者似乎无法联系)还是使用Tkx
?这两个选项中是否有任何一个正在积极使用/得到支持?
我非常喜欢Perl/Tk
,但我已经认为它已经过时了。我认为Tcl::Tk
和Tkx
是更好的解决方案。假设我放弃了Perl/Tk
,那么"最受支持"的选择是使用Tcl::Tk
吗?(该软件自2007年以来没有更新,其作者似乎无法联系)还是使用Tkx
?这两个选项中是否有任何一个正在积极使用/得到支持?
在底层,Tcl::Tk和Tkx都使用Tcl模块作为到Tcl/Tk的桥梁。它们之间的区别在于它们向Perl提供的API。
Tkx由ActiveState开发,他们在其工具的GUI中使用它(例如PPM)。尽管很难说它有多广泛地被使用,但它仍在积极使用中。它同样得到了支持,但因为它只是一个薄薄的Tcl层,所以没有什么需要支持的。从某种意义上讲,这是一件好事情--几乎没有什么可以更改或破坏--但这确实给人留下了弃用的印象。
Tcl::Tk起初只是一个副业项目,旨在证明与Perl/Tk的API兼容性是可能的。我非常喜欢这个想法--如果只需要将use Tk
替换为use Tcl::Tk
,就可以获得像tile(主题)支持等更新版本的Tcl/Tk的好处,那将是非常棒的。不幸的是,它还没有到达这个阶段。似乎有一些工作正在进行中,但并不多。它确实需要更多的开发人员。
就我个人而言,我使用Tkx。如果你有Perl/Tk开发经验,过渡并不太痛苦,但我认为这将是一个很难开始的地方。最糟糕的部分是您需要参考Tcl/Tk文档才能使用它。如果您不熟悉Tcl,这会让人感到尴尬,因为通过桥接到Perl引入的惊喜很少,需要从一种陌生的语言进行翻译。
(声明: 我是Tcl::pTk和Tkx的维护者,也曾向Perl/Tk、Tcl/Tk和Tcl::Tk提交过贡献。)
Perl/Tk在过去几年中已经发布了版本,并有开发,但维护者承认没有足够的时间进行重大改进,比如将Tcl/Tk 8.5+的更改合并到其中。任何想要使用较新的Tcl/Tk版本的特性或改进的人可能会对使用其中之一的Tcl/Tk“包装器”模块感兴趣(这些模块提供对一个完整的单独的Tcl/Tk安装的访问,而不是将所有Tk放在一个单独的Perl模块中)。
如果您正在开展新项目并喜欢Perl/Tk语法,则可以使用轻量级的Tcl::Tk,它使用类似于Perl/Tk语法的语法,同时也允许使用Tcl/Tk语法。 Tcl::Tk在过去的一年中进行了一些维护。
但是,如果您有现有的Perl/Tk程序,则可能需要尝试Tcl::pTk。它基于Tcl::Tk,但强调与现有程序中的Perl/Tk语法兼容性。 Tcl::pTk::TkHijack模块通过拦截use Tk;
语句,使使用Tcl::pTk相当容易。 Tcl::pTk仍在不断改进中,但尝试将其应用于其他可用程序有助于发现其他需要改进的方面。
或者,如果您对Perl/Tk不熟悉,对实际的Tcl/Tk语法更熟悉,或者熟悉语言的包装器(例如Python的Tkinter),则更好的选择可能是Tkx。正如Micheal Carman的答案所指出的那样,自2010年以来,Tkx没有得到很多维护,但主要是因为它不需要太多;随着对Tcl/Tk的改进的不断进行,Tkx通常可以自动利用这些改进。 TkDocs.com上的跨语言教程提供了Tkx语法的示例。
我去年发现了Tcl::pTk,并成为它的维护者。我主要使用它是为了使用macOS的原生aqua UI(而不是像Perl/Tk使用的XQuartz),这也是其他一些活跃用户报告使用它的原因。