Поляна или не поляна:Как лучше всего использовать PyGtk?
Вопрос
Я уже некоторое время изучаю Python и добился определенных успехов.Мне даже удалось создать одну или две (простые) программы, используя PyGtk + Glade.
Дело в том, что:Я не уверен, что лучший способ использовать GTK с Python — это создание интерфейсов с помощью Glade.
Мне было интересно, могут ли более опытные из нас (помните, я всего лишь новичок) указать на преимущества и предостережения от использования Glade по сравнению с созданием всего в самом коде (при условии, что изучение правильных привязок gtk не будет точно будет проблема).
Решение
Я бы сказал, что это зависит:если вы обнаружите, что с помощью Glade вы можете создавать приложения, которые хотите или должны создать, то это абсолютно нормально.Однако, если вы действительно хотите узнать, как работает GTK, или у вас есть какие-то нестандартные требования к пользовательскому интерфейсу, вы иметь покопаться во внутреннем устройстве GTK (что не так уж и сложно).
Лично я обычно нахожусь в богатом клиенте примерно за 5 минут, когда мне нужна какая-то функция или настройка, которую просто невозможно реализовать с помощью такого дизайнера, как Glade или Стетич.Возможно, это только я.Тем не менее, мне по-прежнему полезно создавать дизайн окон с помощью графического инструмента.
Моя рекомендация:если привлечение богатых клиентов с использованием GTK будет значительной частью вашей работы/хобби, тогда изучите также GTK, так как вы воля нужно когда-нибудь написать этот код.
P.S.Я лично нахожу Стетич превосходить Glade в дизайнерских работах, хотя и немного более нестабильно.
Другие советы
Используйте GtkBuilder вместо Glade, он интегрирован в сам Gtk, а не в отдельную библиотеку.
Основное преимущество Glade заключается в том, что создавать интерфейс гораздо проще.Подключение обработчиков сигналов требует немного больше работы, но я никогда не чувствовал, что это имеет большое значение.
Glade очень полезен для создания интерфейсов, это означает, что вы можете легко изменить графический интерфейс, не прибегая к написанию большого количества кода.Вы обнаружите, что если захотите сделать что-нибудь полезное (например,построить древовидное представление) вам придется ознакомиться с различными частями документации GTK - на практике найти хорошее руководство/примеры.
Я начал использовать Glade, но вскоре перешел к простому написанию всего кода.Glade удобен для простых задач и хорош, когда вы изучаете, как GTK организует виджеты (как вещи упаковываются и т. д.).Однако, создавая все в коде, вы получаете гораздо больше гибкости.Плюс, у вас нет зависимости от поляны.
Обычно я начинаю с Glade, пока не дохожу до того, что в нем нет нужных мне функций, например.создание мастера.Пока я использую стандартные виджеты, предоставляемые Glade, на самом деле нет смысла писать графический интерфейс вручную.
Чем более комфортно мне становится с тем, как Glade форматирует код, тем лучше становится мое кодирование вручную.Не говоря уже о том, что Glade очень легко использовать для создания базовой структуры, поэтому вам не придется беспокоиться обо всех инициализациях.
Если вы пишете традиционное приложение с графическим интерфейсом, которое повторно использует множество стандартных компонентов из GTK+ (кнопки, метки, контейнеры и т. д.), я бы лично выбрал Glade + Kiwi (удобную среду для создания приложений с графическим интерфейсом GTK+).
Единственное большое преимущество использования Glade заключается в том, что оно значительно сокращает количество кода макета/упаковки.Вот чрезвычайно простой пример, который уже показывает проблемы с размещением графического интерфейса вручную (без использования каких-либо вспомогательных функций):
container = gtk.HBox()
label = gtk.Label(str="test")
container.add(label)
Для получения дополнительных примеров возьмите Смотри сюда.Даже если вы пишете сложный собственный виджет, вы всегда можете создать заполнитель в Glade и заменить его после создания экземпляра.
Уже совсем скоро команде Glade предстоит выпустить новую версию дизайнера (3.6.0).В этой новой версии будет добавлена поддержка GtkBuilder, который заменяет libglade (фактическую библиотеку, которая преобразует XML-файлы Glade в дерево виджетов).В новом конструкторе Glade также снова добавлена поддержка определения каталогов (наборов виджетов) в Python, поэтому вы можете легко добавлять свои собственные виджеты.
Я рекомендую использовать Glade для быстрой разработки, а не для обучения.Почему?потому что иногда вам нужно будет настроить некоторые виджеты, чтобы они работали так, как вы хотите, и если вы на самом деле не знаете/не понимаете атрибуты свойств каждого виджета, у вас будут проблемы.
Для быстрых и простых экранов я использую Glade.Но для всего, что требует более тонкого контроля, я создаю специальные классы для того, что мне действительно нужно (это важно, потому что слишком легко увлечься обобщениями).
Используя специальные классы для небольших приложений, я могу быстро изменить внешний вид приложения в одном месте.Это похоже на использование CSS для обеспечения единообразия веб-сайтов.
Лично я бы рекомендовал написать код вместо использования Glade.Я все еще изучаю Python и pyGtk, но скажу, что написание пользовательского интерфейса вручную дало мне большое представление о том, как все работает под капотом.
Как только вы это освоите, я бы посоветовал попробовать Glade или другим дизайнерам пользовательского интерфейса, но сначала обязательно научитесь делать это «сложным» способом.
Во-первых, начните рассматривать это в перспективе.
Вы будете использовать GTK.Это огромная библиотека C, созданная в 1993 году с использованием лучших традиций стиля кодирования 1970-х годов.Он был создан, чтобы помочь реализовать GIMP, конкурента Photoshop с легендарными ошибками пользовательского интерфейса.Типичное поле графического интерфейса может иметь сорок или более параметров, в основном повторяющихся, с геттерами и сеттерами.Будет боль.
Сам GTK управляет полной системой динамических типов на языке C с помощью GObject.Это превращает отладку в особое удовольствие, требующее ручного перемещения по массивам указателей на методы, полные универсальных списков аргументов с неявным наследованием.Вы также будете переходить к библиотекам Pango, когда меньше всего этого ожидаете, например, используя константу Pango для определения места в метке, где находится многоточие, когда страница маленькая.Ожидайте еще большей боли.
К настоящему моменту вы, вероятно, пообещали обернуть все ваши взаимодействия с GTK в архитектуру Модель-Представление-Контроллер, специфичную для вашего приложения.Это хорошо.
Использование Glade, gtkBuilder или Stetic поможет решить огромную проблему связывания сорока параметров с функцией.Glade предоставляет базовый конструктор графического интерфейса для перетаскивания компонентов вместе.Параметры и унаследованные параметры несколько разделены.Результатом Glade является XML-файл .glade, который вы затем прочитаете, прикрепите свои обратные вызовы («обработчики сигналов») к функциям с одинаковыми именами, а также запросите или обновите версию этого XML в памяти, чтобы получить виджеты, которые затем вы используете pyGTK. манипулировать.Сама поляна скрипучая и не ухоженная.
Использование pyGTK дает вам раздражающе детальный контроль над созданием графического интерфейса.Это будет подробный код, который можно копировать и вставлять.Каждый атрибут будет отдельным вызовом функции.Установка атрибута ничего не возвращает, поэтому о цепочке вызовов не может быть и речи.Обычно ваша IDE дает лишь минимальную информацию о том, что означают функции, и вы будете постоянно обращаться к DevHelp или какому-либо другому инструменту.
Можно было бы почти ожидать, что графические интерфейсы GTK должны были потерпеть неудачу.
Вы можете использовать Glade-2 для проектирования и использования Glade2py.py Для генерации кода Pure Pygtk он использует PygtKcompat для поддержки GTK3