Имея wxPython в действии и с трудом собравшись , взломал wxDebug (благодаря хостингу Python ) — интерфейс для просмотра результатов профилирования Xdebug , дизайн пользовательского интерфейса которого вдохновлен (но отнюдь не так хорош) WinCacheGrind . Скриншот …
Настоящей миссией было оправдание сделать что-то более глубокое с wxPython — вот некоторые замечания по этому поводу.
Питон ?
Подумайте, что здесь нужно сказать, учитывая, что я обычно размышляю о PHP, а также о том, что Sitepoint еще не сделал Python «языком первого класса», несмотря на Django …
Первый отказ от ответственности: я не мастер Python — самоучка, используемая в основном для хобби. Критика / поправки приветствуются.
Python — это язык динамического программирования общего назначения (в отличие от PHP, который предназначен для веб-приложений). Это примерно тот же возраст, что и в Perl, но, если говорить коротко, он начал набирать широкую популярность только за последние 5 лет (я полагаю). В последнее время несколько взбудоражен ростом Ruby / Rails.
О Python можно многое сказать, но на самом деле его ценность лучше всего обозначена некоторыми «внешними символами жизни», такими как…
- У Google достаточно кода, написанного на Python, и они решили, что им лучше нанять создателя .
- Microsoft чувствовала необходимость нанять Джима Хьюгунина для поддержки его усилий по написанию Python.NET под названием IronPython (это логически эквивалентно чему-то вроде PHP Phalanger ). Джим также написал большую часть Jython (Python для Java), я верю.
- Хотя основной дистрибутив Python написан на C (обычно называемом CPython) и есть вышеупомянутые реализации .NET и Java, есть также PyPy — «реализация Python, написанная на Python, которая может интерпретировать себя» (цитата здесь ). Насколько я знаю, это делает Python единственным из динамических языков «большой пятерки» (Perl, Python, PHP, Ruby, Javascript), который стал «самоосознающим». Один потенциальный выигрыш (насколько я понимаю) заключается в том, что у вас может быть код, который выполняет такие вещи, как оптимизация / регенерация, чтобы настроить данные, которые он фактически обрабатывает, или среду, в которой он работает.
- С точки зрения производительности, по сравнению с другими популярными динамическими языками, Python фактически становится «победителем» в этой языковой схватке (хорошо — ложь и статистика, но все же интересно, сколько раз я опережал Perl — больше, чем я ожидается).
- Nokia выбрала Python в качестве предпочтительного динамического языка для своих телефонов S60.
- Брендан Эйч хочет, а Марк Хаммонд объединяет Python и XUL в Mozilla (читай — альтернатива Javascript для написания расширений Firefox).
- Марк Шаттлворт / Canonical активно продвигал Python , связанный с тем, что они делают с Ubuntu, и такими вещами, как bzr .
- Некоторые вещи запрашиваются, но PHP этого не делает , например, потоки и возможность конвертировать сценарии Python в автономные программы Windows .
Что хорошего в Python, так это общее впечатление (если взглянуть на код других людей) сообщества, которое знает, как писать код.
С другой стороны, я бы сказал, что сообщество Python еще не увидело себя со стороны — насколько оно доступно для новичков? Например, я думаю, что если вы попросите новичка найти документацию по методам, предоставляемым типом словаря, вы будете удивлены тем, сколько из них не смогут попасть на эту страницу (или посетите ее и перейдете — «classdict?») [Сторона примечание — здесь есть много хороших примеров использования стандартных API-интерфейсов Python] Может быть, стоило бы пообщаться с кем-то вроде Шона в команде разработчиков документации по PHP и придумать, как пользователи могут добавлять заметки в документы по Python?
В противном случае, Python не нашел такого рода следования на сайтах помощи (форумах и т. Д.), Которые есть у PHP, хотя те, которые существуют, кажутся более сфокусированными и с большей вероятностью приводят к информированному ответу. По сути, я бы до сих пор утверждал, что PHP лучше подходит для веб-приложений (возможно, здесь есть место для Py2PHP через PyPy?), Но с точки зрения «правильного инструмента для работы», есть много областей, где PHP — неправильный инструмент…
Тем не менее, Python стоит усилий. Это не так уж далеко от PHP, если вы откуда. Байт Python делает хорошее «прямое» введение, если вы уже сделали некоторое программирование. Погружение в Python для более опытных, но также дает вам самое быстрое понимание возможностей Python как языка. В противном случае есть также Учебник для непрограммистов для Python . Наконец, для разработчиков PHP, рекомендую изучить код здесь и здесь подробно, чтобы разобраться.
wxPython ?
За последние пять лет создание настольных графических интерфейсов стало несколько менее интересным, особенно с учетом AJAX и возрождения Javascript. Несмотря на это, думаю, что веб-разработчик по-прежнему ценит возможность написания простых графических интерфейсов для настольных компьютеров, помогающих поддерживать веб-приложения и облегчающих жизнь пользователей. Учитывая wxPython плюс отличные расширения Python для Windows (COM и т. Д.), Это мощная комбинация, которая помогает автоматизировать вещи для тех пользователей, которые отказываются от бюджета из Word или Excel.
Но если бы вы спросили, каковы некоторые из самых высоких требований для инструментария GUI, в то время, когда Java + AWT / Swing уделяли много внимания, вы, вероятно, получили бы некоторые или более из следующих пунктов …
- Отзывчивый (GUI реагирует на пользователей)
- Собственный внешний вид (приложения Windows должны выглядеть как приложения Windows)
- Легко / быстро развиваться в
- Кроссплатформенность (т. Е., По крайней мере, есть шанс заставить это приложение Win32 работать под Linux и MacOS).
Хотя пять лет назад это было бы большим новостью, wxPython, по сути, предоставляет все вышеперечисленное.
wxPython — это «обертка» Python для wxWidgets : «Фреймворк с открытым исходным кодом C ++ для создания кроссплатформенного программирования.». Я полагаю, что проекту wxWidgets столько же лет, сколько Linux, и, вероятно, его можно смело назвать «зрелым». Концептуально, wxPython — это что-то вроде PHP-GTK, но гораздо более зрелый по сравнению (как и сам Python) с дополнительным преимуществом wxWidgets, обеспечивающим естественный внешний вид любой операционной системы (в которой PHP-GTK нет).
В сообществе Python главный барьер, который wxPython должен был преодолеть, — это кривая обучения. Если вы уже знали, что разбираетесь в wxWidgets, нет проблем, но для всех остальных это, вероятно, что-то вроде команды 747, которая научилась летать на планере. Войдите в книгу …
wxPython в действии
Не собираюсь делать длинный обзор — вы найдете один здесь и интервью с Робином Данном здесь (соавтор и ведущий разработчик).
Мини обзор: это хорошая книга. Кажется, что главная цель книги — помочь читателям понять ключевые слова wx.concepts, необходимые для самодостаточности. Со мной, как подопытным кроликом, думаю, что это достигнет этой цели: я теперь wx.dangerous;) Обратите внимание, я не был полным новичком в wxPython — написал одну маленькую, но полезную утилиту, но ничего действительно серьезного (то есть я не получил что касается использования sizers) — книга определенно имеет переломный момент, чтобы помочь мне понять wxPython. Это также очень читабельно — уверенность Робина Данна в качестве ведущего разработчика wxPython в сочетании с опытом Ноэла Раппинса в качестве педагога хорошо играют вместе.
В ретроспективе есть вещи, которые я бы хотел, чтобы книга включала, например, освещение большего количества виджетов (таких как «Блокнот»), некоторых справочных приложений и многое другое о разработке приложений (MVC, MVP и т. Д.). В то же время существует точка зрения «хороший дизайн — это то, что вы можете оставить», и я думаю, что она применима здесь — я ожидаю, что «wxPython in Action» выживет в будущих выпусках wxPython. Если вам это нужно, есть книга по wxWidgets (как в C ++), которая гораздо более обширна с точки зрения ссылок, но все еще в значительной степени применима к wxPython.
wxDebug
План с wxDebug заключался в том, чтобы создать прототип, а значит сказать «кого это волнует?» Таким вещам, как документация, модульные тесты или затратить чрезмерные усилия на чистые абстракции. Он постыдно пытается сорвать дизайн пользовательского интерфейса Wincachegrind (хотя это еще не так далеко, как MDI ), за что я прошу прощения у Hendy Irawan.
Итак, некоторые случайные мысли, основанные на опыте хакерства вместе с wxDebug (и после прочтения книги)…
- Несмотря на то, что в книге приведено достаточно примеров наиболее распространенных виджетов, ожидайте, что вам придется время от времени искать в Google или тралить исходный код wxPython для примеров и тому подобного, например, констант стиля.
- Стоит просмотреть документы по API — одна вещь, которую книга могла бы сделать лучше, это просто рекламировать доступные компоненты посредством краткого описания. Например, случайно наткнувшись на wx.FileConfig (не в книге), это стало намного проще.
- Сделал все взломы под виндой. Что в ретроспективе, вероятно, было ошибкой, потому что попытка wxDebug под Ubuntu впервые, несколько дней назад, показала, что он довольно сильно сломан. wxPython / wxWidgets является кроссплатформенным, не зависит от платформы (т.е. это выполнимо, но требует выполнения). У меня сложилось впечатление, что wxWidgets считает Windows первоклассным гражданином (но, возможно, я ошибаюсь), поэтому, вероятно, разумнее разрабатывать под Linux (GTK) / OS X, так что начинать с более слабого кузена там легче, чем двигаться в Windows.
- Taskcoach остается лучшей кодовой базой, которую я когда-либо видел, чтобы научиться хорошо выполнять wxPython (тогда, в моем случае, игнорировать и продолжать взламывать). Это, пожалуй, лучшее место, чтобы пройти, как только вы пройдете через wxPython в действии и хотите узнать больше. ActiveGrid IDE интересен, но, похоже, имеет совершенно другой стиль для склеивания компонентов (в зависимости от понятия сервисов) — может быть умнее в долгосрочной перспективе, но, похоже, не очень хорошо с тем, что делают все остальные с wxPython.
- Кроме того, wxDebug не «просто работал» под Linux, не обнаружил серьезных ошибок / дыр в wxPython — он удивительно стабилен и зрел из всех, что я видел. Одной из незначительных проблем, после того, как я стал «умным» и заменил мой статический TreeCtrl виртуальным древовидным элементом управления, был узел, у которого было необычно большое количество дочерних элементов, что вызывало сбой приложения при добавлении их всех — еще предстоит выяснить, почему. В целом удалось добиться значительного прогресса даже в плане производительности.
- Получив удовольствие от взлома, я также в девятый раз заново открыл важность модульных тестов и полезных абстракций. Taskcoach предоставляет хороший пример того, как выполнить модульное тестирование приложения wxPython. wxDebug не делает никаких реальных попыток отделить представления от контроллеров, и это быстро превращается в беспорядок и требует решения. Тем не менее, я бы порекомендовал избегать MVC или иным образом при начале работы, так как важно понять, где абстракции действительно полезны, иначе вы будете довольно быстро бороться со своим собственным кодом, а не узнавать о wxPython.
В любом случае, wxDebug доступен здесь в двоичном виде для Windows (извлеките кого-нибудь и запустите wxdebug.exe — спасибо py2exe ) — это рабочий прототип, который предлагает абсолютно нулевую выгоду по сравнению с Wincachegrind, за исключением, возможно, новинки. Пока не определились, собираюсь ли я продолжать с этим — есть много улучшений, от замены использования списков кортежами и исключения использования регулярных выражений в синтаксическом анализаторе до написания модульных тестов, чтобы заставить его работать под Максом OS X и Linux, использование фреймов MDI и т. Д. На данный момент, пожалуйста, не сообщайте об ошибках — это всего лишь прототип.