Поляна или не поляна:Как лучше всего использовать PyGtk?

StackOverflow https://stackoverflow.com/questions/48123

Вопрос

Я уже некоторое время изучаю 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top