# Autres langages > Python > GUI >  Pour les interfaces graphiques, PyGTK ou PyQt4 ? Un autre ?

## dourouc05

Pour dvelopper une application graphique avec Python, un certain choix est disponible : Tkinter, pyFltk, PyQt, PyQtk, PySide, wxPython... Certains vont mme jusqu' dconseiller l'utilisation de Python pour les interfaces graphiques, alors que d'autres sites disent le contraire, avec mme de quoi slectionner le framework graphique le plus adapt. Voici un retour d'exprience sur le choix d'un framework graphique pour une application Python. Fallait-il vraiment le faire en Python ? 




> J'ai rcemment eu une discussion avec Armin Ronacher (que j'admire beaucoup soit dit en passant), qui me demandait pourquoi je n'avais pas choisi PyGtk au lieu de PyQt4 pour coder PyK.
> 
> Selon lui, PyGtk est un bon toolkit, bien pens dans son architecture. Je suis tout  fait d'accord l-dessus mais mon choix s'tait fait suivant certains points :
> J'ai ador les dmos fournies par Qt4, vraiment impressionnantes ;Ma premire interface graphique avait t ralise il y a longtemps et se nommait TeXBases, avec Ruby + Gtk et j'en ai gard des souvenirs cauchemardesques en ce qui concernait la doc de l'poque. Finalement, j'avais fini par la recoder en PyQt4 ;J'ai dcouvert qu'il existait une alternative  Scintilla dans Qt4, celle-ci me permettrait de coder ma propre coloration syntaxique, mon folding, etc.; maintenant, avec du recul je peux vous affirmer que celle-ci est loin d'tre au point (lenteur, incohrences, ). Bien sr, je suis loin d'tre un excellent codeur, mais mme les btes de course sous Qt4 le disent et on voit plein de projets switcher d'un coup sous Scintilla tellement c'est abominable.
> Exemple : j'avais implment les numros de ligne dans PyK. Rsultat : affichage d'une lenteur inouie pour un fichier dpassant les 5 Ko ! Oui, on peut faire beaucoup de choses avec Qt4, mais pas a (c'est faisable, mais toujours lent cependant en C++) ;J'avais dj ralis reStInPeace et cela m'a aid  coder PyK. 
> Cela ne signifie pas l'abandon de PyQt4 pour ma part, loin s'en faut ; mais j'ai envie d'aller voir ailleurs un petit moment... ne serait-ce que pour pouvoir tendre les capacits d'autres logiciels communs sous Linux (GEdit, Vim, etc.).
> 
> Alors aujourd'hui je me suis mis  glner divers renseignements sur PyGtk, et surtout des liens nouveaux et peu connus. C'est fou comme Gtk a volu, notamment avec Glade3 dont l'interface ne ressemble plus  TheGimp. Dire qu'il a fallu des projets auxiliaires comme Gazpacho pour a saute aux yeux de tout le monde !
> 
> ...


Avez-vous dj essay ces deux bindings, PyGtk et PyQt4 ? Quelle en est votre exprience ? Comment s'est fait votre choix ? Avez-vous prfr 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 ?

----------


## Matthieu Brucher

PyGTK s'est sans doute amlior, il fut une poque o il ne valait mieux pas trop l'utiliser en multithread. Plutt que PyGTK, je prendrai wxPython.

----------


## wiztricks

Salut,

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 supplmentaire: elles permettent d'utiliser les existantes...

Prfrer 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 thme proche... est ce que 
Boa,Camelot,Traits GUI,...satisfont ceux qui s'intressent  Python pour faire du RAD. 

- W

----------


## kango

bonsoir,

je ne connais pas PyGTK, j'utilise PyQt/QtDesigner pour des interfaces simples. Je suis satisfait du rsultat.

comment s'est fait mon choix ? aprs avoir fait du Tkinter qui est limit, il tait question de changer. Le facteur dclencheur 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 diffrence. Je n'ai pas du tout accroch  boa.

la rapidit d'apprentissage de la librairie, facilite 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 dpass et un brin malhonnte. comment peut on tirer une telle conclusion avec seulement les tests qui ont t faits ?

----------


## boulabiar

Je vous conseille PySide
http://www.pyside.org/

PySide est License LGPL et avec l'API compatible PyQt (License GPL)

----------


## afranck64

Bonsoir,

moi pour le moment je fait mes GUI avec Tkinter. Depuis le dbut a allait mais je pense que je vais bientt me mettre  wxPython. J'ai vu des interfaces avec et j'apprcie beaucoup. ::ccool:: 

@+ et bon code ::mouarf::

----------


## o.girardot

Bonsoir, 
Aprs plusieurs expriences en Python, j'ai trouv la plupart des framework assez compliqus, peu maintenable et surtout peu sympathique esthtiquement. 
Je suis revenu de cette opinion en dcouvrant le binding Python PyQt pour le framework Qt de nokia. 
J'ai russi  faire d'agrables interface graphique avec la facilit et la rapidit qui caractrise python ! j'ai d'ailleurs publi rcemment 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 trs bon ouvrage.

Donc pour le point final, je recommande tout autant PySide et je suis de prs son dveloppement. 
D'ailleurs tous mes futurs articles seront avec PySide dans le rle principal, surtout pour son cot LGPL.

Bonne soire, 

Olivier.

----------


## monnomamoi

Hello,

Personnellement je programme avec PyGTK, que je trouve  la fois simple et assez puissant. J'ai aussi utilis Tkinter, qui est trs pratique pour faire des boites de dialogues mais on est vite limit...

Les IHM en python ne sont pas particulirement lentes  condition de ne pas faire de bidouilles qui ncessitent un rafraichissement frquent, comme par exemple implmenter les numros de lignes dans une zone de texte (a m'tonne d'ailleurs que ce ne soit pas disponible dans Scintilla). Mieux vaut utiliser les possibilits existantes d'un widget, ou mme laisser tomber si la fonctionnalit n'est pas prsente par dfaut.

En bref, PyGTK est trs bien pour dvelopper 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 dfaut un GtkWindow en mode invisible me parat vraiment compltement dbile ;


Au contraire, si la fentre est visible par dfaut elle va se rafraichir  chaque fois qu'on ajoute un widget, donc a va prendre 3 plombes  dmarrer. Mieux vaut construire l'IHM "hors cran" puis l'afficher  la fin.




> Certains widgets ne sont pas dans Glade 3 (GtkSourceView, GtkHTML, etc.) ;


GtkSourceView supporte Glade3, comme de nombreux autres widgets qui ne sont pas distribus avec PyGTK,  condition de le compiler avec l'option adquate.





> Fautes de frappe dans Devhelp qui font perdre du temps. Exemple : set_tabs_width au lieu de set_tab_width.


J'ai aussi remarqu quelques erreurs dans la doc PyGTK, heureusement rares, mais c'est vrai que c'est gnant.


-

----------


## fraoustin

pour ma part je ralise tout en tkinter et surtout depuis les versions 2.7 et suprieur en ttk (je vous conseil vraiment de jeter un coup d'oeil)
pas de module supplmentaire  install, que du bonheur

souvent je me suis vu faire des IHM en html et javascript et mettre python ct serveur

----------


## Invit

> 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 !!!

----------


## parisien1082

Pour 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 gnrer les interfaces , et Eclipse pour le code Python .

J'ai fait une application avec plusieurs connexions TCP/IP en parallle , qui fait pas mal de calcul et rafraichit l'IHM en temps rel , a marche mais a consomme beaucoup trop de CPU et de mmoire . Donc si c'tait  refaire j'opterais pour C++/QT.


A mon avis les inconvnients majeurs de Python/WxPython:

-Les mises  jour de wxPython ne sont pas trs frquentes (1 fois par an en moyenne ).
-Impossibilit d'utiliser les multi-core du PC  cause du "Global Interpreter Lock" .
-Manque de documentation .

----------


## lilive26

Bonjour,
- Pour moi, aprs avoir test un peu toutes les librairies graphiques pour Python, c'est avec *wxPython* et *PythonCard* que je tourne depuis 6 ans.  ::ccool:: 
Certes, PythonCard n'est pas aussi zolie et complet que QtDesigner (loin s'en faut  ::roll::  ) mais il fonctionne toujours trs bien et est compltement 'pythonic' : on peut mettre les mains dans le cambouis sous le capot quand on veut amliorer les choses ou les mettre  son gout.
- Aucun problme d'intgration insolvable dans un projet de dploiement avec py2exe
- Reste que wxPython (et donc pythoncard) n'a pas encore t port,  l'heure actuelle, vers Python 3  ::(:  ... mais c'est prvu  ::D:

----------


## Matthieu Brucher

> Je dis tout ca sans arriere pensee, je ne demande qu'a etre convaincu !!!


Traits utilise wx ou Qt en backend. La validation, a permet de certifier les donnes qui vont entrer. Grosso modo, c'est remettre du typage fort dans l'appli, ce qui n'est pas de refus dans une application lourde.
Aprs, les notifications, c'est une manire d'crire les mises  jour lorsqu'on modifie une proprit. C'est plus pratique quand un attribut est un Trait que de crer une proprit, un signal, un slot, ... avec les inconvnients du langage sous-jacent (i.e. les ()).
Quand on voit ce que donne VTK avec Traits, c'est le jour et la nuit en terme d'utilisabilit.

----------


## Invit

A ma connaissance, le typage est fort en python  :;): 
Donc pour cette validation, je suppose que c'est une facon elegante de faire un assert sur le type des variables en entree, j'ai bon ?
Je faisais plus ou moins la meme chose avec des decorateurs jusqu'a present, mais c'etait assez moche effectivement.

Je viens de trouver une introduction a Traits sur la PyCon2010, je vais y jeter un oeil !
Mais j'ai du mal a me figurer certaines choses.

PyQt est un backend, concretement ca veut dire que TraitsUI fait sa sauce et que je n'ai pas trop mon mot a dire ? Ou alors je garde quand meme la meme flexibilite qu'avec du pur PyQt ?

----------


## Matthieu Brucher

Oups, pardon, je voulais dire statique au lieu de dynamique...

Traits encapsule PyQT ou wxPython. Tu as une certaine libert, mais tu ne peux pas faire ce que tu veux, tout comme avec PyQt, tu ne peux pas faire la mme chose qu'en dessinant directement toi-mme les fentres.

----------


## VinsS

Bonjour,

Puisqu'on parle de Traits, dans le mme genre, je vous propose de dcouvrir la dernire cration de Phil Thompson :

http://www.riverbankcomputing.com/st...dip/index.html

C'est tout frais, a date de juillet.

Python3 au dpart mais port sur python 2.x par la suite.

----------


## wiztricks

Salut,




> Bonjour,
> 
> Puisqu'on parle de Traits, dans le mme genre, je vous propose de dcouvrir la dernire cration de Phil Thompson :
> 
> http://www.riverbankcomputing.com/st...dip/index.html
> 
> C'est tout frais, a date de juillet.
> 
> Python3 au dpart mais port sur python 2.x par la suite.


Merci pour le lien, j'ai parcouru la documentation en diagonale,  vaut le coup d'oeil. Ceci dit "Traits GUI" me semble comparable a ce que dip appelle model - dfaut, typage, dlgation inclus(*) - . dip semblant tre un framework RAD beaucoup plus large que la partie 'IHM' dont c'est le sujet ici.

Les versions Python 2.x sont  priori disponible depuis Juillet.
- W

(*) : ce sont les fonctionnalits de base qui font que... on a des soucis  quand elles ne sont pas l.
Python est typ, certes! Mais ce bout est gnralement "frontire" avec des reprsentations externes et ncessite parfois des conversions de type. 
Exempte: Dans un document XML un integer est reprsent sous la forme d'un "string". S'il est utile qu' la "frontire" ce string puisse tre trait comme un "int", il va bien falloir dfinir le type - par dfaut -.

----------


## tyrtamos

Bonjour,

J'ai commenc avec tkinter. Comme il m'a sembl un peu juste pour ce que je voulais faire, j'ai regard du ct des complments: tix et pmw. J'ai dcouvert que tix tait fourni avec l'installation de Python, mais impossible de savoir ce qu'il y a dedans ni comment s'en servir. Il y a mme une demo en tcl, mais je n'ai pas trouv comment la lancer. Bref, une vrai punition...

J'ai regard alors du ct des autres bibliothques. Je veux un ensemble qui me permette de raliser des programmes graphiques autonomes, en multiplateforme  partir de Windows, et de construire des fentres avec un RAD. Un peu comme avec Delphi.

J'ai commenc par wxPython. Mais d'une part j'ai eu du mal avec boa constructor (des bugs ou des maladresses de ma part?) et d'autre part, je ne sais toujours pas si il y aura un jour une version "Python 3.x". Dsol, mais le temps d'investissement personnel est important pour apprendre une bibliothque graphique, et je veux m'assurer qu'il y aura continuit dans le futur.

J'ai regard ensuite PyGtk+. Comme je connais bien gnome, j'avais un avis plutt favorable, mais j'ai t rebut par Glade. Et puis, non d'un chien, qu'est-ce que c'est compliqu  installer: cairo? ATK?, pango? Glib? je n'ai pas besoin de connatre tout cela dans un 1er temps.

Je me suis finalement arrt sur PyQt4 (PySide n'existe pas sous Windows): installation super simple sous Windows, mme s'il faut aussi Qt4 pour avoir la doc. Existe sous les diffrentes versions de Python, y compris 2.7 et 3.x. Bibliothque trs complte, y compris, par exemple, des widgets directement connects  une base de donnes SQL. Qt Designer marche trs bien, mme s'il n'est pas parfait. cx_freeze me permet de rendre le programme autonome, et innosetup de l'installer comme n'importe quel programme windows. Etc...

En contrepartie, la doc est en C++ et en anglais, et il y a trs peu de tuto, mme en anglais. Le moindre problme ncessite de chercher avec google sur 20 ou 30 sites, et une fois sur 2, il faut se dbrouiller tout seul avec le C++. Tous les exemples en C++ n'ont pas t traduits en Python. Bref, c'est douloureux. Mais une fois qu'on a trouv, a marche trs bien et c'est trs esthtique!

Sinon, je dveloppe avec Eclipse + PyDev. J'en ai essay beaucoup d'autres, mais je reviens toujours  Eclipse. J'ai essay eric4 (Qt4), mais j'ai rencontr beaucoup de pb avec: dsol, mais j'ai dj du mal  dbugger mes programmes, je ne veux pas en plus avoir  dbugger l'outil de dveloppement...

J'avoue qu'en tant que fan de Python, je suis un peu surpris du manque d'intrt de ses concepteurs pour la partie graphique, limite au basique tkinter. 

Sans la partie graphique, Python n'est qu'un super langage de script. 

Tyrtamos

----------


## Invit

J'avais egalement regarde dip il y a 2 mois, mais comme a l'epoque seul Python 3 etait supporte, j'avais passe mon chemin.
Decidement, Phil Thompson est vraiment actif, j'espere que l'arrivee PySide ne va pas couler sa boite, vu que PyQt c'est vraiment du bonheur pour developper...

Du coup, dip et Traits, similaires dans le principe ?
je vais surement essayer dip, ou du moins lire serieusement la doc ^^

----------


## wiztricks

Heu...




> Du coup, dip et Traits, similaires dans le principe ?
> je vais surement essayer dip, ou du moins lire serieusement la doc ^^


dip est beaucoup plus vaste que le composants qu'ils appellent "model" et dont la fonction est semblable  Traits.
Seul ce composant de dpi est comparable et/ou similaire  Traits. 
Pour le reste, dip se comparerait plutt  ETS (Enthought Tools Suite): tout deux sont des frameworks qui organisent quelque peu le code, proposent des solutions 'prtes  l'emploi' pour rsoudre facilement nombre de problmes rcurrents,...
- W

----------


## Loenix

Bonsoir,

Il est vrai que certaines personnes ont quelques appriories sur PyGTK , mais pour l'avoir utilis depuis maintenant 2 ans, je tiens  dire qu'il est trs complet et tout aussi performant que les autres. 

Je pense que tout ceci est une question de gout et surtout de la plateforme sur laquelle le programme sera exploit (gnome, kde, windows...).

Bon courage a tous...

Mickael

----------

