Графический интерфейс на основе разметки для Python

Я хочу заняться программированием некоторых серьезных приложений на основе графического интерфейса, но когда я смотрю на такие вещи, как Swing/SWT из Java, я не могу не НЕНАВИДИТЬ программирование интерфейса с графическим интерфейсом, создавая объекты «виджетов», заполняя их и вызывая методы на их.

Я думаю, что дизайн GUI должен быть выполнен в отдельном текстовом файле в каком-то формате разметки, который читается и отображается (например, HTML), чтобы дизайн интерфейса не был тесно связан с остальным кодом.

Я видел HTMLayout, и мне нравится эта идея, но пока что это только на C++.

Я ищу библиотеку Python (или даже проект WIP) для создания графического интерфейса на основе разметки.

ОБНОВЛЕНИЕ

Причина, по которой я не могу принять xml QT, - это та же причина, по которой я ненавижу программный подход; вы собираете каждый виджет отдельно и указываете каждое его свойство в отдельной строке. Это не дает никаких преимуществ по сравнению с программным способом.


person hasen    schedule 12.12.2008    source источник


Ответы (8)


Вы можете попробовать XUL от Mozilla. Он поддерживает Python через XPCOM.

См. этот проект: pyxpcomext

XUL не компилируется, он упаковывается и загружается во время выполнения. Firefox и многие другие замечательные приложения используют его, но большинство из них используют для написания сценариев Javascript вместо Python. Однако есть один или два, использующих Python.

person Community    schedule 20.04.2009

Как насчет wxPython? Я только начинаю с ним работать, но есть инструмент — Редактор ресурсов XRC — который позволяет вам собрать свой графический интерфейс, который затем записывается в файл XML. Насколько я понимаю, ваше приложение Python загружает файл XML, а не смешивает целую кучу кода с графическим интерфейсом с вашим кодом Python.

person Mark42    schedule 12.12.2008
comment
+1. Вероятно, лучший вариант для Python. Я предпочитаю этот подход тому, который я предложил. Руководство по файлам ресурсов XML: wiki.wxpython.org/UsingXmlResources - person ; 30.11.2009

Вы должны изучить Qt, который вы можете использовать из Python, используя отличный интерфейс PyQt (почему они не назвали его QtPy --- милашка, понял? --- я никогда не пойму).

С Qt у вас может быть выбор: создавать свой графический интерфейс программно (что вам не нужно) или использовать XML-разметку. Этот XML-файл можно либо заранее скомпилировать в код, либо загрузить с помощью короткой команды. Последнее является обычным способом работы с использованием PyQt.

Qt является универсальным, высококачественным, кроссплатформенным, и вы, вероятно, уже используете его, даже не подозревая об этом. Официальное клиентское приложение Skype написано на Qt, если я правильно помню.

Редактировать: Просто добавьте несколько ссылок, чтобы ОП почувствовал это...

person harms    schedule 12.12.2008
comment
Я знакомился с Qt раньше, хотя и не в полной мере, было бы полезно, если бы вы добавили ссылку на что-то, связанное с xml-разметкой :) - person hasen; 13.12.2008
comment
Я использую QT/PyQT на работе и люблю их использовать. Имейте в виду, что пока вы учитесь, они обе бесплатны, как и в лицензии с открытым исходным кодом GPL, но как только вы начнете продавать свою работу, вам необходимо купить коммерческие лицензии для разработчиков, по одной на каждого разработчика. - person ; 13.12.2008
comment
Разметка XML — это формат используемых файлов .ui. Их, вероятно, можно написать вручную, или вы можете использовать Qt Designer для их создания. - person gnud; 13.12.2008
comment
hasen: Первая из трех ссылок включает пример файла .ui: sector.ynet.sk/qt4-tutorial/tutorial/ - person harms; 13.12.2008
comment
Кстати, обратите внимание, что третья ссылка относится к PyQt версии 3, поэтому, вероятно, она больше не применима на 100%. - person harms; 13.12.2008
comment
хм, судя по этому файлу-примеру, этот формат слишком сложен, он даже близко не к HTML, он организован более или менее так же, как код, создающий и размещающий объекты виджета вручную. - person hasen; 13.12.2008
comment
По какой-то конкретной причине вы не хотели бы использовать приложение Qt Designer или эквивалентные инструменты для других систем для создания этой разметки для вас? По крайней мере, когда я прикасался к этому материалу (год назад), я обнаружил, что делаю все это в Qt Designer и на самом деле только просматриваю вывод XML. - person harms; 13.12.2008
comment
Ну, я мог бы использовать Visual Studio с C# в этом отношении, и мне не пришлось бы задавать вопрос... - person hasen; 13.12.2008
comment
VS IDE поставляется с набором инструментов для виджетов. Qt отделен от вашей IDE. Qt Designer позволяет разместить дизайн в XML-файле .ui. XML преобразуется в код Python с помощью pyuic4. Вы управляете своими выложенными виджетами с помощью Python. Еще немного HTML, и вы говорите о разработке веб-приложения, не так ли? - person ; 13.12.2008
comment
Извините за двойной комментарий, но я хотел упомянуть, что pyuic4 — это утилита, которая поставляется с библиотекой PyQt для Python. - person ; 13.12.2008
comment
Крис, посмотри на HTMLayout, это не браузер, и он не реализует все спецификации HTML. - person hasen; 13.12.2008
comment
Просто захотелось сказать, что Qt теперь LGPL. - person Nailer; 20.04.2009

Если вы выберете для разработки своего приложения такой язык, как Tcl или Python и Tk, написание собственного DSL для описания интерфейса становится довольно тривиальной задачей. Вы можете, например, написать DSL, который позволит вам создавать такие меню:

menubar {
    File => {
        Open => cmd.open
        Save => cmd.save
        Exit => cmd.exit
    }
    Edit => {
        Cut => cmd.cut
        Copy => cmd.copy
        Paste => cmd.paste
    }
}

... и ваш основной графический интерфейс выглядит следующим образом:

form PropertiesForm {
          Font: [fontchooser]
    Foreground: [foregroundChooser]
    Background: [backgroundChooser]
}
form NewUserForm {
    username [_____________________]
    [] administrator
    enable the following features:
    () feature 1
    () feature 2
    () feature 3
}
notebook {
   Properties => PropertiesForm
   New User => NewUserForm
}

... и так далее. Tcl действительно позволяет вам писать такие DSL. Обратите внимание, что эта возможность не встроена в Tcl как таковая, но язык делает DSL тривиальными. Кое-что из этого есть в вики Tcler, например, есть код для создания меню, похожего на то, что я описал в Меню. Легко.

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

person Bryan Oakley    schedule 20.04.2009

Если вы используете GTK, вы можете использовать Glade, который представляет собой XML-файл.

person Bernard    schedule 12.12.2008

Это XML, а не Python, но посмотрите на Open Laszlo.

person Charlie Martin    schedule 12.12.2008
comment
видимо не постарел - person Denis G. Labrecque; 16.03.2021

Как программист с графическим интерфейсом, получивший некоторый опыт, вы, вероятно, должны просто создать свой собственный милый набор инструментов для автоматизации задач, которые вы выполняете снова и снова.

person Seun Osewa    schedule 20.04.2009

окна?

вы можете использовать редактор WinForms в Visual Studio, а затем поговорить со сборкой из IronPython.

person Dustin Getz    schedule 12.12.2008
comment
Заминусовали, потому что это для Windows? Я не понимаю. +1 к смещению. - person orip; 06.01.2009
comment
Пониженный голос, потому что разговор со сборкой не равен пользовательскому интерфейсу на основе разметки, кроме того, даже если успешно утверждается, что он / основан на разметке, хотя и с причудливой библиотекой сборки для Windows-IDE, он страдает теми же проблемами, что и OP с КТ. - person Arafangion; 23.02.2009
comment
Редактор winforms создает код. Особенно уродливый код в некоторых случаях. Кроме того, IronPython — это реализация языка Python поверх среды выполнения .NET. Это означает, что вы потеряете много модулей CPython. - person ; 01.12.2009