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

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

46
задан nachik 6 February 2009 в 11:43
поделиться

5 ответов

Разверните этот ответ.

Tkinter

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

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, платформа C++. Это вполне совершенствуется и имеет некоторые хорошие инструменты как спокойный Разработчик для разработки приложений. Необходимо знать, хотя, что не похоже на Python 100%, но близко к нему. документация превосходна

, Эта платформа действительно хороша. Это активно разрабатывается Trolltech, который принадлежит Nokia. Привязка для Python разрабатывается Берегом реки.

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

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

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

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

PySide

PySide является LGPL, связывающим с QT. Это разрабатывается Nokia как замена для GPL PyQt.

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

wxPython

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

то, Что я действительно пропускаю, является хорошим инструментом для разработки интерфейса, у них есть приблизительно 3, но ни один из них не применим.

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

wxPython действительно только о классах GUI, очень еще нет.

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

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

Другие

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

45
ответ дан 7 revs, 4 users 68% 8 November 2019 в 00:22
поделиться

Партии Pro wxPython

  • учебных руководств
  • wxGlade как Редактор: не прекрасный все же, но применимый.
0
ответ дан Danny 8 November 2019 в 00:22
поделиться

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

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

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

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

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

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

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

По моему опыту, HTML настолько легче получить что-то красивое, чем библиотеки UI.

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

5
ответ дан gatoatigrado 26 November 2019 в 20:35
поделиться

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

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

7
ответ дан 26 November 2019 в 20:35
поделиться

Jython .

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

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

Вот приложение Swing Hello world из Введение в 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())

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

6
ответ дан 26 November 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: