Каковы хорошие возможности для инструментов Windows GUI для программы Perl?

Я рассматриваю возможность автоматизации задач на рабочем столе Windows (например, сортировка больших коллекций файлов музыки/текста/фотографий и т.д.).

Увидев, насколько моей основной областью знаний разработчика является Perl в Unix, я бы предпочел придерживаться Perl для кодирования бизнес-логики, что бы мне ни делал, только ради эффективности развития.

Вопрос в том, хочу ли я пометить какой-то графический интерфейс поверх работы (ala Perl:: Tk в Unix), какие у меня параметры инструментария GUI и какой из них вы бы рекомендовали использовать?

Обратите внимание, что я хотел бы, чтобы этот вопрос был хорошей возможностью обучения другим пользователям SO, поэтому я хотел бы получить ЛЮБЫЕ ответы, даже если они не обязательно удовлетворяют моим собственным ограничениям/потребностям, перечисленным ниже, хотя примечания о том, как ваше решение относится к этим соображениям, было бы очень желанным.

Мои соображения в основном обусловлены тем, что я хочу быстро разработанный инструмент для личного использования, чтобы сэкономить время на задачах, которые я сейчас делаю вручную.

  • Главное соображение - Perlishness развития - "Легкие вещи должны быть легкими и трудными, что должно быть возможно", поскольку лозунг Perl идет. Особенно первая часть:)

  • Предпочитает (но не настаивать) как можно более родную насколько применимо к компонентам. Например. скорее повторное использование диалогового окна открытия файла Windows, а также наличие специального диалогового окна Java.

  • Я бы предпочел использовать что-то, у которого была бы небольшая кривая обучения (например, нет необходимости изучать тонкости OLE/COM), поскольку целью здесь является быстрое развитие инструментов, которые мне необходимо упростить, в отличие от образование разработчиков, которое я концентрирую на областях, более актуальных для моей дневной работы:).

    Но я определенно хотел бы получить доступ к чему-то новому/крутому, делая это, например. если некоторые полезные компоненты GUI на основе Monad предлагаются, мне определенно интересно.

  • Вопросы производительности (например, мне может потребоваться отобразить список каталогов s > 10000 файлами), но это не имеет первостепенной важности - я довольно хороший дизайнер и разработчик графического интерфейса и всегда могу архивировать приложение и создавать графический интерфейс если необходимо, хорошо масштабировать).

  • Я бы предпочел (хотя и не настаивать) фреймворк, который не заставлял меня компилировать вещи. например Библиотеки Perl более предпочтительны для пользовательских Java-материалов, которые мне нужно скомпилировать. Но если фреймворк идеален во всех других отношениях, я открыт для скомпилированного решения (до тех пор, пока он не требует от меня покупки Visual Studio или somesuch - я хочу создать интерфейс для графического интерфейса Windows для личного использования, не инвестировать в становление разработчика Windows).

Я довольно открытый и гибкий вне вышеуказанных ограничений. Некоторые библиотеки ActivePerl/Strawberry Perl, компоненты на основе MS PowerShell - черт возьми, если ничего лучше не появится, я просто установлю Apache на свой ПК и создаю веб-интерфейс:)

Ответы

Ответ 1

Существует ряд опций, перечисленных в perlfaq3 и некоторые дополнительные, которые не являются. Я знаком с Tk-based.

Perl/Tk имеет самый "персидский" интерфейс, но он не был обновлен, чтобы воспользоваться преимуществами плитки (собственный/тематический виджет ) в текущей версии Tk (и, вероятно, никогда не будет). Tkx использует другой мост для Tk. Он позволяет получить доступ ко всем в Tk (и это быстрее), но синтаксис меньше perlish. Tkx предназначен для тонкой обертки над Tk; вы должны проконсультироваться с документацией Tk для большинства вещей и перевести ее на Perl. Модуль Tcl/Tk использует тот же мост, что и Tkx, но поддерживает синтаксис, который в основном такой же, как Perl/Tk.

Нужно ли вам компилировать что-либо, зависит от того, какую версию Perl вы используете. Если вы используете Strawberry Perl, вам, вероятно, придется что-то скомпилировать независимо от того, какой набор инструментов вы выберете. Распределения ActivePerl включали Tkx с тех пор в цикле 5.8.x и прекратили связывание Tk с 5.10, хотя оно все еще доступно через PPM. Tcl/Tk доступен из CPAN, но мне не удалось заставить его работать с библиотекой Tk, которая поставляется вместе с ActivePerl; вам может потребоваться установить Tcl отдельно, чтобы использовать его.

Лично я использовал Perl/Tk, но теперь использую Tkx.

Ответ 2

Что касается "персистильности" интерфейса, я бы предложил простой старый Tk. К сожалению, он выглядит довольно устаревшим и не-win32-ish.

Если вы хотите собственные виджеты, я думаю, что ваши лучшие снимки используют собственный графический интерфейс Windows через Win32:: GUI или Wx. У меня нет опыта работы с Win32:: GUI, но Wx довольно приятный. Однако он имеет довольно крутую кривую обучения, и интерфейс не очень "perlish". Корни С++ показывают немного (лучше или хуже).

Есть несколько Tk-замещений, которые на самом деле являются тонкой оболочкой вокруг Tcl/Tk (я думаю, Tcl:: Tk и Tkx). Они выглядят более современно, чем Perl/Tk, но у меня нет практического опыта с ними. Если вы разрабатываете только для Windows, посмотрите на ActivePerl, который поставляется с (я думаю) Tkx. Их менеджер пакетов ppm4 написан с его использованием и выглядит довольно красиво!

Ответ 3

В то время как Tk и Qt также доступны (более общие структуры, первоначально предназначенные для других языков, на которых вы также можете использовать Perl), а Tk, вероятно, наиболее популярна, поскольку она была самой длинной, Win32:: GUI, как представляется, лучше всего соответствует вашим требованиям. Если вам нравятся дизайнеры WISIWYG GUI, вы можете использовать Loft поверх Win32:: GUI, но вам не нужно, если вы 'd скорее делать все программно.

Ответ 4

Бесстыдный плагин - я нахожусь в написании чистого инструментария GUI Perl, XUL::Gui, который отображает свой графический интерфейс с помощью Firefox. Это позволяет вам делать что-либо Firefox (XUL, HTML, JavaScript, Flash, другие веб-технологии). Firefox использует собственный внешний вид ОС (или любую другую тему, которую вы хотите), и доступен для большинства платформ.

use XUL::Gui;

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

В настоящее время он находится в разработке, но, вероятно, достаточно стабилен, чтобы начать работать. Идея состоит в том, чтобы быть максимально простым и perlish. Почти все шаблоны являются дополнительными, с разумными значениями по умолчанию. Например, тег Window нужен только потому, что я хотел загладить окно.

Модуль подключен к CPAN. Я бы посоветовал кому-нибудь взглянуть и отправить мне запросы о функциях или отчеты об ошибках.

Ответ 5

Я просто буду придерживаться TK. Он работает в Windows, и вы уже знаете его.

Ответ 6

Я бы выбрал GTK, потому что у него есть учебное пособие (на данный момент я использую Wx и там много доступного исходного кода в Perl с использованием Wx, но без фактической официальной документации.. кроме некоторых статей, поэтому никакой книги... нет официальных материалов), если Qt также не является вариантом, и у него есть некоторая надлежащая документация (но я не пробовал),

Tk имеет очень большие проблемы, и я не буду использовать его.

Что касается ваших проблем с производительностью... Я уверен, что никакого приличного приложения не будет интересовать, если он будет отображать 100000 или 10 ^ 100 файлов, так как очень мало подходит для вашего экран, так что вы можете сделать некоторые отсечения.

Ответ 7

Если просто получить простой графический интерфейс поверх ваших сценариев, самым простым путем является VB.NET(или С#). Это то, что я делаю.

С дизайнером Visual Studio просто нужно разработать форму, дважды щелкнуть по кнопке, которая начнет обработку, добавить код для считывания параметров из элементов GUI (например, пути к файлам в TextBox'е) и передать информацию в переменные среды script или параметры командной строки.

Пример из одного из моих приложений (используемых реальными пользователями):

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() определяется следующим образом (и требуется "Imports 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 и немного кода шаблона.

Экспресс-версия Visual Studio для VB.NET бесплатна.