Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl程序的Windows GUI工具包有哪些好选项?_Windows_Perl_User Interface - Fatal编程技术网

Perl程序的Windows GUI工具包有哪些好选项?

Perl程序的Windows GUI工具包有哪些好选项?,windows,perl,user-interface,Windows,Perl,User Interface,我正在考虑在Windows桌面上执行一些自动化任务(例如,对大量音乐/文本/照片文件进行排序等) 鉴于我的主要开发专业领域是Unix上的Perl,我更愿意坚持使用Perl来编写我需要做的任何事情的业务逻辑,只是为了提高开发效率 问题是,如果我想在工作之上添加一些GUI(Unix上的ala Perl::Tk),我的GUI工具包选项是什么?您建议使用哪一个 请注意,我希望这个问题对其他SO用户来说是一个很好的学习机会,因此我欢迎任何答案,即使它们不一定满足下面列出的我自己的限制/需求,尽管非常欢迎详

我正在考虑在Windows桌面上执行一些自动化任务(例如,对大量音乐/文本/照片文件进行排序等)

鉴于我的主要开发专业领域是Unix上的Perl,我更愿意坚持使用Perl来编写我需要做的任何事情的业务逻辑,只是为了提高开发效率

问题是,如果我想在工作之上添加一些GUI(Unix上的ala Perl::Tk),我的GUI工具包选项是什么?您建议使用哪一个

请注意,我希望这个问题对其他SO用户来说是一个很好的学习机会,因此我欢迎任何答案,即使它们不一定满足下面列出的我自己的限制/需求,尽管非常欢迎详细说明您的解决方案与这些考虑因素的关系

我的考虑主要是因为我想要一个快速开发的工具供个人使用,以节省我现在手动执行任务的时间

  • 主要考虑的是开发的完美性——“简单的事情应该是容易的,困难的事情应该是可能的”,正如Perl的口号所说。特别是第一部分:)

  • 就所使用的组件而言,希望(但不是坚持)尽可能地使用本地组件。例如,与其使用一些自定义Java对话框,不如重新使用Windows的文件打开对话框

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

    但我肯定很想在做这件事的时候接触到一些新的/酷的东西,例如,如果有人建议使用一些不错的基于Monad的GUI组件,我肯定很好奇

  • 性能问题(例如,我可能需要显示一个超过10000个文件的目录列表),但不是最重要的问题-我是一个相当好的GUI设计师和开发人员,总是可以设计我的应用程序,并在需要时设计一个可伸缩的GUI)

  • 我强烈希望(尽管不是坚持)一个不会强迫我编译东西的框架。e、 Perl库比我需要编译的定制Java更可取。但是如果这个框架在其他方面都很完美,我愿意接受编译后的解决方案(只要它不需要我购买Visual Studio或类似的东西——我想构建一个供个人使用的Windows GUI前端,而不是投资成为Windows开发人员)


在上述限制之外,我非常开放和灵活。一些ActivePerl/草莓Perl库,基于MS PowerShell的组件-见鬼,如果没有更好的显示,我将在我的PC上安装Apache并构建一个web前端:)

而Tk和Qt也可用(更通用的框架最初用于其他语言,您也可以在其上使用Perl),Tk可能是最受欢迎的,因为它是最长的,似乎最能满足您的需求。如果您喜欢WISIWYG GUI设计器,您可以在Win32::GUI之上使用,但如果您希望以编程方式完成所有工作,则不必这样做。

我只会坚持使用Tk。你已经知道了。

关于界面的“完美性”,我建议使用普通的旧界面。不幸的是,它看起来非常过时,不符合win32标准

如果您想要本机小部件,我认为您最好通过或使用本机Windows GUI。我没有使用Win32::GUI的经验,但是Wx非常好。然而,它的学习曲线相当陡峭,界面也不是很“完美”。C++根显示了一点(好或坏)。


有一些Tk替换实际上是Tcl/Tk(我认为Tcl::Tk和Tkx)的薄包装。它们看起来比Perl/Tk更现代,但我也没有实践经验。如果您只为Windows开发,请看一下(我认为)Tkx附带的ActivePerl。他们的ppm4包管理器是使用它编写的,看起来非常漂亮

中列出了许多选项,其他一些选项没有列出。我只熟悉基于Tk的

拥有最“perlish”的界面,但尚未更新以利用当前版本Tk中的tile(本机/主题小部件)支持(可能永远不会)。使用不同的桥连接到Tk。它允许访问Tk中的所有内容(而且速度更快),但语法不太完美。Tkx被设计成Tk上的薄包装;您必须查阅Tk文档了解大多数内容,并从Perl中翻译以使用它。该模块使用与Tkx相同的桥接器,但支持与Perl/Tk基本相同的语法

您是否需要编译任何东西取决于您使用的Perl版本。如果您使用草莓Perl,无论您选择什么工具包,都可能需要编译一些东西。ActivePerl发行版从5.8.x周期的某个时候起就包含了Tkx,并从5.10开始停止了Tk绑定,尽管它仍然可以通过PPM获得。Tcl/Tk可以从CPAN获得,但我还不能让它与ActivePerl附带的Tk库一起使用;您可能需要单独安装Tcl才能使用它


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

我会选择GTK,因为它有一个(目前我使用Wx,Perl中有大量可用的源代码使用Wx,但没有实际的官方文档..除了一些文章,所以没有书…没有官方的东西),如果不是Qt也是一个选项,它有一些适当的文档(但我还没有试过)

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

至于你的表现问题。。。我敢肯定,如果它显示100000或10^100个文件,没有一个像样的应用程序会担心,因为很少有适合您的应用程序 屏幕,所以您可以这样做。

如果只是为了
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)
'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.
Public Shared Function appPath() As String

    '"[Assembly]" requires System.Reflection
    Dim strAppDir As String = _
      Path.GetDirectoryName( _
        [Assembly].GetExecutingAssembly().GetModules(False)(0).FullyQualifiedName)
    Return strAppDir
End Function 'appPath
use XUL::Gui;

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