2009-09-21 14 views
13

मैं अपने विंडोज डेस्कटॉप पर कार्यों के कुछ स्वचालन करने पर विचार कर रहा हूं (उदाहरण के लिए संगीत/टेक्स्ट/फोटो फाइलों आदि के बड़े संग्रह के माध्यम से सॉर्ट करना ...)।पर्ल प्रोग्राम के लिए विंडोज जीयूआई टूलकिट के लिए अच्छे विकल्प क्या हैं?

यह देखते हुए कि डेवलपर विशेषज्ञता का मेरा मुख्य क्षेत्र यूनिक्स पर पर्ल है, मैं विकास की दक्षता के लिए जो कुछ भी करना चाहता हूं, उसके व्यवसाय तर्क को कोड करने के लिए पर्ल से चिपकना पसंद करूंगा।

सवाल यह है कि, यदि मैं काम के शीर्ष पर कुछ जीयूआई (यूनिक्स पर एलए पर्ल :: टीसी) को थप्पड़ मारना चाहता हूं, तो मेरे जीयूआई टूलकिट विकल्प क्या हैं और आप किसकी सिफारिश करने की सिफारिश करेंगे?

कृपया ध्यान दें कि मैं यह प्रश्न अन्य SO उपयोगकर्ताओं के लिए एक अच्छा सीखने का अवसर बनना चाहता हूं, इसलिए अगर मैं नीचे सूचीबद्ध अपनी सीमाओं/आवश्यकताओं को पूरा नहीं करता हूं, तो भी मैं किसी भी उत्तर का स्वागत करता हूं, हालांकि नोट्स इन समाधानों से आपका समाधान कैसे संबंधित है, इसका स्वागत किया जाएगा।

मेरी विचार अधिकांशतः इस तथ्य से प्रेरित होती है कि मैं व्यक्तिगत उपयोग के लिए एक त्वरित विकसित टूल चाहता हूं ताकि मैं अपने कार्यों को समय पर सहेज सकूं।

  • मुख्य ध्यान विकास की Perlishness है - "आराम से बातें आसान होना चाहिए और कठिन बातें संभव हो जाना चाहिए" के रूप में एक पर्ल नारा चला जाता है। विशेष रूप से पहला भाग :)

  • जितना संभव हो सके उतने मूल के रूप में यथासंभव मूल (लेकिन आग्रह नहीं) करना पसंद करें। जैसे इसके बजाए कुछ कस्टम जावा संवाद वाले विंडोज़ फ़ाइल ओपन डायलॉग बनाम दोबारा उपयोग करें।

  • मैं ऐसा कुछ उपयोग करना पसंद करूंगा जिसमें एक छोटे से सीखने की वक्र होगी (उदाहरण के लिए ओएलई/कॉम की जटिलताओं को सीखने की कोई ज़रूरत नहीं है), क्योंकि यहां लक्ष्य का विकास तेजी से विकास है, मुझे डेवलपर के विपरीत मेरे जीवन को सरल बनाने की आवश्यकता है शिक्षा जो मैं अपने दिन के काम के लिए अधिक प्रासंगिक क्षेत्रों पर ध्यान केंद्रित करता हूं :)।

    लेकिन ऐसा करने के दौरान मुझे निश्चित रूप से कुछ नया/ठंडा करने का अनुभव करना अच्छा लगेगा, उदा। अगर कुछ अच्छे मोनाड आधारित जीयूआई घटकों का सुझाव दिया जाता है तो मैं निश्चित रूप से उत्सुक हूं।

  • प्रदर्शन मामलों (उदाहरण के लिए मुझे 10000 फाइलों के साथ एक निर्देशिका सूची प्रदर्शित करने की आवश्यकता हो सकती है), लेकिन यह सर्वोपरि चिंता का विषय नहीं है - मैं एक बहुत अच्छा जीयूआई डिजाइनर और डेवलपर हूं और हमेशा अपने ऐप को आर्किटेक्ट कर सकता हूं और एक जीयूआई डिज़ाइन कर सकता हूं यदि आवश्यक हो तो अच्छी तरह से स्केल करें)।

  • मैं दृढ़ता से पसंद करता हूं (हालांकि जोर नहीं देता) एक ढांचा जो मुझे सामान संकलित करने के लिए मजबूर नहीं करता है। जैसे पर्ल लाइब्रेरी कस्टम जावा सामग्री के लिए अधिक बेहतर हैं जिन्हें मुझे संकलित करने की आवश्यकता है। लेकिन अगर ढांचा सभी अन्य मामलों में सही है, तो मैं संकलित समाधान के लिए खुला हूं (जब तक मुझे विजुअल स्टूडियो या किसी चीज़ को खरीदने की आवश्यकता नहीं होती - मैं व्यक्तिगत उपयोग के लिए विंडोज जीयूआई फ्रंट एंड बनाना चाहता हूं, विंडोज डेवलपर बनने में निवेश नहीं करें)।

मैं ऊपर की बाधाओं के बाहर बहुत खुला और लचीला हूं। कुछ ActivePerl/स्ट्रॉबेरी पर्ल लाइब्रेरीज़, एमएस पावरशेल आधारित घटक - बिल्ली, अगर कुछ भी बेहतर दिखाई नहीं देता है तो मैं अपने पीसी पर अपाचे स्थापित करूँगा और वेब फ्रंट एंड का निर्माण करूंगा :)

+1

@ ब्रायन - अच्छा संपादन (सामान्य रूप से) – DVK

उत्तर

5

perlfaq3 में सूचीबद्ध विकल्पों और कुछ अतिरिक्त अप्रासंगिक पृष्ठों पर नहीं की एक संख्या हैं। मैं केवल तभी आधारित लोगों से परिचित हूं।

Perl/Tk में सबसे अधिक "perlish" इंटरफेस है लेकिन इसे टी के मौजूदा संस्करण (और शायद कभी नहीं होगा) में टाइल (मूल/थीम्ड विजेट) समर्थन का लाभ लेने के लिए अद्यतन नहीं किया गया है। रुपये के लिए एक अलग पुल का उपयोग करता है। यह सब कुछ तक पहुंच की इजाजत देता है (और यह भी तेज़ है) लेकिन वाक्यविन्यास कम खराब है। टीएक्सएक्स को एक पतली रैपर के रूप में डिजाइन किया गया है; आपको अधिकांश चीजों के लिए अधिक दस्तावेज से परामर्श लेना होगा और पर्ल से इसका उपयोग करने के लिए अनुवाद करना होगा। Tcl/Tk मॉड्यूल एक ही पुल का उपयोग टीएक्स के रूप में करता है लेकिन एक वाक्यविन्यास का समर्थन करता है जो ज्यादातर पर्ल/टीसी के समान होता है।

या नहीं, आप कुछ भी संकलन करने की जरूरत पर्ल का कौन सा संस्करण आप उपयोग पर निर्भर करता है। यदि आप स्ट्रॉबेरी पर्ल का उपयोग करते हैं तो आपको शायद कुछ भी संकलित करना होगा चाहे आप जो टूलकिट चुनते हैं। ActivePerl वितरण में 5.8.x चक्र में कुछ समय से Tkx शामिल है और 5.10 के रूप में बंडल करना बंद कर दिया है, हालांकि यह अभी भी पीपीएम के माध्यम से उपलब्ध है। टीसीएल/टीसी सीपीएएन से उपलब्ध है लेकिन मैं इसे सक्रिय पुस्तकालय के साथ बंडल की गई लाइब्रेरी के साथ काम करने में सक्षम नहीं हूं; आपको इसका उपयोग करने के लिए अलग से टीसीएल स्थापित करने की आवश्यकता हो सकती है।

व्यक्तिगत रूप से, मैं पर्ल/टी के उपयोग करने के लिए, लेकिन अब Tkx का उपयोग करते थे।

+1

माइकल - स्पष्ट होने के लिए, मुझे वाक्यविन्यास के पर्लिशन के बारे में ज्यादा परवाह नहीं है (एक बिंदु पर या मेरे जीवन में एक और, मैं प्रोग्राम किया गया, बेसिक, पास्कल, लोगो, प्रोलॉग, लिस्प, स्कीम, सी, एडीए, पर्ल, लोटस नोट्स, एसक्यूएल और पावरबिल्डर। मैं किसी वाक्यविन्यास को संभाल सकता हूं :) मुझे केवल 15 पंक्तियों में व्यक्त किए गए 15 हुप्स के माध्यम से कूदने के बारे में परवाह नहीं है । – DVK

+1

ओह, और संगतता/समावेशी जानकारी के लिए धन्यवाद ... मेरा दूसरा कार्य एएस और स्ट्रॉबेरी के बीच उठा रहा है और यह जानकारी मदद करता है। – DVK

3

जबकि टी और क्यूटी भी उपलब्ध हैं (अधिक मूल रूप से अन्य भाषाओं के लिए सामान्य रूपरेखा तैयार की जाती है, जिन पर आप पर्ल का भी उपयोग कर सकते हैं), और शायद सबसे अधिक लोकप्रिय होने के कारण यह सबसे लोकप्रिय है, Win32::GUI आपकी आवश्यकताओं को पूरा करने के लिए प्रतीत होता है। यदि आपको WISIWYG GUI डिज़ाइनर पसंद हैं, तो आप Win32 :: GUI के शीर्ष पर Loft का उपयोग कर सकते हैं, लेकिन यदि आपको प्रोग्रामेटिक रूप से सब कुछ करना है तो आपको यह नहीं करना चाहिए।

2

मैं सिर्फ खुद के साथ रहना चाहता हूं। यह runs on Windows और आप इसे पहले ही जानते हैं।

6

इंटरफ़ेस के "perlishness" के संबंध में, मैं सादे पुराने Tk सुझाव देना चाहेंगे। दुर्भाग्यवश, यह काफी पुरातन और गैर-Win32-ish दिखता है।

यदि आप मूल विजेट चाहते हैं, तो मुझे लगता है कि आपके सर्वोत्तम शॉट देशी विंडोज जीयूआई का उपयोग Win32::GUI या Wx के माध्यम से कर रहे हैं। मुझे Win32 :: GUI के साथ कोई अनुभव नहीं है, लेकिन Wx काफी अच्छा है। हालांकि, यह एक सीधी सीखने की वक्र है और इंटरफ़ेस बहुत "perlish" नहीं है। सी ++ जड़ें थोड़ी सी दिखाती हैं (बेहतर या बदतर के लिए)।

कुछ TK-प्रतिस्थापन है कि वास्तव में चारों ओर Tcl/टी पतली रैपर रहे हैं (मुझे लगता है कि Tcl :: टी और Tkx)। वे पर्ल/टीके से अधिक आधुनिक दिखते हैं, लेकिन मेरे पास इनके साथ कोई अनुभव नहीं है। यदि आप केवल विंडोज़ के लिए विकास कर रहे हैं, तो ActivePerl पर एक नज़र डालें जो (मुझे लगता है) Tkx के साथ आता है। उनके पीपीएम 4 पैकेज मैनेजर का उपयोग करके लिखा गया है और बहुत अच्छा लग रहा है!

2

मैं जीटीके चुनते हैं, क्योंकि यह एक Wx study guide (इस समय मैं उपयोग कर रहा हूँ क्योंकि और वहाँ पर्ल में उपलब्ध स्रोत कोड के बहुत सारे Wx लेकिन कोई वास्तविक आधिकारिक दस्तावेज .. के अलावा कुछ लेख से है, इसलिए कोई पुस्तक का उपयोग कर रहा है। .. कोई आधिकारिक सामान नहीं), अगर क्यूटी एक विकल्प भी नहीं है, और इसमें कुछ उचित दस्तावेज हैं (लेकिन मैंने कोशिश नहीं की है)।

में बहुत बड़ी समस्याएं हैं और मैं इसका उपयोग नहीं करूंगा।

अपने प्रदर्शन की समस्याओं के लिए के रूप में ... मैं यकीन है कि कोई सभ्य आवेदन अगर यह 100000 या 10^100 फ़ाइलें प्रदर्शित कर रहा है चिंतित होना होगा, अपने स्क्रीन पर बहुत कुछ फिट के बाद से कर रहा हूँ, ताकि आप some clipping कर सकते हैं।

+0

यह सच है कि WxPerl में पर्ल में अनुवाद किए गए WxWidgets दस्तावेज़ की एक प्रति नहीं है। लेकिन आधिकारिक WxWidgets दस्तावेज WxPerl 90% मामलों पर लागू होता है। उन 10% में जहां यह नहीं है, इस बारे में एक नोट है कि WxPerl (या इसी तरह WxPython) C++ API से अलग कैसे है। हालांकि यह सच है कि संदर्भ पढ़ने के दौरान यह मूल सी ++ वाक्यविन्यास जानने में मदद करता है। – tsee

2

यदि यह अपनी स्क्रिप्ट के शीर्ष पर एक सरल GUI प्राप्त करने के लिए बस है तो सबसे आसान रास्ता VB.NET (या सी #) है। यह वो है जो मैं करुंगा।

विजुअल स्टूडियो के डिजाइनर के साथ यह फ़ॉर्म को डिजाइन करने की बात है, बटन पर डबल क्लिक करें जो प्रोसेसिंग शुरू कर देगा, जीयूआई तत्वों से पैरामीटर को पढ़ने के लिए कोड जोड़ें (जैसे टेक्स्टबॉक्स में फ़ाइल पथ) और पास पर्यावरण चर या कमांड लाइन पैरामीटर के माध्यम से स्क्रिप्ट के लिए जानकारी।

मेरी अनुप्रयोगों में से एक से

उदाहरण (वास्तविक उपयोगकर्ताओं द्वारा इस्तेमाल के लिए):

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 स्क्रिप्ट होस्ट का उपयोग सख्त आवश्यक नहीं हो सकता है, लेकिन अगर यह तो है इस की जरूरत है:

इस प्रकार
'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() परिभाषित किया गया है (और आवश्यक "आयात System.Reflection" VB.NET फ़ाइल की शुरुआत में):

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 निर्देशों और बॉयलरप्लेट कोड का थोड़ा सा मदद करता है।

वीबी.नेट के लिए विजुअल स्टूडियो का एक्सप्रेस संस्करण निःशुल्क है।

+0

यह जानना अच्छा है कि आप VB.NET/C# का उपयोग करते हैं, लेकिन कृपया शीर्षक में "पर्ल" शब्द देखें। धन्यवाद – xxxxxxx

+1

@ spx2: मैं सिर्फ अपने उत्तर पोस्ट क्योंकि ओपी आवश्यकताओं में छूट दी: "कृपया ध्यान दें कि मैं इस सवाल का अन्य अतः उपयोगकर्ताओं के लिए एक अच्छा सीखने का अवसर होना चाहते हैं, तो मैं कोई जवाब भी स्वागत करेंगे अगर वे नीचे सूचीबद्ध अपनी सीमाओं/जरूरतों को जरूरी नहीं है "। –

3

बेकार प्लग - मैं एक शुद्ध पर्ल जीयूआई टूलकिट लिखने की प्रक्रिया में हूं, XUL::Gui जो फ़ायरफ़ॉक्स का उपयोग करके अपने जीयूआई प्रस्तुत करता है। यह आपको फ़ायरफ़ॉक्स (एक्सयूएल, एचटीएमएल, जावास्क्रिप्ट, फ्लैश, अन्य वेब तकनीक) कुछ भी करने की अनुमति देता है। फ़ायरफ़ॉक्स ओएस (या आप चाहते हैं कि किसी भी अन्य विषय) के मूल रूप और अनुभव का उपयोग करता है, और अधिकांश प्लेटफार्मों के लिए उपलब्ध है।

use XUL::Gui; 

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

यह वर्तमान में विकास के तहत शायद स्थिर पर्याप्त के साथ काम शुरू करने के है, लेकिन। विचार जितना संभव हो उतना सरल और परेशान होना है। समझदार डिफ़ॉल्ट के साथ लगभग सभी बॉयलरप्लेट वैकल्पिक है। उदाहरण के लिए, विंडो टैग केवल तभी जरूरी है क्योंकि मैं खिड़की का शीर्षक बनाना चाहता था।

The module is up on CPAN। मैं किसी को भी देखने के लिए प्रोत्साहित करता हूं, और मुझे फीचर अनुरोध या बग रिपोर्ट भेजता हूं।

+0

यह काम करता है! विंडोज़ पर, कम नहीं। मुझे इसमें देखना होगा। –

+1

बहुत उत्सुक दिखता है - मैं भी देखूंगा! – DVK

संबंधित मुद्दे