2009-09-21 67 views
13

我正在考慮在Windows桌面上進行一些自動化任務(例如,通過大量音樂/文本/照片文件等進行排序......)。針對Perl程序的Windows GUI工具包有什麼好的選擇?

看到我的主要開發專業領域是Unix上的Perl,爲了提高開發效率,我寧願堅持使用Perl來編寫我需要完成的任何業務邏輯。

問題是,如果我想在工作之上拍攝一些GUI(Unix上的ala Perl :: Tk),我的GUI工具包選項是什麼,以及您會推薦使用哪一種?

請注意,我希望這個問題對其他SO用戶來說是一個很好的學習機會,所以即使他們不一定滿足我自己的下面列出的限制/需求,我也會歡迎任何答案,儘管註釋詳細闡述了您的解決方案如何與這些考慮相關將非常受歡迎。

我的考慮主要是由於我想要一個快速開發的個人使用的工具來節省我現在手動完成的任務的時間。

  • 主要考慮的是發展Perlishness - 「易事應該是簡單的和困難的事情應該可以」作爲一個Perl的口號去。尤其是第一部分:)

  • 只要使用了組件,首選(但不是堅持)儘可能原生。例如。而是重新使用Windows的文件打開對話框與擁有一些定製的Java對話框。

  • 我寧願使用一些學習曲線很小的東西(例如不需要學習OLE/COM的複雜性),因爲這裏的目標是快速開發工具,我需要簡化我的生活而不是開發人員教育,我專注於與我日常工作相關的領域:)。

    但是我絕對會喜歡在做這件事的時候接觸新的東西,如果提出了一些很好的基於Monad的GUI組件,我絕對好奇。

  • 性能問題(例如,我可能需要顯示一個包含> 10000個文件的目錄列表),但不是最重要的問題 - 我是一個非常出色的GUI設計師和開發人員,並且總是可以構建我的應用程序並設計GUI規模好,如果需要的話)。

  • 我強烈希望(儘管不堅持)一個框架,不強迫我編譯的東西。例如Perl庫更適合我需要編譯的自定義Java東西。但是,如果框架在所有其他方面都是完美的,那麼我就開放了一個編譯解決方案(只要它不需要我購買Visual Studio或某些東西 - 我想要構建一個供個人使用的Windows GUI前端,不投資成爲Windows開發者)。

我非常開放和靈活的以上限制之外。一些ActivePerl/Strawberry Perl庫,基於MS PowerShell的組件 - 如果沒有更好的東西出現,我會在我的PC上安裝Apache並構建一個web前端:)

+1

@布萊恩 - 良好的編輯(像往常一樣) – DVK 2009-09-21 16:36:06

回答

5

perlfaq3中列出了一些選項,還有一些不是。我只熟悉基於Tk的。

Perl/Tk擁有最「純」的界面,但它並沒有被更新以利用當前版本的Tk中的tile(native /主題部件)支持(並且可能永遠不會)。 Tkx使用與Tk不同的橋樑。它允許訪問Tk中的所有內容(而且速度也更快),但語法卻不那麼完美。 Tkx被設計成Tk上的薄包裝;你必須參考大多數東西的Tk文檔,並翻譯成Perl來使用它。 Tcl/Tk模塊使用與Tkx相同的橋接器,但支持大部分與Perl/Tk相同的語法。

是否需要編譯任何東西取決於您使用的Perl版本。如果你使用Strawberry Perl,你可能不得不編譯一些東西,而不管你選擇什麼工具包。 ActivePerl發行版包含Tkx,自5.8.x週期開始,並停止將Tk捆綁到5.10版本,儘管它仍然可以通過PPM獲得。 Tcl/Tk可以從CPAN獲得,但是我一直無法使用與ActivePerl捆綁在一起的Tk庫;您可能需要單獨安裝Tcl才能使用它。

就我個人而言,我曾經使用Perl/Tk,但現在使用Tkx。

+1

邁克爾 - 要清楚,我不在乎Perlishnes的語法(在我生命中的某個點或另一個點,我編程,BASIC,Pascal,LOGO,Prolog, Lisp,Scheme,C,ADA,Perl,Lotus Notes,SQL和PowerBuilder,我可以處理任何語法:)我只關心不需要跳過15個代碼段,用30行代碼來完成perl在15個字符中執行的操作。 – DVK 2009-09-21 18:41:16

+1

哦,並感謝兼容性/包容性信息...我的另一項任務是選擇之間的AS和草莓,這個信息幫助。 – DVK 2009-09-21 18:42:54

3

雖然Tk和Qt也可用(更多一般框架原本用於其他語言,您也可以使用Perl),而Tk可能最受歡迎,因爲它已經是最長的了,Win32::GUI似乎最符合您的要求。如果你喜歡WISIWYG GUI的設計者,你可以在Win32 :: GUI上使用Loft,但是如果你願意以編程的方式完成所有的事情,你不需要。

6

關於界面的「純粹性」,我建議使用普通的舊版本Tk。不幸的是,它看起來很陳舊,並且不是win32-ish。

如果你想要原生的小部件,我認爲你最好的鏡頭是通過Win32::GUIWx使用本地Windows GUI。我沒有使用Win32 :: GUI的經驗,但Wx非常好。但是,它確實有一個相當陡峭的學習曲線,並且界面不是很「完美」。 C++根目錄顯示了一點(好或壞)。

在Tcl/Tk(我認​​爲Tcl :: Tk和Tkx)上有幾個Tk替換實際上是很薄的包裝。它們看起來比Perl/Tk更現代,但我對這些也沒有實際操作經驗。如果你只是爲Windows開發,看看ActivePerl(我認爲)Tkx。他們的ppm4包管理器是使用它寫的,看起來相當不錯!

2

我會選擇GTK,因爲它有一個study guide(目前我正在使用Wx,並且在Perl中有很多可用的源代碼使用Wx,但沒有真正的官方文檔..除了一些文章,所以沒有書。 ..沒有官方的東西),如果不是Qt也是一個選項,它有一些適當的文檔(但我沒有嘗試過)。

Tk有很大的問題,我不會使用它。

至於你的性能問題。我敢肯定,沒有什麼像樣的應用會如果它顯示100000個10^100個文件,會擔心因爲你的 屏幕上很少有合適的,所以你可以做some clipping

+0

的確,WxPerl沒有將wxWidgets文檔的副本轉換爲Perl。但官方的wxWidgets文檔適用於WxPerl 90%的案例。在那些沒有的10%中,它有關於WxPerl(或類似的WxPython)與C++ API的區別的說明。確實如此,它有助於在閱讀引用時瞭解基本的C++語法。 – tsee 2009-10-03 07:47:51

2

如果只是在腳本的頂部獲得一個簡單的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腳本宿主這個可能不是嚴格neccessary,但如果 是那麼這是需要:

'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文件的開頭所需的 「進口的System.Reflection」):

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 

用戶對文件或文件夾的選擇很容易添加,但受到了HOW-TO指令和一些樣板代碼的幫助。

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

+0

很高興知道您使用VB.NET/C#,但請注意標題中的「Perl」一詞。 謝謝 – xxxxxxx 2009-09-29 04:31:40

+1

@ spx2:我只發佈了我的答案,因爲OP放寬了這個要求:「請注意,我希望這個問題對其他SO用戶來說是一個很好的學習機會,所以我會歡迎任何答案,即使他們不一定滿足我自己的下列限制/需求「。 – 2009-09-29 09:48:45

3

無恥的插件 - 我正在編寫一個純粹的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'}); 

它目前正在開發中,但可能足夠穩定,開始使用。這個想法是儘可能簡單和完美。幾乎所有的樣板都是可選的,具有合理的默認設置。例如,只需要窗口標記,因爲我想標題窗口。

The module is up on CPAN。我鼓勵任何人看一看,並向我發送功能請求或錯誤報告。

+0

它的工作原理!在Windows上,不下。我將不得不考慮這一點。 – 2009-10-13 21:39:18

+1

看起來很好奇 - 我會看起來很好! – DVK 2009-10-13 22:10:44

相關問題