В чем преимущества PyQt над PyGTK и наоборот?

У меня есть приложение, GUI которого нужно переделать по эргономическим причинам. Это было написано в PyGTK, и мне интересно, переключиться ли я на PyQt, чтобы облегчить будущие разработки или нет.

Это приложение имеет в основном классический интерфейс с кнопками, панелями инструментов, диалогами и т.д., но также имеет некоторые специфические требования: мне обязательно нужно создать собственный виджет на основе treeview/tableview (чтобы сделать вид, похожий на таблицу), и это приложение имеет много рабочих потоков, которые обновляют графический интерфейс.

Я ищу совет по этим двум вопросам:

  • Что касается создания пользовательских виджетов, то PyQt предоставляет более эффективные механизмы, чем PyGTK, особенно для небольшого изменения существующих виджетов.
  • У меня были проблемы с (даже при правильном использовании threads_init() и threads_enter()) обновление GUI рабочими потоками при использовании PyGTK. Является ли PyQt лучше в этой точке?

Ответ 1

Мне нравится GTK + лучше, так как (по крайней мере для меня) это выглядит лучше. PyQt и варианты (например, PySide), однако, имеют огромный набор дополнительных функций, включая механизм WebKit, парсер XML, поддержку SQL и т.д.

Если вы просто хотите посмотреть, я бы сказал GTK +/PyGObject. Если вы планируете использовать что-либо PyQt, используйте PyQt.

В качестве примечания, если вы придерживаетесь GTK +, я бы посоветовал вам перейти на PyGObject и GTK + 3.0, так как PyGtk + больше не поддерживается.

Ответ 2

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

Qt определенно имеет "treeview/tableview", о котором вы говорите, и вы можете сделать "ячейки" вашими пользовательскими виджетами (сейчас я просто изучаю эту тему). Qt был сделан с большой мыслью о потоках, поэтому рабочие потоки могут легко использовать механизм сигнала/слота. И да, вы можете изменить существующие виджеты, применяя таблицы стилей или подклассы.

Теперь о PyQt, я бы не рекомендовал его из-за проблем с лицензированием. PySide выглядит как лучший Qt → Python, привязанный ко мне: он может быть использован в коммерческих приложениях свободно и имеет несколько крошечных преимуществ в API (но в остальном он полностью совместим с PyQt).

Qt является кросс-платформенным, и внедрение приложений PySide очень просто с помощью cx_Freeze; пользователям вашего приложения не придется ничего устанавливать.

Ответ 3

У меня также нет опыта работы с GTK, но я могу предложить некоторые ответы:

  • Qt разработан с нуля, чтобы быть объектно-ориентированным; почти все в нем имеет отличную поддержку для подкласса. PyQt также.

  • Qt явно НЕ поддерживает модификацию GUI любыми потоками, отличными от основного потока GUI. Вы, вероятно, вызовите аварии таким образом. Однако, как отметил BlaXpirit, существует множество очень простых механизмов взаимодействия между потоками, таких как передача сигнала.

Ответ 4

Определенно PyQt... Есть много передовых приложений, использующих его... Лично я использую KDE, поэтому даже мой системный GUI использует Qt! Я также создаю приложение для работы с электронными таблицами, и я считаю, что это намного проще, чем то, что я думал сначала... Но, BiaXpirit также прав: кроме того, если вы разрабатываете приложение с открытым исходным кодом, возможно, вам следует использовать PySide или что-то еще еще...

Ответ 5

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

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

docs превосходны.

Изменить: вы можете напрямую использовать Qt-документы. Я программировал на python, используя PySide, и есть только несколько экземпляров, на которых я действительно нуждался в специальной документации. Хотя существует.