Каковы хорошие параметры для наборов инструментов Windows GUI для программы Perl? - PullRequest
13 голосов
/ 21 сентября 2009

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

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

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

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

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

  • Основное соображение - Проницательность разработки - «Легкие вещи должны быть легкими, а тяжелые должны быть возможными», как гласит лозунг Perl. Особенно первая часть :) 1013 *

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

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

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

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

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

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

Ответы [ 7 ]

6 голосов
/ 21 сентября 2009

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

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

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

5 голосов
/ 21 сентября 2009

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

Perl / Tk имеет наиболее «перлы» интерфейс, но он не был обновлен, чтобы воспользоваться преимуществами поддержки плитки (родного / тематического виджета) в текущей версии Tk (и, вероятно, никогда не будет ). 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, но я не смог заставить его работать с библиотекой Tk, которая поставляется в комплекте с ActivePerl; вам может понадобиться установить Tcl отдельно, чтобы использовать его.

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

3 голосов
/ 14 октября 2009

Бесстыдный плагин - я нахожусь в процессе написания чистого Perl GUI инструментария, XUL :: Gui , который отображает свой 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'} );

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

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

3 голосов
/ 21 сентября 2009

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

2 голосов
/ 28 сентября 2009

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

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

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

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 бесплатна.

2 голосов
/ 28 сентября 2009

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

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

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

2 голосов
/ 21 сентября 2009

Я бы просто придерживался Тк сам. работает на Windows , и вы уже знаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...