Подтвердить что ты не робот

Кросс-платформенный набор инструментов gui для развертывания приложений Python

Основано на: http://www.reddit.com/r/Python/comments/7v5ra/whats_your_favorite_gui_toolkit_and_why/

Достоинства:

1 - простота проектирования/интеграции - кривая обучения

2 - поддержка/доступность для * nix, Windows, Mac, дополнительные точки для встроенного l & f, поддержка для мобильных или веб-сайтов

3 - pythonic API

4 - качество документации - я хочу сделать что-то более сложное, теперь что?

5 - легкая упаковка, поэтому нет необходимости включать полный инсталлятор (py2exe, py2app в идеале будет работать как есть, а не генерировать файл gazillion MBs)

6 - лицензирование

7 - другие? (Указать)


Соперники:

1 - tkinter, поддерживаемый в настоящее время (начиная с 2.6, 3.0)

2 - библиотека pyttk

3 - pyGTK

4 - pyQt

5 - wxPython

6 - HTML-CGI через фреймворк на основе Python (Django, Turbogears, web.py, Pylons...) или Paste

7 - другие? (Указать)

4b9b3361

Ответ 1

Пожалуйста, не стесняйтесь развернуть этот ответ.

Tkinter

Tkinter - это инструментарий, который поставляется с python. Это означает, что у вас уже есть все необходимое для написания графического интерфейса. Это также означает, что если вы решите распространять свою программу, скорее всего, у всех остальных уже есть то, что нужно для запуска вашей программы.

Tkinter зрелый и стабильный и (по крайней мере, возможно) довольно прост в использовании. Мне было проще использовать его, чем wxPython, но, очевидно, это несколько субъективно.

Tkinter получает плохой рэп за то, что он выглядит уродливым и устаревшим. Хотя верно, что легко создавать уродливые графические интерфейсы с помощью Tkinter, также довольно легко создавать приятные графические интерфейсы. Tkinter не держит вас за руку, но это тоже не мешает. Tkinter выглядит лучше всего на Mac и Windows, так как там используются собственные виджеты, но он тоже выглядит нормально на Linux.

Другая точка зрения Tkinter заключается в том, что, по большей части, взгляд не так важен, как люди делают это. Большинство приложений, написанных с помощью наборов инструментов, таких как Tkinter, wxPython, PyQT и т.д., Являются специальными приложениями. Для типов приложений, для которых используются эти инструментальные средства, выглядит внешний вид юзабилити. Если внешний вид приложения важен, достаточно легко отполировать приложение Tkinter.

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

В обратном направлении Tkinter является оберткой вокруг интерпретатора Tcl, который работает внутри python. Это в основном невидимо для тех, кто разрабатывает Tkinter, но иногда приводит к сообщениям об ошибках, которые раскрывают эту архитектуру. Вы получите сообщение об ошибке, связанное с виджетами с именем ".1245485.67345", которое практически не имеет смысла, если вы не знакомы с тем, как работает Tcl/tk.

Другим недостатком является то, что у Tkinter не так много встроенных виджетов, как wxPython. Например, иерархический древовидный виджет в Tkinter немного слаб, и нет встроенного виджета таблицы. С другой стороны, холсты Tkinter и текстовые виджеты чрезвычайно мощны и просты в использовании. Для большинства типов приложений вы напишете, однако, у вас будет все, что вам нужно. Просто не ожидайте репликации Microsoft Word или Photoshop с помощью Tkinter.

Я не знаю, что такое лицензия для Tkinter, я предполагаю то же, что и для python в целом. Tcl/tk имеет лицензию в стиле BSD.

PyQt

Он строится поверх Qt, рамки С++. Он довольно продвинутый и имеет некоторые хорошие инструменты, такие как Qt Designer для разработки ваших приложений. Вы должны знать, что это не похоже на Python 100%, но близко к нему. Документация отличная

Эта структура действительно хороша. Он активно развивается Trolltech, который принадлежит Nokia. Связи для Python разрабатываются Riverbank.

PyQt доступен под лицензией GPL или коммерческим. Цена лицензии PyQt на берегу реки составляет около 400 евро за каждого разработчика.

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

Qt используется для эмуляции элементов GUI на каждой платформе, но теперь использует собственные стили платформ (хотя и не встроенные средства графического интерфейса пользователя): см. документацию для Mac OS X и стиль Windows XP

Упаковка так же проста, как запуск py2exe или pyInstaller. Содержимое моего приложения PyQt выглядит так на окнах (я использовал InnoSetup поверх него для правильной установки):

pyticroque.exe           PyQt4.QtGui.pyd           unicodedata.pyd
MSVCP71.dll              PyQt4._qt.pyd             unins000.dat
MSVCR71.dll              python25.dll              unins000.exe
PyQt4.QtCore.pyd         sip.pyd                   _socket.pyd

QT поставляется с дизайнером виджета и даже в последних версиях с IDE, чтобы помочь в разработке программного обеспечения Qt.

PySide

PySide - это привязка LGPL к Qt. Он был разработан nokia в качестве замены для GPL PyQt.

Хотя на основе технологии, чем существующие GPL-лицензированные привязки PyQt, PySide изначально будут направлены на то, чтобы API-совместимый с ними. К тому же к API, совместимому с PyQt, более Pythonic API будет предоставлен в будущее.

wxPython

wxPython является связыванием для Python с помощью wxWidgets -Framework. Эта схема находится под лицензией LGPL и разработана сообществом с открытым исходным кодом.

То, что мне действительно не хватает, - хороший инструмент для разработки интерфейса, у них около 3, но ни один из них не может быть использован.

Одна вещь, которую я должен упомянуть, это то, что я обнаружил ошибку в табуляции, несмотря на то, что я не использовал ничего продвинутого. (Только для Mac OS X) Я думаю, wxWidgets не отполирован как Qt.

wxPython - это действительно только о GUI-классах, там не так много.

wxWidgets использует собственные GUI-элементы.

Преимущество wxPython над Tkinter заключается в том, что wxPython имеет гораздо большую библиотеку виджетов, из которых можно выбирать.

Другие

У меня нет опыта работы с другими интерфейсами GUI, возможно, у кого-то еще есть.

Ответ 2

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

Qt отлично, но PyQt, похоже, не имеет одинаковых ресурсов разработки. Кажется, у него есть какой-то умный способ генерации привязок, но он не является полным (например, терминал PyKDE kpart), и существует недостаток документации (как признают разработчики). Совместимость с дизайнером Qt UI хороша.

wxpython - элементы управления не так красивы, библиотека виджета не такая большая, как KDE.

OpenGL - даже не поддерживает шрифты по умолчанию... pygame в порядке, но opengl, являющийся конечным автоматом, слишком раздражает (объектно-ориентированные модели не позволяют сделать вызов в неправильном состоянии).

XUL - опрятная идея, я бы хотел, чтобы это сработало. pyxulrunner учебник для меня не сработал - сначала мне пришлось добавить путь xulrunner/usr/lib к LD_LIBRARY_PATH, то у него все еще были проблемы с "из компонентов импорта xpcom"...

Мой список пожеланий для библиотеки ui будет

  • Интеграция с Python (например, использует встроенные функции, такие как unicode, модули, такие как потоки и языковые функции, такие как закрытие).
  • хорошее промежуточное представление (например, XUL вместо генерации сотен строк, похожих на "listbox91.addChild(label28)" )
  • простая поддержка mutlithreaded (автоматические блокировки или проводка событий, например, elt.setText может быть вызвана из любого потока, пусть разработчик управляет блокировкой с помощью блокировок Python, если это необходимо)
  • пользовательские функции, а также - сценарий последовательности событий пользовательского интерфейса, возможность привязки клавиш (KDE имеет dcop, но привязка afaik не выполняется автоматически библиотекой пользовательского интерфейса) и перехватывает события.
  • потенциал для большой, простой в использовании стандартной библиотеки.
  • хотя, если библиотека была хорошо спроектирована и получила достаточный интерес, это было бы задано.

По моему опыту, html намного проще получить что-то привлекательное, чем библиотеки пользовательского интерфейса.

изменить - после работы с PyQt 4 какое-то время он выполняет работу для простых пользовательских интерфейсов. В настоящее время я не разрабатываю для конечных пользователей, поэтому взгляды не имеют значения. QTextBrowser очень полезен для отображения основных HTML-таблиц и создания HTML-ссылок.

Ответ 3

Jython.

Jython - это реализация высокоуровневые, динамические, объектно-ориентированные язык Python написан на 100% Pure Java и легко интегрируется с платформу Java. Это позволяет вам для запуска Python на любой платформе Java.

Вы можете использовать либо Swing, Applet, либо другие графические интерфейсы, доступные для платформы Java. См. Учебники по Java для Графические пользовательские интерфейсы и 2D-графика. Существует множество книг и документация, например Ссылка на API.

Здесь приложение Hello Hello Swing из Введение в Jython.

from javax.swing import *

frame = JFrame("Hello Jython")
label = JLabel("Hello Jython!", JLabel.CENTER)
frame.add(label)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
frame.setSize(300, 300)
frame.show()

Здесь находится апплет Jython Тодда Дичендорфа, который демонстрирует многопоточный рисунок частиц (60 строк).

from __future__ import nested_scopes
import java.lang as lang
import java.util as util
import java.awt as awt
import javax.swing as swing

class Particle:

    def __init__(self,initX,initY):
    self.x = initX
    self.y = initY
    self.rng = util.Random()

    def move(self):
    self.x += self.rng.nextInt(10) - 5
    self.y += self.rng.nextInt(20) - 10

    def draw(self,g2):
    g2.drawRect(self.x,self.y,10,10)

class ParticleCanvas(awt.Canvas):

    def __init__(self,newSize):
    awt.Canvas.__init__(self,size=(newSize,newSize))

    def paint(self,g2):
    for p in self.particles:
        p.draw(g2)

class ParticleApplet(swing.JApplet):

    def init(self):
    self.canvas = ParticleCanvas(self.getWidth())
    self.contentPane.add(self.canvas)

    def start(self):
    n = 10
    particles = []
    for i in range(n):
        particles.append(Particle(150,150))
    self.canvas.particles = particles

    self.threads = []
    for i in range(n):
        self.threads.append(self.makeThread(particles[i]))
        self.threads[i].start()

    def makeThread(self,p):

    class MyRunnable(lang.Runnable):
        def run(this):
        try:
            while 1:
            p.move()
            self.canvas.repaint()
            lang.Thread.sleep(100)
        except lang.InterruptedException:
            return

    return lang.Thread(MyRunnable())

Если вам просто интересно рисовать линии и круги, вы, вероятно, можете сократить его до половины.

Ответ 4

Я просто взвешиваю, чтобы сказать, что TKinter сосет. Печально, что он упакован с Python из-за обратной совместимости.

Документация ужасна. Это выглядит ужасно. Я столкнулся с некоторыми странными ошибками, которые на самом деле сбой Python.

Ответ 5

Pro wxPython

  • Много учебников
  • wxGlade как редактор: еще не совершенен, но полезен.