Поляна или нет: как лучше всего использовать PyGtk? - PullRequest
31 голосов
/ 07 сентября 2008

Я уже некоторое время изучаю Python с некоторым успехом. Мне даже удалось создать одну или две (простые) программы, используя PyGtk + Glade.

Дело в том, что я не уверен, что лучший способ использовать GTK с python - это создание интерфейсов с помощью Glade.

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

Ответы [ 11 ]

20 голосов
/ 08 сентября 2008

Я бы сказал, что это зависит: если вы обнаружите, что с помощью Glade вы можете создавать приложения, которые вы хотите или должны сделать, это совершенно нормально. Однако, если вы действительно хотите узнать, как работает GTK, или у вас есть какие-то нестандартные требования к пользовательскому интерфейсу, у вас будет , чтобы копаться во внутренностях GTK (что не так уж сложно).

Лично я, как правило, нахожусь около 5 минут в расширенном клиенте, когда мне нужна какая-то функция или настройка, которая просто невозможна с помощью дизайнера, такого как Glade или Stetic . Возможно, это только я. Тем не менее, мне все еще полезно загрузить дизайн окна с помощью графического инструмента.

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

P.S. Лично я нахожу Stetic превосходящим Glade в проектных работах, хотя и немного более нестабильным.

12 голосов
/ 07 сентября 2008

Используйте GtkBuilder вместо Glade, он интегрирован в сам Gtk вместо отдельной библиотеки.

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

5 голосов
/ 20 сентября 2008

Я начал использовать glade, но вскоре перешел к тому, чтобы делать все в коде. Glade хорош для простых вещей, и это хорошо, когда вы изучаете, как GTK организует виджеты (как вещи упакованы и т. Д.). Однако, создавая все в коде, вы получаете гораздо больше гибкости. Кроме того, у вас нет зависимости от поляны.

5 голосов
/ 10 сентября 2008

Glade очень полезен для создания интерфейсов, это означает, что вы можете легко изменить графический интерфейс без особого кодирования. Вы обнаружите, что если вы хотите сделать что-нибудь полезное (например, создать древовидное представление), вам придется ознакомиться с различными частями документации GTK - на практике найти хороший учебник / примеры.

4 голосов
/ 08 февраля 2009

Если вы пишете традиционное приложение с графическим интерфейсом, которое использует много стандартных компонентов из 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, так что вы можете легко добавлять свои собственные виджеты.

4 голосов
/ 20 сентября 2008

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

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

2 голосов
/ 20 ноября 2008

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

1 голос
/ 27 января 2010

Сначала начните рассматривать это в перспективе.

Вы будете использовать GTK. Это огромная библиотека C, построенная в 1993 году с использованием лучших традиций стиля кодирования 1970-х годов. Он был создан для того, чтобы помочь реализовать GIMP, конкурента Photoshop, желающего избежать грубых ошибок в пользовательском интерфейсе. Типичное поле графического интерфейса может иметь сорок или более параметров, в основном повторяющихся, имеющих геттеры и сеттеры. Будет боль.

Сам GTK управляет полной системой динамических типов в C, используя GObject. Это делает отладку особой радостью, которая требует ручного обхода массивов указателей на методы, полные общих списков аргументов с неявным наследованием. Вы также будете прыгать через библиотеки Pango, когда вы меньше всего этого ожидаете, например, используя константу Pango для того, где в метке идет многоточие, когда страница маленькая. Ожидайте больше боли.

К настоящему времени вы, вероятно, обещаете обернуть все ваши взаимодействия GTK в архитектуру Model-View-Controller, специфичную для вашего приложения. Это хорошо.

Использование Glade, или gtkBuilder, или Stetic, поможет решить огромную проблему связи сорока параметров с функцией. Glade предоставляет базовый конструктор графического интерфейса для перетаскивания компонентов вместе. Параметры и унаследованные параметры несколько разделены. Результатом Glade является XML-файл .glade, который вы затем прочитаете, присоедините ваши обратные вызовы («обработчики сигналов») к функциям с одинаковыми именами и запросите или обновите версию этого XML в памяти, чтобы получить виджеты, которые вы затем используете pyGTK. манипулировать. Сама полянка скрипучая и не очень ухоженная.

Использование pyGTK дает вам досадно мелкозернистый контроль для построения вашего GUI. Это будет подробный, скопируйте и вставьте код. Каждый атрибут будет отдельным вызовом функции. Атрибут-установщик ничего не возвращает, поэтому о цепочке вызовов не может быть и речи. Как правило, ваша среда IDE дает лишь минимальную справку о том, что означают функции, и вы будете постоянно ссылаться на DevHelp или какой-либо другой инструмент.

Можно было бы ожидать, что графические интерфейсы GTK должны были дать сбой.

1 голос
/ 15 апреля 2009

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

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

1 голос
/ 14 октября 2008

Для быстрых и простых экранов я использую Glade. Но для всего, что требует более высокого уровня контроля, я создаю пользовательские классы для того, что мне действительно нужно (это важно, потому что слишком легко увлекаться обобщениями).

С помощью специальных классов приложений для скинов, я могу быстро менять внешний вид приложения в одном месте. Скорее, как использование CSS для обеспечения согласованности веб-сайтов.

...