Perl程序的Windows GUI工具包有什么好的select?

我正在考虑在我的Windows桌面上做一些自动化的任务(例如,通过大量的音乐/文本/照片文件等进行sorting)。

看到我的主要开发人员专长领域是Unix上的Perl,为了提高开发效率,我宁愿坚持使用Perl来编写我所需要的业务逻辑。

问题是,如果我想在工作之上拍一些GUI(Unix上的ala Perl :: Tk),我的GUI工具包选项是什么,你推荐使用哪一个?

请注意,我希望这个问题对其他SO用户来说是一个很好的学习机会,所以即使他们不一定满足我自己的下面列出的限制/需求,我也会欢迎任何答案,尽pipe说明阐述了您的解决scheme如何关联这些考虑将是非常受欢迎的。

我的考虑主要是由于我想要一个快速开发的个人使用的工具来节省我现在手动完成的任务的时间。

  • 主要考虑的是发展的圆满性 – 正如Perl的口号所言,“简单的事情应该是容易和难的事情”。 特别是第一部分:)

  • 只要使用了组件,就更喜欢(但不是坚持)尽可能地原生。 比如重新使用Windows的文件打开对话框,而不是使用一些自定义的Java对话框。

  • 我宁愿使用一些学习曲线很小的东西(例如,不需要学习OLE / COM的复杂性),因为这里的目标是快速开发我需要的工具,以简化我的生活,而不是我专注于开发人员的教育与我日常工作更相关的领域:)。

    但是我绝对会喜欢在这样做的时候接触新的/酷的东西,例如,如果一些很好的基于Monad的GUI组件被build议,我绝对好奇。

  • 性能很重要(例如,我可能需要显示一个目录列表> 10000文件),但不是最重要的关注 – 我是一个非常好的GUIdevise师和开发人员,可以总是架构我的应用程序,并devise一个graphics用户界面来扩展,如果需要的话) 。

  • 我强烈地(宁愿不坚持)一个框架,不强迫我编译的东西。 例如,Perl库对于我需要编译的定制Java东西来说更可取。 但是,如果框架在所有其他方面都是完美的,那么我就开放给一个编译的解决scheme(只要它不需要我购买Visual Studio或者其他的东西 – 我想要构build一个个人使用的Windows GUI前端,不投资成为Windows开发者)。

除了上面的限制之外,我非常开放和灵活。 一些ActivePerl /草莓的Perl库,基于MS PowerShell的组件 – 嘿,如果没有更好的显示,我会在我的电脑上安装Apache,并build立一个networking前端:)

Solutions Collecting From Web of "Perl程序的Windows GUI工具包有什么好的select?"

在perlfaq3中列出了一些选项,还有一些不是。 我只是熟悉基于Tk的。

Perl / Tk具有最“纯”的界面,但是它并没有被更新,以利用当前版本的Tk中的tile(native /主题部件)支持(可能永远不会)。 Tkx使用不同的桥梁到Tk。 它允许访问Tk中的所有内容(而且速度也更快),但语法却不那么完美。 Tkx被设计成Tk上的薄包装; 你必须参考大多数事情的Tk文档,并翻译从Perl使用它。 Tcl / Tk模块使用与Tkx相同的桥接器,但支持与Perl / Tk大体相同的语法。

是否需要编译任何东西取决于您使用的Perl版本。 如果你使用Strawberry Perl,你可能需要编译一些东西,而不管你选择什么工具包。 ActivePerl发行版已经在5.8.x周期的某个时候包含了Tkx,并停止了从5.10开始捆绑Tk,虽然它仍然可以通过PPM获得。 Tcl / Tk可以从CPAN获得,但是我还没有能够使用与ActivePerl捆绑在一起的Tk库。 您可能需要单独安装Tcl才能使用它。

就我个人而言,我曾经使用Perl / Tk,但现在使用Tkx。

关于界面的“纯粹性”,我会建议普通的老Tk 。 不幸的是,它看起来很陈旧,并且不是win32-ish。

如果你想要原生的小部件,我认为你最好的镜头是通过Win32 :: GUI或Wx使用原生的Windows GUI。 我没有Win32 :: GUI的经验,但Wx是相当不错的。 但是,它的学习曲线相当陡峭,界面并不是很“纯粹”。 C ++根目录显示了一点(好或坏)。

有几个Tk-替换,实际上是Tcl / Tk(我认​​为Tcl :: Tk和Tkx)周围的薄包装。 它们看起来比Perl / Tk更现代,但是我也没有这些实践的经验。 如果你只为Windows开发,看一下ActivePerl(我认为)Tkx。 他们的ppm4包管理器是使用它写的,看起来相当不错!

虽然Tk和Qt也是可用的(更通用的框架最初是用于其他语言,你也可以使用Perl),而Tk可能是最受欢迎的,因为它已经是最长的了, Win32 :: GUI似乎最能满足你的要求。 如果你喜欢WISIWYG GUI的设计者,你可以在Win32 :: GUI的顶端使用Loft ,但是如果你愿意以编程的方式完成所有的事情,你不需要。

无耻的插件 – 我正在编写一个纯粹的Perl GUI工具包, XUL :: Gui ,它使用Firefox呈现其GUI。 它允许你做任何事情Firefox(XUL,HTML,JavaScript,Flash,其他网络技术)。 Firefox使用操作系统(或任何其他主题)的本机外观和感觉,并且可用于大多数平台。

use XUL::Gui; display Window title=>'My Application', Button( label=>'click me', oncommand=>sub{ shift->label = 'ouch'} ); 

它目前正在开发中,但可能足够稳定,开始合作。 这个想法是尽可能简单和完美。 几乎所有的样板都是可选的,并且有合理的默认值。 例如,窗口标签只需要,因为我想标题窗口。

该模块在CPAN上运行 。 我鼓励任何人看看,并发送功能请求或错误报告。

我只是坚持与Tk自己。 它在Windows上运行 ,你已经知道它。

我会选择GTK,因为它有一个学习指南 (目前我正在使用Wx,在Perl中有很多可用的源代码使用Wx,但没有真正的官方文档..除了一些文章,所以没有书…没有官方的东西),如果不是Qt也是一个选项,它有一些适当的文档(但我没有尝试过)。

Tk有很大的问题,我不会使用它。

至于你的性能问题…我敢肯定,没有象样的应用程序会关心,如果它显示100000或10 ^ 100文件,因为很少适合你的屏幕上,所以你可以做一些剪辑 。

如果只是在脚本之上获得一个简单的GUI,那么最简单的路径是VB.NET(或C#)。 那是我所做的。

使用Visual Studio的设计器,只需要设计表单,双击将开始处理的按钮,添加代码以读取GUI元素的参数(例如文本框中的文件路径),并将信息传递给脚本通过环境变量或命令行参数。

来自我的一个应用程序(由真实用户使用)的示例:

 Dim inputFolder As String = txtInputDataMGFfolder.Text Dim outputFile As String = txtOutputMGFfile.Text Dim ws As WshShellClass = New WshShellClass Dim objEnviron2 As IWshRuntimeLibrary.IWshEnvironment = _ ws.Environment("PROCESS") objEnviron2.Item("INDIR") = inputFolder objEnviron2.Item("OUTFILE") = outputFile 'It may or may not help for this: the user dialogs for selecting 'files may change the current directory and running the Perl 'script or one of the .pm files would fail. ws.CurrentDirectory = appPath() ws.Run("%COMSPEC% /K perl -w MultRawPrepare.pl", 1, False) 

请注意,使用Windows Script Host可能不是必须的,但如果是这样的话,则需要这样做:

 'Requires adding reference to project: ' menu Project/Add Reference/COM/Windows Script Host Object Model ' Note: "Windows", not "Microsoft". ' 'Note: the DLL may not be registered; ' D: ' cd \WINNT\system32 ' regsvr32 wshom.ocx Imports IWshRuntimeLibrary 'For WshShellClass. 

appPath()被定义如下(并且在VB.NET文件的开头需要“Imports System.Reflection”):

 Public Shared Function appPath() As String '"[Assembly]" requires System.Reflection Dim strAppDir As String = _ Path.GetDirectoryName( _ [Assembly].GetExecutingAssembly().Getmodulees(False)(0).FullyQualifiedName) Return strAppDir End Function 'appPath 

用户选择的文件或文件夹很容易添加,但有助于如何使用指令和一些样板代码。

Visual Studio for VB.NET的Express版本是免费的。