IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Créer des composants personnalisés


Sujet :

PyQt Python

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 618
    Points : 188 591
    Points
    188 591
    Par défaut Créer des composants personnalisés
    Une des fonctionnalités cachées de PyQt est la possibilité de créer des widgets personnalisés pour les utiliser directement dans QtDesigner en utilisant des modules écrits en pur Python. Non seulement cela ouvre quelques possibilités intéressantes aux développeurs Python mais donne aussi aux développeurs et designers l'opportunité de bénéficier de l'expérience du prototypage rapide sans la fastidieuse phase de création de bibliothèques partagées pour les plug-ins.

    Créer des composants personnalisés
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour dourouc05,

    Merci pour cette traduction! Il s'agit d'un problème dont on entend souvent parler et dont on voit peu de cas concrets traités complètement sur le web.

    Et justement, j'ai un peu de mal avec ce texte. Je n'ai pas de problème avec la 1ère partie (la définition du nouveau widget), mais je n'arrive pas au bout avec la seconde (l'intégration dans QtDesigner). Cette 2ème partie me semble bien compliquée et assez incomplète.

    Et comme j'ai absolument besoin de ce genre de technique pour mes développements, j'ai creusé un peu et j'ai enfin réussi à faire quelque chose qui marche. J'en ai fait un tuto: http://python.jpvweb.com/mesrecettes...uveaux_widgets. J'en ai profité pour moderniser un peu les instructions PyQt4: QtCore.pyqtSignal (au lieu de __pyqtSignals__) et QtCore.pyqtSlot (au lieu de pyqtSignature). Je n'ai testé que sous Windows, mais l'adaptation aux autres OS ne devraient pas être difficile.

    Ce serait bien si ceux qui sont intéressés par le sujet essayaient ce que je propose (des copier/coller devraient suffire à 95%) avec critiques si nécessaire. Je corrigerai au fur et à mesure. Disons jusqu'à fin septembre.

    Après cet éventuel déverminage, je te propose le tuto pour intégration dans la bibliothèque PyQt4 de developpez!

    [edit] je viens d'apporter quelques modifications mineures sur le code de lancement de QtDesigner ainsi que sur celui du traducteur ".ui => .py", ce qui fait que tout fonctionne maintenant sous Linux (Ubuntu 11.04) en plus de Windows! Pour Mac: si quelqu'un voulait bien essayer...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Bonjour,

    Une petite erreur dans l'article, paragraphe VI:

    ...un des répertoires décrits par QLibraryInfo::PluginPath.
    Lire:
    QLibraryInfo::PluginsPath
    L'erreur existe dans le document original, par ailleurs.

    Au passage la syntaxe python:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    path = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PluginsPath)
    D'autre part, je vois que la question de l'installation pour le designer semble souvent évoquée sur la toile.

    Voici comment j'ai procédé sous Linux.

    Dans le dossier /usr/lib/qt4/plugins/designer/, j'ai créé un dossier python. Dans ce dossier, j'ai placé le fichier monwidgetplugin.py et un sous-dossier mesWidgets
    contenant le fichier monwidget.py du widget lui-même et un fichier __init__.py vide celui-là.

    Il faut s'assurer que le dossier /usr/lib/qt4/plugins/designer/ contient bien le fichier libpythonplugin.so. C'est lui qui permet que Qt detecte les plugins python.

    Au démarrage suivant Designer proposait mon widget.

    Pour utilisation du widget dans un code il faut bien sur placer son fichier là où python ira chercher. Dans mon cas je l'ai mis ici /usr/lib/python2.6/dist-packages/meswidgets/ aussi accompagné d'un fichier vide __init__.py


    Cordialement.

Discussions similaires

  1. Créer des composants personnalisés
    Par richard_sraing dans le forum Composants
    Réponses: 3
    Dernier message: 06/10/2009, 14h22
  2. [B.NET][ADO.NET] Créer des composants à la volée
    Par DotNET74 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/12/2007, 15h31
  3. Réponses: 5
    Dernier message: 19/02/2007, 15h44
  4. Créer des composants personnalisés avec JBuilder 4
    Par mtaveau dans le forum JBuilder
    Réponses: 4
    Dernier message: 21/06/2006, 07h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo