Pour les interfaces graphiques, PyGTK ou PyQt4 ?
Quelle est votre expérience ? Vaut-il mieux ne pas faire d'IHM avec Python ?
Le 2010-08-19 16:36:26, par dourouc05, Responsable Qt & Livres
Pour développer une application graphique avec Python, un certain choix est disponible : Tkinter, pyFltk, PyQt, PyQtk, PySide, wxPython... Certains vont même jusqu'à déconseiller l'utilisation de Python pour les interfaces graphiques, alors que d'autres sites disent le contraire, avec même de quoi sélectionner le framework graphique le plus adapté. Voici un retour d'expérience sur le choix d'un framework graphique pour une application Python. Fallait-il vraiment le faire en Python ?
Envoyé par Christophe Kibleur
Avez-vous déjà essayé ces deux bindings, PyGtk et PyQt4 ? Quelle en est votre expérience ? Comment s'est fait votre choix ? Avez-vous préféré un autre binding ?
Ou bien êtes-vous à l'opposé : Python, c'est bien mais pas pour des GUI. Quels sont vos griefs ? Que manque-t-il à Python ?
Ou bien êtes-vous à l'opposé : Python, c'est bien mais pas pour des GUI. Quels sont vos griefs ? Que manque-t-il à Python ?
-
Matthieu BrucherRédacteurPyGTK s'est sans doute amélioré, il fut une époque où il ne valait mieux pas trop l'utiliser en multithread. Plutôt que PyGTK, je prendrai wxPython.le 19/08/2010 à 17:36
-
wiztricksExpert éminent séniorSalut,
Je connais peu de GUI écrits en Python.
Par contre, il existe des "bindings" qui permettent d'écrire des IHM avec Python qui utiliseront les GUI: Wx, GTK, Qt,...
A la base ces bindings n'apportent aucune fonctionnalité supplémentaire: elles permettent d'utiliser les existantes...
Préférer Qt à Wx ou le contraire, pourquoi pas, mais pourquoi mettre Python dans la balance pour un tel choix?
Par contre, nous pourrions avoir une discussion plus pythonique sur un thème proche... est ce que
- Boa,
- Camelot,
- Traits GUI,
- ...
- Wle 19/08/2010 à 21:44 -
kangoMembre éprouvébonsoir,
je ne connais pas PyGTK, j'utilise PyQt/QtDesigner pour des interfaces simples. Je suis satisfait du résultat.
comment s'est fait mon choix ? après avoir fait du Tkinter qui est limité, il était question de changer. Le facteur déclencheur est lié au fait que Tkinter n'est pas thread-safe. Le choix s'est porté entre wxPython et PyQt. C'est surtout QtDesigner qui a fait la différence. Je n'ai pas du tout accroché à boa.
la rapidité d'apprentissage de la librairie, facilitée par QtDesigner et QtAssistant et le livre de Mark Summerfield (Rapid GUI Programming with Python and Qt) m'a convaincu de ce choix.
j'avais aussi parcouru wxPython in action et fais quelques tests avec WxPython, ça m'a beaucoup plus.
ensuite, je pense que le lien pointant les lacunes de Python en terme d'IHM est dépassé et un brin malhonnête. comment peut on tirer une telle conclusion avec seulement les tests qui ont été faits ?le 20/08/2010 à 22:08 -
boulabiarFutur Membre du ClubJe vous conseille PySide
http://www.pyside.org/
PySide est License LGPL et avec l'API compatible PyQt (License GPL)le 24/08/2010 à 12:22 -
afranck64Membre éprouvéBonsoir,
moi pour le moment je fait mes GUI avec Tkinter. Depuis le début ça allait mais je pense que je vais bientôt me mettre à wxPython. J'ai vu des interfaces avec et j'apprécie beaucoup.
@+ et bon codele 24/08/2010 à 19:29 -
o.girardotMembre confirméBonsoir,
Après plusieurs expériences en Python, j'ai trouvé la plupart des framework assez compliqués, peu maintenable et surtout peu sympathique esthétiquement.
Je suis revenu de cette opinion en découvrant le binding Python PyQt pour le framework Qt de nokia.
J'ai réussi à faire d'agréables interface graphique avec la facilité et la rapidité qui caractérise python ! j'ai d'ailleurs publié récemment un article d'introduction à PyQt sur developpez.net :
http://ogirardot.developpez.com/introduction-pyqt/
Un point qui m'a un peu refroidi, était le coté GPLv3 + license commerciale de PyQt, mais comme l'a signalé boulabiar le framework PySide est compatible en terme d'api avec PyQt et est totalement libre !
Donc tout mon code a à peine évolué dans le passage de l'un à l'autre.
et en plus le livre Rapid Programming with PyQt est un très bon ouvrage.
Donc pour le point final, je recommande tout autant PySide et je suis de près son développement.
D'ailleurs tous mes futurs articles seront avec PySide dans le rôle principal, surtout pour son coté LGPL.
Bonne soirée,
Olivier.le 24/08/2010 à 21:56 -
monnomamoiMembre avertiHello,
Personnellement je programme avec PyGTK, que je trouve à la fois simple et assez puissant. J'ai aussi utilisé Tkinter, qui est très pratique pour faire des boites de dialogues mais on est vite limité...
Les IHM en python ne sont pas particulièrement lentes à condition de ne pas faire de bidouilles qui nécessitent un rafraichissement fréquent, comme par exemple implémenter les numéros de lignes dans une zone de texte (ça m'étonne d'ailleurs que ce ne soit pas disponible dans Scintilla). Mieux vaut utiliser les possibilités existantes d'un widget, ou même laisser tomber si la fonctionnalité n'est pas présente par défaut.
En bref, PyGTK est très bien pour développer rapidement une interface à un soft, mais il vaut mieux ne pas en vouloir plus que ce que GTK peut offrir.Glade 3, c'est bien, mais placer par défaut un GtkWindow en mode invisible me paraît vraiment complètement débile ;Certains widgets ne sont pas dans Glade 3 (GtkSourceView, GtkHTML, etc.) ;Fautes de frappe dans Devhelp qui font perdre du temps. Exemple : set_tabs_width au lieu de set_tab_width.
-le 25/08/2010 à 7:54 -
fraoustinMembre éprouvépour ma part je réalise tout en tkinter et surtout depuis les versions 2.7 et supérieur en ttk (je vous conseil vraiment de jeter un coup d'oeil)
pas de module supplémentaire à installé, que du bonheur
souvent je me suis vu faire des IHM en html et javascript et mettre python côté serveurle 25/08/2010 à 8:57 -
> wiztricks
Merci pour les liens, je ne connaissais ni Camelot ni Traits
vu que je fais moi-meme pas mal de developpement PyQt avec Elixir (et une pincee de mechanize et lxml...) je vais surement jeter un oeil a Camelot sous peu.
Par contre, malgre quelques petites recherches, j'avoue que j'ai du mal a voir la valeur ajoutee par Traits.- Initialization: A trait has a default value, which is automatically set as the initial value of an attribute before its first use in a program.
- Validation: A trait attribute's type is explicitly declared . The type is evident in the code, and only values that meet a programmer-specified set of criteria (i.e., the trait definition) can be assigned to that attribute. Note that the default value need not meet the criteria defined for assignment of values.
- Delegation: The value of a trait attribute can be contained either in the defining object or in another object delegated to by the trait.
- Notification: Setting the value of a trait attribute can notify other parts of the program that the value has changed.
- Visualization: User interfaces that allow a user to interactively modify the value of a trait attribute can be automatically constructed using the trait's definition.
Initialisation, ben on connait deja non, les arguments par defaut ?
Validation, vu que le typage est verifie au runtime, qu'est ce que ca change ?
Delegation, en tant qu'utilisateur PyQt je m'en sers deja pas mal
Notification => signal/slot ?
Je dis tout ca sans arriere pensee, je ne demande qu'a etre convaincu !!!le 25/08/2010 à 10:58 -
parisien1082Candidat au ClubPour ma part on m'a imposé l'utilisation de wxPython
Je peux dire qu'on peut faire pas mal de chose et assez rapidement.
J'utilise wxGlade ,pour générer les interfaces , et Eclipse pour le code Python .
J'ai fait une application avec plusieurs connexions TCP/IP en parallèle , qui fait pas mal de calcul et rafraichit l'IHM en temps réel , ça marche mais ça consomme beaucoup trop de CPU et de mémoire . Donc si c'était à refaire j'opterais pour C++/QT.
A mon avis les inconvénients majeurs de Python/WxPython:
-Les mises à jour de wxPython ne sont pas très fréquentes (1 fois par an en moyenne ).
-Impossibilité d'utiliser les multi-core du PC à cause du "Global Interpreter Lock" .
-Manque de documentation .le 25/08/2010 à 11:07