Недавно я немного поработал над модификацией GUI-приложения Python, использующего виджеты wxPython. Я экспериментировал с Python в припадках и начинал последние шесть или семь лет, но это был первый раз, когда я работал с gui. Я был очень разочарован тем, что похоже на текущее состояние программирования gui с Python. Мне очень нравится язык Python, это забавное изменение от программирования Delphi/ObjectPascal, к которому я привык, и, безусловно, большое увеличение производительности для задач общего назначения. Я бы хотел перейти на Python для всего.
Но wxPython - это огромный шаг назад от чего-то вроде Delphi VCL или .NET WinForms. В то время как сам Python предлагает хороший прирост производительности от общего программирования более высокого уровня абстракции, wxPython используется на более низком уровне абстракции, чем VCL. Например, я потратил много времени, пытаясь заставить объект списка wxPython вести себя так, как я этого хотел. Просто для добавления сортируемых столбцов были задействованы несколько сценариев с интенсивным использованием кода, один для создания и поддержки структуры теневых данных, обеспечивающей фактический порядок сортировки, другой, чтобы можно было показать треугольники направления сортировки в заголовке столбца и еще пару я не помню. Все эти шаги, связанные с ошибками, могут быть выполнены просто путем установки значения свойства с использованием моего компонента grid. Delphi.
Мой вывод: хотя Python обеспечивает большую производительность, повышая уровень абстракции для большого количества кодирования общего назначения, wxPython представляет собой несколько уровней абстракции ниже, чем инструменты gui, доступные для Delphi. Чистый результат: GUI-программирование с Delphi намного быстрее, чем программирование gui с Python, а полученный ui с Delphi еще более отполирован и полнофункциональный. Мне не кажется, что это преувеличивает, говоря, что программирование в Delphi gui было более продвинутым еще в 1995 году, чем программирование python gui с помощью wxPython в 2009 году.
Я изучал другие фреймворки python gui, и это выглядело не так, как будто они были значительно лучше, чем wxPython. Я также провел некоторое минимальное исследование gui formbuilders для wxPython, что сделало бы вещи немного лучше. Но по большинству отчетов эти решения ошибочны, и даже отличный разработчик форм не будет рассматривать мои основные жалобы на wxPython, которые просто состоят в том, что у него меньше функций и обычно требуется, чтобы вы выполняли GUI-программирование на гораздо более низком уровне абстракции, чем я используется с Delphi VCL. Некоторое быстрое исследование предложенных решений python gui-dev (http://wiki.python.org/moin/GuiProgramming), по-видимому, несколько удручает для тех, кто используется в Delphi или .NET.
Наконец, у меня есть несколько вопросов.
Во-первых, я что-то упускаю? Есть ли какое-то решение для разработки Python, которое может сравниться с программированием VCL или WinForms? Мне не обязательно, если это не совсем соответствует Delphi VCL. Я просто ищу что-то, что в той же лиге.
Во-вторых, может ли IronPython быть направлением? В основном я старался не употреблять .NET koolaid, но, возможно, IronPython дает мне повод для окончательного сдачи. Даже тогда IronPython полностью интегрируется с WinForms, или мне нужно, чтобы сами формы поддерживались С# или vb.сеть? Мне кажется, что это определенно имеет место с SharpDevelop и MonoDevelop (то есть, IronPython не может использоваться для создания GUI времени разработки). VS.NET полностью интегрирует IronPython с gui-building?
Мне кажется, что Python может "захватить мир" таким же образом, как и в Visual Basic в начале 1990-х годов, если для Python появилось замечательное новое решение для создания gui-building. Только на этот раз с Python у нас была бы новая парадигма быстрой, кросс-платформенной и open-gui-программирования. Разве корпорации не съедят это? Да, я знаю, веб-приложения в наши дни являются основным направлением, поэтому отличное решение Python-gui не создало бы такой же революции, что и VB. Но я не вижу, как исчезает GUI-программирование, и мне бы понравилось хорошее современное решение с открытым исходным кодом на высоком уровне.