Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
nouveaux_widgets [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


nouveaux_widgets

Warning: Undefined array key -1 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1458

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
nouveaux_widgets [2016/06/02 17:11]
tyrtamos
nouveaux_widgets [2016/06/04 08:49]
tyrtamos
Ligne 54: Ligne 54:
 ==== Création du fichier "plugin" ==== ==== Création du fichier "plugin" ====
  
-On va maintenant créer le fichier "plugin" pour renseigner Designer, qu'on appellera "**monlineeditplugin.py**". On le présente ici dans une version standard qui sera facile à adapter pour d'autres widgets (ce n'est pas utile de repartir d'une page blanche à chaque fois!):+On va maintenant créer le fichier "plugin" pour renseigner Designer, qu'on appellera "**monlineeditplugin.py**" (ce nom de fichier doit se terminer par "plugin" en minuscules). On le présente ici dans une version standard qui sera facile à adapter pour d'autres widgetsce n'est pas utile de repartir d'une page blanche à chaque fois!.  
 + 
 +Ainsi, seule la 1ère partie mentionnée "adapter selon le widget" est à adapter, ainsi que le nom de la classe. Pour des cas plus complexes, il faut voir les exemples de PyQt5, et la doc (bon courage!):
  
 <code python>#! /usr/bin/python3 <code python>#! /usr/bin/python3
Ligne 62: Ligne 64:
 from PyQt5 import QtGui, QtDesigner from PyQt5 import QtGui, QtDesigner
    
-# ===== adapter selon le widget! ==========================================+# ===== adapter selon le widget! ==========================================
 # nom (str) du fichier du widget sans extension # nom (str) du fichier du widget sans extension
 FICHIERWIDGET = "monlineeditwidget" FICHIERWIDGET = "monlineeditwidget"
-# nom (str) de la classe du widget importe+# nom (str) de la classe du widget pour importer
 NOMCLASSEWIDGET = "MonLineEditWidget" NOMCLASSEWIDGET = "MonLineEditWidget"
-# nom (str) de l'instance cree dans Designer+# nom (str) de l'instance dans Designer
 NOMWIDGET = "monLineEditWidget" NOMWIDGET = "monLineEditWidget"
-# groupe (str) de widgets pour Designer+# groupe (str) de widgets pour affichage dans Designer
 GROUPEWIDGET = "Mes widgets perso" GROUPEWIDGET = "Mes widgets perso"
 # texte (str) pour le toolTip dans Designer # texte (str) pour le toolTip dans Designer
Ligne 75: Ligne 77:
 # texte (str) pour le whatsThis dans Designer # texte (str) pour le whatsThis dans Designer
 TEXTEWHATSTHIS = "Un QLineEdit avec un fond jaune" TEXTEWHATSTHIS = "Un QLineEdit avec un fond jaune"
-# icone (rien ou QPixmap) pour presenter le widget dans Designer +# icone (rien ou un fichier image ou un QPixmap) pour afficher dans Designer 
-ICONEWIDGET = QtGui.QIcon()  # sans pixmap, l'icone par defaut est celui de Qt+ICONEWIDGET = QtGui.QIcon()  # sans image, l'icone est celui de Qt
 # =========================================================================== # ===========================================================================
    
Ligne 167: Ligne 169:
         return FICHIERWIDGET         return FICHIERWIDGET
 </code> </code>
- 
-Ça parait compliqué comme ça, mais en fait, il n'y a qu'à adapter selon le widget: 
-  * les valeurs des variables en majuscules (utilisez les commentaires dans le code),  
-  * le nom de la classe,  
-  * et, bien sûr, le nom du fichier du widget qui devra se terminer par "plugin". 
  
 ==== Lancement du Designer ==== ==== Lancement du Designer ====
Ligne 178: Ligne 175:
  
 Dans les variables d'environnement de l'OS, on va passer: Dans les variables d'environnement de l'OS, on va passer:
- 
   * le chemin du répertoire "plugins" dans la variable "PYQTDESIGNERPATH"   * le chemin du répertoire "plugins" dans la variable "PYQTDESIGNERPATH"
   * le chemin du répertoire "widget" dans la variable "PYTHONPATH"   * le chemin du répertoire "widget" dans la variable "PYTHONPATH"
 +
 En conséquence, on peut placer ces deux répertoires n'importe où, et "coder en dur" ces 2 chemins dans le code de lancement du Designer, mais c'est un peu dommage. On va donc simplifier ici sur ce point: fixer l'emplacement relatif entre programme et données pour permettre au code de lancement du Designer de trouver automatiquement par calcul les répertoires des widgets. Voilà la structure choisie ici sur le disque: En conséquence, on peut placer ces deux répertoires n'importe où, et "coder en dur" ces 2 chemins dans le code de lancement du Designer, mais c'est un peu dommage. On va donc simplifier ici sur ce point: fixer l'emplacement relatif entre programme et données pour permettre au code de lancement du Designer de trouver automatiquement par calcul les répertoires des widgets. Voilà la structure choisie ici sur le disque:
  
Ligne 239: Ligne 236:
 </code> </code>
  
-Quand vous lancez ce code Python, le Designer vient à l'écran, et vous trouvez dans la colonne de gauche le widget personnalisé "MonLineEditWidget" dans la liste des widgets disponibles, et dans la catégorie définie ("Mes widgets perso"). Et vous pouvez alors l'utiliser comme n'importe quel autre widget. Dans cet exemple, vous voyez dans les propriétés de la colonne de droite que Designer a reconnu le type QLineEdit, et a initialisé les propriétés définies dans le fichier "plugin" (toolTip, whatsThis, styleSheet). +Quand vous lancez ce code Python, le Designer vient à l'écran, et vous trouvez dans la colonne de gauche le widget personnalisé "MonLineEditWidget" dans la liste des widgets disponibles, et dans la catégorie définie ("Mes widgets perso"). Vous pouvez alors l'utiliser comme n'importe quel autre widget. Dans cet exemple, vous voyez dans les propriétés de la colonne de droite que Designer a reconnu le type QLineEdit, et a initialisé les propriétés définies dans le fichier "plugin" (toolTip, whatsThis, styleSheet). 
  
 A noter que ce script qui appelle le Designer nécessite de pouvoir retrouver automatiquement les adresses à l'intérieur de PyQt5. Or, sous Windows, ces adresses sont données par un fichier **qt.conf**, situé à l'installation dans le répertoire de python.exe, et dont **//les données sont fausses!//** Il faut donc le corriger comme suit: A noter que ce script qui appelle le Designer nécessite de pouvoir retrouver automatiquement les adresses à l'intérieur de PyQt5. Or, sous Windows, ces adresses sont données par un fichier **qt.conf**, situé à l'installation dans le répertoire de python.exe, et dont **//les données sont fausses!//** Il faut donc le corriger comme suit:
Ligne 372: Ligne 369:
 # nom (str) du fichier du widget sans extension # nom (str) du fichier du widget sans extension
 FICHIERWIDGET = "geolocationwidget" FICHIERWIDGET = "geolocationwidget"
-# nom (str) de la classe du widget importe+# nom (str) de la classe du widget pour importer
 NOMCLASSEWIDGET = "GeoLocationWidget" NOMCLASSEWIDGET = "GeoLocationWidget"
-# nom (str) de l'instance cree dans Designer+# nom (str) de l'instance dans Designer
 NOMWIDGET = "geoLocationWidget" NOMWIDGET = "geoLocationWidget"
-# groupe (str) de widgets pour Designer+# groupe (str) de widgets pour affichage dans Designer
 GROUPEWIDGET = "Mes widgets perso" GROUPEWIDGET = "Mes widgets perso"
 # texte (str) pour le toolTip dans Designer # texte (str) pour le toolTip dans Designer
Ligne 382: Ligne 379:
 # texte (str) pour le whatsThis dans Designer # texte (str) pour le whatsThis dans Designer
 TEXTEWHATSTHIS = "Coordonnées GPS" TEXTEWHATSTHIS = "Coordonnées GPS"
-# icone (rien ou un QPixmap) pour presenter le widget dans Designer +# icone (rien ou un fichier image ou un QPixmap) pour afficher dans Designer 
-ICONEWIDGET = QtGui.QIcon()+ICONEWIDGET = QtGui.QIcon()  # sans image, l'icone est celui de Qt
 ... ...
 ... ...
nouveaux_widgets.txt · Dernière modification: 2016/06/04 08:49 de tyrtamos