Avec la venue de Qt4 il est maintenant possible de créer des applications GPL pour Microsoft Windows.
La version 4 du cadriciel (framework) Qt apport son lot de nouveautés et notamment de quoi faire du dessin vectoriel.
J'ai depuis peu de temps je me suis mis mis à Python, un fort jolie langage. Afin de tester les modules Python PyQt qui permettent d'utiliser les classes Qt dans Python j'ai réalisé une petit application.
J'ai tellement apprécié d'utiliser conjointement Python, PyQt et Qt Designer que j'en ai écris un tutoriel et j'aimerais vous le faire partager
http://dosimple.ch/articles/Python-PyQt/(...)
Vous critiques sont les bienvenues
Ciao
# C'est sur...
Posté par Nicolas Schoonbroodt . Évalué à 0.
C'est sur qu'avant, ce n'était pas possible...
[^] # Re: C'est sur...
Posté par golum . Évalué à 3.
Ce qu'il a aussi oublié c'est que c'est encore impossible pour le moment de créer des applis GPL (suafe accord avec Trolltech) avec PyQt puisque la version actuelle ne supporte encore que Qt 3.3.5 (non GPL).
http://www.riverbankcomputing.co.uk/pyqt/index.php(...)
Bref pas la pein d'esperer utilser les nouveauté Qt4 sous pyhton pour le moment.
Vivement le PyQt v4 !
[^] # Re: C'est sur...
Posté par faden . Évalué à 1.
"Note that PyQt does not yet support Qt v4."
http://www.river-bank.demon.co.uk/download/snapshots/PyQt4/ChangeLo(...)
A noter l'excellent IDE eric3 qui permet la complétion automatique des classes systèmes, vos propre classes et celles de Qt également. (il faut toutefois l'activer dans les options du logiciels).
[^] # Re: C'est sur...
Posté par faden . Évalué à -1.
# Tuto
Posté par Julien MOROT (site web personnel) . Évalué à 4.
Par contre, je ne peux que tu conseiller de sous classer la classe de ton interface créé avec QtDesigner. Car si tu as modifié le fichier généré avec pyuic et que plus tard du décides de modifier l'interface créée avec qtdesigner, à la recompilation du .ui tu vas perdre ce que tu avais auparavant ajouté dans le source python résultant.
[^] # Re: Tuto
Posté par faden . Évalué à 1.
Sinon j'en vois deux autres possibles.
Ne pas écrire de code dans l'interface du tout, comme c'est le cas dans cette exemple.
Il est possible d'écrire du Python directement dans Qt Designer...
Dans tout les cas, il ne vaudrait mieux pas trop mettre trop de code dans les interfaces graphiques.
[^] # Re: Tuto
Posté par cgo2 (site web personnel) . Évalué à 4.
Le fichier .ui.h est là pour ça ! Ca évite de se prendre la tête avec des héritages, en en plus le fichier est modifiable avec n'importe quel éditeur (QtDesigner détecte qu'il a changé, le recharge, et ajoute automatiquement les fonctions).
[^] # Re: Tuto
Posté par jjl (site web personnel) . Évalué à 0.
D'oh ! On m'aurait menti l'héritage ca prend la tête ?
Dingue, je voyais ca comme une révolution dans la conception "propre" des programmes. Heureusement que tu m'ouvre les yeux :)
[^] # Re: Tuto
Posté par cgo2 (site web personnel) . Évalué à 5.
Pour en revenir au sujet, c'est totalement inutile d'avoir une classe qui ne sert à rien faite avec QtDesigner et avoir une classe fille spécifique. D'abord ça fait plus de code, ensuite c'est plus long à executer (parceque l'héritage demande une traduction dynamique des adresses des fonctions, qui prend beaucoup de temps ; c'était un dès gros problème de KDE avant l'invention de kdeinit) et enfin, comme expliqué dans le premièr paragraphe, c'est rarement la solution la plus "propre" UMLement parlant.
# interessant ...
Posté par manatlan (site web personnel) . Évalué à 4.
Je n'ai encore jamais gouté à pyqt ...
mais c'est dans mes projets, je vais garder ton tuto sous le coude, mais il aurait été interessant d'avoir les fichiers en downloadable ;-)
Je ne sais pas si tu connais "tepache.py" ... ça prends en entrée un fichier glade (fichier xml, d'un GUI construit avec glade2), et ça génère un fichier python, prêt à l'emploi (utilisant le glade pour batir le gui)...
Après t'as plus qu'à mettre du code dedans (remplir les events, et le constructor)... mais l'avantage de tepache, c'est que tu peux modifier ton ".glade", et regenerer le python sans rien casser à ton code (il path à coup de diff les modifs)
Je n'ai pas trouvé plus simple pour faire du GUI ... mais je tenterai pyqt à l'aide de ton tuto ...
http://primates.ximian.com/~sandino/python-glade/(...)
[^] # Re: interessant ...
Posté par faden . Évalué à 2.
http://doc.trolltech.com/3.3/qwidgetfactory.html#create(...)
J'ai essayé de l'utiliser mais je ne suis pas arrivé exactement à ce que je voulais donc j'ai utilisé le programme de conversion ui->py.
La solution dynamique est, à mon goût, encore plus élégante et flexible puisque que l'on peut modifier l'interface de l'application sans même devoir recomplier quoi que ce soit.
Encore un fois il me semble qu'un fichier d'interface ne devrait pas contenir de code. Je ne vois pas vraiment d'applications utils à cela.
Avez vous des contre-exemples ?
[^] # Re: interessant ...
Posté par faden . Évalué à 2.
[^] # Re: interessant ...
Posté par manatlan (site web personnel) . Évalué à 4.
donc, wx me plaisait, dans le sens où il s'adaptait au "look" du système hôte ... ça me convenait bien ...
mais pour faire du multi-plateforme, j'ai totallement déchanté, car il y avait beaucoup d'adaptation à faire pour que le code marche à l'identique sur win/nux ;-( (de plus, wx est principalement développé sous win .. ça se sent bien ! il y a même des modes de certains widgets qui ne fonctionne pas du tout en gtk)
maintenant, depuis un an, j'ai totallement switché (et ne regrette rien)
je suis passé définitivement à ubuntu/gnome ... et donc gtk inside ;-)
J'ai porté mon appli en gtk, pour voir ... et elle marchait tel quel, que ce soit sous nux ou sous win ... (là ça m'a bien bluffé ...)
mais j'ai surtout apprécié le design des api gtk ... et la séparation forte entre le contenu et le contenant (treestore et treeview) ...
la communauté pygtk est vraiment sympa ... mailing-liste, et leur aboslument formidable "pygtk faq" (mis à jour perpetuellement ... où il y a toutes les questions qu'on peut se poser !!)
de plus, la méthode de tigrux (tepache) ... bientôt intégré dans gazpacho, lui même intégré bientot dans PIDA ... ce ne sera que du bonheur ...
voili voilà ... concernant les commentaires "on ne met pas de code dans l'interface" ... je suis entièrement d'accord ... et c là où tepache fait fort ...
il ne fait que construire une enveloppe, qui dans sont __init__, va charger le glade et l'interprété pour constituer tous les objets visuellement ...
après, dans l'enveloppe, on a que les evenements bindé dans glade2, à remplir ... ça va très vite ...
[^] # Re: interessant ...
Posté par golum . Évalué à 2.
Tu l'abandonnes ou tu le réécrit en PyGTK ou pyQt ?
[^] # Re: interessant ...
Posté par manatlan (site web personnel) . Évalué à 2.
http://jbrout.python-hosting.com/wiki/WikiStart(...)
je suis en train de peaufinner les plugins, et la prise en compte multilangue (gettext) ...
il y a des packages deb, rpm et zip (win32) ...
ça marche très bien, et ça utilise les tags IPTC maintenant ...
mais je ferai une annonce sur linuxfr sous peu ...
[^] # Re: interessant ...
Posté par faden . Évalué à 3.
Mais c'est le cas, respectivement
Uniquement les sources : http://dosimple.ch/articles/Python-PyQt/tuto.zip(...)
Une version windows générée via py2exe : http://dosimple.ch/articles/Python-PyQt/standalone.zip(...)
[^] # Re: interessant ...
Posté par manatlan (site web personnel) . Évalué à 2.
désolé
[^] # Comparatif par l'exemple
Posté par salvaire . Évalué à 3.
[^] # Re: Comparatif par l'exemple
Posté par manatlan (site web personnel) . Évalué à 2.
mais c'est encore jouable ...
[^] # Re: Comparatif par l'exemple
Posté par manatlan (site web personnel) . Évalué à 2.
c'est ici : http://jbrout.free.fr/carnet.tar.gz(...)
carnet.glade : est le fichier glade issu de glade2
carnet.py : est ce qui est construit via tepache.py
tepache.py : le script magique
simplegladeapp.py : est généré par tepache aussi (c une lib helper)
carnet.py se lance et affiche l'interface (faut pygtk quand même ;-)
après suffit de remplir ... et essayer : on peut modifier le glade à volonté !!! ...
reste plus qu'à remplir les qques events que j'ai mis dans le glade ...
c pas aussi beau que la version qt présente ... mais ça m'a pris 5 minute chrono ...
[^] # Re: Comparatif par l'exemple
Posté par faden . Évalué à 1.
[^] # Re: Comparatif par l'exemple
Posté par faden . Évalué à 1.
J'aime bien l'approche mais il manque encore le système SIGNAL/SLOT. Peut-on l'avoir avec Gtk ?
[^] # Re: Comparatif par l'exemple
Posté par manatlan (site web personnel) . Évalué à 2.
une comparaison qt/gtk (en c/c++): http://phil.freehackers.org/kde/cmp-toolkits.html(...)
il y a marqué :
" ... Gtk and Qt have the same widget structure and the same mechanism (signal and slots) ... "
[^] # Re: Comparatif par l'exemple
Posté par Pooly (site web personnel) . Évalué à 2.
bien sur ::
http://phil.freehackers.org/kde/cmp-toolkits.html(...)
# un cardriciel...
Posté par golum . Évalué à 1.
mais mon ami Google est laconique
http://www.google.fr/search?q=cardriciel&sourceid=mozilla-searc(...)
[^] # Re: un cardriciel...
Posté par EmmanuelP . Évalué à 2.
http://fr.wikipedia.org/wiki/Cadriciel(...)
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
[^] # Re: un cardriciel...
Posté par Pierre Tramo (site web personnel) . Évalué à 4.
/o\
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
Sinon , pourquoi n'utilises tu pas le module pickle pour sauvegarder tes objets directement ?
Pourquoi n'utilises tu pas une liste en compréhension pour listerClient ?
[^] # Re: un cardriciel...
Posté par faden . Évalué à 1.
Je suis débutant en Python et ce dont tu me parles m'est inconnu. Pourrais-tu en dire plus ?
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
dans ta classe carnet
dans ta classe client tu vires la méthode sauver
plus d'info ici sur pickle
http://www.python.org/doc/2.4.2/lib/module-pickle.html(...)
Là ou ca se complique c'est lorsque tu veux sérialiser plusieurs objets avaec des références croisées.
Il faut veiller à avoir un seul point d'entrée donc une strucure englobante.
Inconvénient tu enregistres à chaque fois la totalité de ton conteneur au lieu de n'enregistrer que ce qui change.
L'étape d'après c'est les bases de données mais pour un tuto ou un hack su le coin de la table c'est bien pratique
D'une manière générale n'hésite pas à piocher ici avant de te lancer dans le code
http://www.python.org/doc/2.4.2/modindex.html(...)
Pour les listes en compréhension tout est expliqué sur le tutoriel de Guido
http://www.python.org/doc/2.4.2/tut/node7.html#SECTION0071400000000(...)
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
J'ai oublié de préciser un autre avantage de pickle:
tu n'es pas obligé de modifier de code pour sauvegarder lorsque tu modifies la structure de tes classes
[^] # Re: un cardriciel...
Posté par faden . Évalué à 1.
Merci de ces précisions, j'ai du gagner quelque lignes et comme tu le dit, le programme est maintenant plus flexible car il est plus simple de rajouter de nouveaux champs de saisie.
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
et leurs coordonnées dans une listes.
Sinon je te félicite aussi pour la qualité de ton tutoriel.
C'est vraiment agréable à lire, bien présenté et pour un débutant en python tu ne dois pas l'être en programmation car ta séparation couche présentation / métier est clean.
Sinon j'ai vu que tu as intégré l'appel au module pickel mais pourquoi as-tu écrit le code ?
A quoi te sert de créer le fichier vide lors de la creation de l'objet carnet ?
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
Encore 3 détails et je te fais de la pub
Le découplage de l’interface utilisateur et de l’application améliore l’abstraction et donc que les composants sont ré-utilisablesréutilisables
...
Pour créer l’application il faut une fenêtre principale, choisissez "Main Window".
et tu pourrais peut-être faire un lien sur la bible pour ceux qui voudraient approfondir
http://www.opendocs.org/pyqt/(...)
[^] # Re: un cardriciel...
Posté par golum . Évalué à 2.
On dirait presque qu’il s’agit du langage natif de Qt.
Bon je vais me coucher ca vaudra mieux
==========>[ ]
[^] # Re: un cardriciel...
Posté par faden . Évalué à 1.
# Sympathique....
Posté par GuieA_7 (site web personnel) . Évalué à 1.
Ma petite contribution : en dessous de la 1ère image (celle de l'appli finale) tu as écrit 'sandalone' au lieu de 'standalone'.
# Remarque
Posté par Franck . Évalué à 1.
Une remarque toutefois, dans le "constructeur"' de carnet j'ai vu :
f = file(filename,'r')
for l in f.readlines():
[snip]
Je crois que la technique la plus actuelle (et la plus optimale) est de faire simplement :
f = file(filename,'r')
for l in f:
Tout ça gràce à la magie du file object qui est itérable (f.next() te renvoie la ligne suivante)
[^] # Re: Remarque
Posté par faden . Évalué à 1.
# Cadriciel
Posté par Jylam / jylam.lnxsce (site web personnel) . Évalué à 10.
(putain serieux arretez, a chaque fois que vous utilisez une francisation POURRIE, vous mettez le terme anglais a coté, autant ne mettre que le terme anglais, puisque c'est celui que tout le monde comprend, non ?) (ahaha cadriciel quoi :)
[^] # Re: Cadriciel
Posté par faden . Évalué à 0.
À propos, tu aurais pas une idée à propos de la traduction de "standalone" ?
[^] # Re: Cadriciel
Posté par Jylam / jylam.lnxsce (site web personnel) . Évalué à 10.
5 fautes en 4 lignes.
(bon c'etait pour montrer que bien que contre la francisation a outrance, je sais parler francais) (sauf les accents). Bref.
Non "cadriciel" n'est pas correct du tout. Framework, ca serait plutôt "environnement de travail". Comme tu le dis, ce n'est pas utilisé que dans l'informatique. De plus, pour l'exemple qu'on a ici, Qt n'est pas a proprement parler un logiciel, mais une bibliotheque. Donc la "traduction" est elle meme erronée. Le terme anglais ne l'est pas.
Si un jour (et j'en doute fortement) (et je ne l'espere pas du tout du tout), les "jeunes" apprennent les mots informatiques en francais, il faudra qu'ils reapprennents les memes termes en anglais, en allemand, en italien, en turque, etc etc. Le chauvinisme n'est pas une bonne chose du tout, mis a part pour perdre son temps a inventer, a utiliser, et ensuite a apprendre les 2 facons de dire la meme chose. Pourquoi ne pas apprendre directement le terme le plus "correct", et le plus utilisé ?
(je rapelle le terme "deverminer" par exemple, "traduction" de "to debug". 'Vous' avez deja utilisé "bogue" comme traduction a "bug" (aucune racine etymologique, mais passont). Donc "deboguer" ne vous paraissait pas logique ? non, il fallait compliquer encore. Les exemples ne manquent pas, franciser les termes techniques ne mene a rien du tout, sauf à embrouiller tout le monde et a rendre plus difficile la comprehension du gentil monde qui nous entoure.
(voila).
(j'ai bien fais quelques fautes, qu'on puisse me les reprocher ...)
[^] # Re: Cadriciel
Posté par faden . Évalué à 0.
framework == cadre de travail
cadriciel == cadre de travail logiciel
Qt est un logiciel : http://fr.wikipedia.org/wiki/Logiciel(...)
Et c'est aussi un cadre de travail (framework) donc c'est un cadriciel.
Et pour standalone, aucune suggestion ?
[^] # Re: Cadriciel
Posté par golum . Évalué à 10.
[^] # Re: Cadriciel
Posté par JoeBar . Évalué à 0.
Pas de problème... si tu es demandeur :
- j'ai bien fait (dans la phrase citée)
- passons
- en turc (rhoh !)
[^] # Re: Cadriciel
Posté par plagiats . Évalué à 3.
?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.