46 votes

Boîte à outils gui multiplateforme pour le déploiement d'applications Python

Construire sur : http://www.reddit.com/r/Python/comments/7v5ra/whats_your_favorite_gui_toolkit_and_why/

Mérites :

1 - facilité de conception / intégration - courbe d'apprentissage

2 - support / disponibilité pour *nix, Windows, Mac, points supplémentaires pour l&f natif, support pour mobile ou web

3 - API pythonique

4 - qualité de la documentation - je veux faire quelque chose d'un peu plus compliqué, que faire maintenant ?

5 - emballage léger pour qu'il ne soit pas nécessaire d'inclure un installateur complet (py2exe, py2app devraient idéalement fonctionner tels quels et ne pas générer un fichier de plusieurs milliards de Mo).

6 - octroi de licences

7 - autres ? (précisez)


Candidats :

1 - tkinter, tel que supporté actuellement (à partir de 2.6, 3.0)

2 - bibliothèque pyttk

3 - pyGTK

4 - pyQt

5 - wxPython

6 - HTML-CGI via un framework basé sur Python (Django, Turbogears, web.py, Pylons...) ou Coller

7 - autres ? (précisez)

46voto

Georg Schölly Points 63123

N'hésitez pas à développer cette réponse.

Tkinter

Tkinter est la boîte à outils fournie avec python. Cela signifie que vous avez déjà tout ce dont vous avez besoin pour écrire une interface graphique. Cela signifie également que si vous choisissez de distribuer votre programme, il est fort probable que tout le monde ait déjà ce dont il a besoin pour l'exécuter.

Tkinter est mature et stable, et est (du moins en apparence) assez facile à utiliser. Je l'ai trouvé plus facile à utiliser que wxPython, mais évidemment c'est un peu subjectif.

Tkinter a la réputation d'être laid et dépassé. S'il est vrai qu'il est facile de créer des interfaces graphiques laides avec Tkinter, il est également assez facile de créer des interfaces graphiques agréables à regarder. Tkinter ne vous tient pas la main, mais il ne vous gêne pas beaucoup non plus. Tkinter a une meilleure apparence sur Mac et Windows puisqu'il utilise des widgets natifs, mais il a aussi une bonne apparence sur Linux.

L'autre point concernant l'apparence de Tkinter est que, pour la plupart, l'apparence n'est pas aussi importante que les gens le font croire. La plupart des applications écrites avec des boîtes à outils telles que Tkinter, wxPython, PyQT, etc. sont des applications à usage spécifique. Pour les types d'applications pour lesquelles ces boîtes à outils sont utilisées, la convivialité l'emporte sur l'apparence. Si l'apparence de l'application est importante, il est assez facile de peaufiner une application Tkinter.

Tkinter possède des fonctionnalités que les autres boîtes à outils sont loin d'égaler. Les traces variables, les polices nommées, les gestionnaires de géométrie (mise en page) et la façon dont Tkinter traite les événements sont toujours la norme à laquelle les autres boîtes à outils devraient être jugées.

En revanche, Tkinter est une enveloppe autour d'un interpréteur Tcl qui fonctionne dans python. Ceci est généralement invisible pour quiconque développe avec Tkinter, mais il en résulte parfois des messages d'erreur qui exposent cette architecture. Vous obtiendrez une erreur se plaignant d'un widget avec un nom comme ".1245485.67345" qui n'aura pratiquement aucun sens pour quiconque à moins que vous ne soyez également familier avec le fonctionnement de Tcl/tk.

Un autre inconvénient est que Tkinter n'a pas autant de widgets préconstruits que wxPython. Le widget d'arbre hiérarchique dans Tkinter est un peu faible, par exemple, et il n'y a pas de widget de table intégré. D'un autre côté, les widgets canvas et texte de Tkinter sont extrêmement puissants et faciles à utiliser. Pour la plupart des types d'applications que vous écrirez, cependant, vous aurez tout ce dont vous avez besoin. Ne vous attendez simplement pas à reproduire Microsoft Word ou Photoshop avec Tkinter.

Je ne sais pas quelle est la licence pour Tkinter, je suppose que c'est la même que pour python dans son ensemble. Tcl/tk a une licence de type BSD.

PyQt

Il est construit sur la base de Qt Qt, un framework C++. Il est assez avancé et dispose de quelques bons outils comme le Qt Designer pour concevoir vos applications. Il faut cependant savoir qu'il ne ressemble pas à Python à 100%, mais il en est proche. Le site documentation est excellent

Ce cadre est vraiment bon. Il est activement développé par Trolltech, qui appartient à Nokia. Les liaisons pour Python sont développées par Riverbank.

PyQt est disponible sous la licence GPL ou sous une licence commerciale. Le prix d'une licence PyQt riveraine est d'environ 400 euros par développeur.

Qt n'est pas seulement un cadre d'interface graphique, mais aussi beaucoup d'autres classes. On peut créer une application en utilisant simplement les classes Qt. (Comme SQL, les réseaux, les scripts, )

Qt avait l'habitude d'émuler les éléments de l'interface graphique sur toutes les plates-formes, mais il utilise maintenant les styles natifs des plates-formes (mais pas les boîtes à outils d'interface graphique natives). la documentation pour Mac OS X y le style Windows XP

L'emballage est aussi simple que l'exécution de py2exe ou pyInstaller. Le contenu de mon application PyQt ressemble à ceci sous Windows (j'ai utilisé InnoSetup par dessus pour une installation correcte) :

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 est livré avec un concepteur de widgets et même dans les versions récentes avec un IDE pour aider à la conception de logiciels Qt.

PySide

PySide est une liaison LGPL à Qt. Elle a été développée par Nokia pour remplacer la version GPL de PyQt.

Bien que basé sur une technologie différente technologie différente de celle des sous licence GPL de PyQt, PySide sera initialement aura pour objectif initial d'être compatible avec leur API. En plus de l'API compatible avec PyQt, une API plus plus pythonique sera fournie dans le l'avenir.

wxPython

wxPython est une liaison pour Python qui utilise le langage de programmation de l'UE. wxWidgets -Framework. Ce cadre est sous licence LGPL et est développé par la communauté open source.

Ce qui me manque vraiment, c'est un bon outil pour concevoir l'interface, ils en ont environ 3 mais aucun n'est utilisable.

Une chose que je dois mentionner, c'est que j'ai trouvé un bogue dans la vue par onglets, bien que je n'aie rien utilisé d'avancé. (Seulement sur Mac OS X) Je pense que wxWidgets n'est pas aussi soigné que Qt .

wxPython ne concerne que les classes GUI, il n'y a pas grand chose d'autre.

wxWidgets utilise des éléments d'interface graphique natifs.

Un avantage de wxPython par rapport à Tkinter est que wxPython dispose d'une bibliothèque de widgets beaucoup plus importante parmi laquelle choisir.

Autres

Je n'ai pas d'expérience avec d'autres frameworks GUI, peut-être que quelqu'un d'autre en a.

7voto

Unknown Points 22789

J'interviens juste pour dire que TKinter est nul. Il semble malheureusement qu'il soit emballé avec Python à cause de la rétrocompatibilité.

La documentation est horrible. Elle a l'air horrible. J'ai rencontré des bogues bizarres qui font planter Python.

6voto

Eugene Yokota Points 43213

Jython .

Jython est une implémentation du haut niveau, dynamique, orienté objet Python écrit en 100% pur Java, et intégrée de manière transparente à la plate-forme Java. Il vous permet ainsi d'exécuter Python sur n'importe quelle plate-forme Java.

Vous pouvez utiliser Swing, Applet ou d'autres cadres d'interface graphique disponibles sur la plate-forme Java. Voir Tutoriels Java para Interfaces utilisateur graphiques y Graphiques 2D . Il y a beaucoup de livres et documentation comme Référence API .

Voici une application Swing "Hello world" à partir de Une introduction à 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()

Voici un Jython applet de Todd Ditchendorf qui montre comment dessiner des particules en mode multithread. (60 lignes).

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())

Si vous n'êtes intéressé que par le dessin de lignes et de cercles, vous pouvez probablement le réduire de moitié.

5voto

gatoatigrado Points 6230

J'apprécierais vraiment si quelqu'un connaissait quelque chose de mieux que ce qui est généralement discuté ; je vois que j'ai du mal à trouver quelque chose d'approprié...

Qt est formidable, mais PyQt ne semble pas disposer des mêmes ressources de développement. Il semble avoir une façon intelligente de générer des liens, mais il n'est pas complet (par exemple PyKDE terminal kpart) et il y a un manque de documentation (comme les développeurs l'admettent). La compatibilité avec le concepteur d'interface utilisateur de Qt est agréable.

wxpython - les contrôles ne sont pas aussi beaux, la bibliothèque de widgets n'est pas aussi grande que celle de KDE.

OpenGL - ne supporte même pas les polices par défaut... pygame est correct, mais opengl étant une machine à état est trop ennuyeux (les modèles orientés objet empêchent de faire un appel dans un mauvais état).

XUL - bonne idée, j'aimerais qu'elle fonctionne. Le site pyxulrunner Le tutoriel n'a pas fonctionné pour moi, cependant -- d'abord j'ai dû ajouter le chemin xulrunner /usr/lib à LD_LIBRARY_PATH, ensuite il y avait toujours des problèmes avec "from xpcom import components"...

Ma liste de souhaits pour une bibliothèque d'interface utilisateur serait la suivante

  • Intégration de Python (c'est-à-dire utilisation de modules intégrés comme l'unicode, de modules comme le threading et de fonctionnalités du langage comme les closures)
  • une bonne représentation intermédiaire (comme XUL au lieu de générer des centaines de lignes ressemblant à "listbox91.addChild(label28)")
  • simple support mutlithread (verrous automatiques ou affichage d'événements pour que, par exemple, elt.setText puisse être appelé depuis n'importe quel thread ; laissez le concepteur gérer le verrouillage avec des verrous Python si nécessaire)
  • des fonctionnalités centrées sur l'utilisateur - le scriptage d'une séquence d'événements d'interface utilisateur, la possibilité de lier n'importe quel clavier (KDE dispose de dcop, mais à ma connaissance, la liaison n'est pas effectuée automatiquement par la bibliothèque d'interface utilisateur), et d'intercepter des événements.
  • le potentiel d'une grande bibliothèque standard, facile à contribuer.
  • la documentation, bien que si la bibliothèque était bien conçue et suscitait suffisamment d'intérêt, ce serait une évidence.

D'après mon expérience, il est tellement plus facile d'obtenir quelque chose de beau en HTML qu'en bibliothèques d'interface utilisateur.

modifier - après avoir travaillé avec PyQt 4 pendant un certain temps, il fait l'affaire pour les IU simples. Je ne développe pas actuellement pour des utilisateurs finaux, donc l'apparence n'a pas d'importance. Le QTextBrowser est très utile pour afficher des tableaux HTML de base et générer des liens HTML.

0voto

Danny Points 53

Pro wxPython

  • De nombreux tutoriels
  • wxGlade comme éditeur : pas encore parfait, mais utilisable.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X