PySide/fr: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
No edit summary
 
(92 intermediate revisions by 9 users not shown)
Line 1: Line 1:
<languages/>
{{Note|PySide|Depuis peu, FreeCAD travaille avec [http://qt-project.org/wiki/PySide PySide] au lieu de PyQt. Ce changement a été principalement fait pour adapter la licence, PySide ayant une licence LGPL qui est plus compatible avec FreeeCAD. A part cela, PySide fonctionne exactement de la même manière que PyQt, et dans FreeCAD vous pouvez généralement utiliser l'un ou l'autre, comme vous désirez. Si vous choisissez d'utiliser PySide, il suffit de remplacer tous les "PyQt" dans les exemples de code ci-dessous avec "PySide".


{{Docnav/fr
[http://qt-project.org/wiki/Differences_Between_PySide_and_PyQt Differences entren PySide et PyQt]}}
|[[Pivy/fr|Pivy]]
|[[Interface_creation/fr|Création d'interface]]
}}


{{TOCright}}
[http://fr.wikipedia.org/wiki/PyQt PyQt] est un module python qui permet aux applications python de créer, d'accéder et de modifier les applications '''[http://fr.wikipedia.org/wiki/Qt Qt]'''.<br />
Vous pouvez l'utiliser par exemple:<br />
* pour créer vos propres programmes Qt en python,<br />
* ou pour accéder et modifier l'interface d'une application qt en cours d'exécution, comme FreeCAD.


<span id="Introduction"></span>
En utilisant le module PyQt dans FreeCAD, vous avez le contrôle total de son interface.
== Introduction ==
Vous pouvez par exemple:
* Ajouter vos propres fenêtres, des widgets et des barres d'outils.
* Ajouter ou masquer des éléments des fenêtres existantes.
* Changer, rediriger ou ajouter des connexions entre tous ces éléments.


La bibliothèque [[PySide/fr|PySide]] donne accès à la boîte à outils d'interface utilisateur graphique (GUI) Qt de [[Python/fr|Python]]. Qt est une collection de bibliothèques C++, mais avec l'aide de PySide, les mêmes composants peuvent être utilisés à partir de [[Python/fr|Python]]. Chaque interface graphique qui peut être créée en C++, peut également être créée et modifiée en Python. Un avantage de l'utilisation de Python est que les interfaces Qt peuvent être développées et testées en direct, car nous n'avons pas besoin de compiler les fichiers source.
PyQt dispose d'une vaste documentation sur [http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/classes.html son API] , et il a de nombreux tutoriels sur le net pour vous en apprendre le fonctionnement.


Lorsque vous [[Installing/fr|installez]] FreeCAD, vous devriez obtenir à la fois Qt et PySide dans le package. Si vous [[Compiling/fr|compilez]] vous-même, vous devez vérifier que ces deux bibliothèques sont installées pour que FreeCAD fonctionne correctement. Bien sûr, PySide ne fonctionnera que si Qt est présent.
Si vous voulez travailler sur l'interface de FreeCAD, la première chose à faire est de créer une référence à la fenêtre principale de FreeCAD.<br />

Faisons:
Dans le passé, FreeCAD utilisait PyQt, une autre liaison Qt pour Python, mais en 2013 ([https://github.com/FreeCAD/FreeCAD/commit/1dc122dc9a commit 1dc122dc9a]) le projet a migré vers PySide car il a une [[License/fr|licence]] plus permissible.

Pour plus d'informations, consultez :
*[https://fr.wikipedia.org/wiki/PySide Wikipédia : PySide]
* [https://wiki.qt.io/Differences_Between_PySide_and_PyQt Différences entre PySide et PyQt]

[[File:PySideScreenSnapshot1.jpg]] [[File:PySideScreenSnapshot2.jpg]]
{{Caption|Exemples créés avec PySide. À gauche: un simple dialogue. À droite: un dialogue plus complexe avec des graphiques.}}

<span id="PySide_in_FreeCAD_with_Qt5"></span>
==PySide dans FreeCAD avec Qt5==

FreeCAD a été développé pour être utilisé avec Python 2 et Qt4. Comme ces deux bibliothèques sont devenues obsolètes, FreeCAD est passé à Python 3 et Qt5. Dans la plupart des cas, cette transition s'est faite sans qu'il soit nécessaire de rompre la rétrocompatibilité.

Normalement, le module {{incode|PySide}} fournit un support pour Qt4, tandis que {{incode|PySide2}} fournit un support pour Qt5. Cependant, dans FreeCAD, il n'est pas nécessaire d'utiliser directement {{incode|PySide2}} car un module spécial {{incode|PySide}} est inclus pour gérer Qt5.

Ce module {{incode|PySide}} est situé dans le répertoire {{incode|Ext/}} d'une installation de FreeCAD compilée pour Qt5.
{{Code|code=
{{Code|code=
/usr/share/freecad/Ext/PySide
import sys
from PySide import QtGui ,QtCore
app = QtGui.qApp
mw = FreeCADGui.getMainWindow()
}}
}}

Ensuite, vous pouvez par exemple naviguer à travers tous les widgets de l'interface:
Ce module importe simplement les classes nécessaires depuis {{incode|PySide2}} et les place dans l'espace de noms {{incode|PySide}}. Cela signifie que dans la plupart des cas, le même code peut être utilisé avec Qt4 et Qt5, tant que nous utilisons l'unique module {{incode|PySide}}.
{{Code|code=
{{Code|code=
PySide2.QtCore -> PySide.QtCore
for child in mw.children():
PySide2.QtGui -> PySide.QtGui
print 'widget name = ', child.objectName(), ', widget type = ', child
PySide2.QtSvg -> PySide.QtSvg
PySide2.QtUiTools -> PySide.QtUiTools
}}
}}
Les widgets d'une interface Qt sont généralement imbriqués dans des "conteneurs" widgets, de sorte que les enfants de notre fenêtre principale peuvent contenir d'autres enfants. Selon le type de widget, vous pouvez faire énormément de choses.<br />
Vérifiez la documentation de l'API pour voir ce qui est possible.


Le seul aspect inhabituel est que les classes {{incode|PySide2.QtWidgets}} sont placées dans l'espace de noms {{incode|PySide.QtGui}}.
Ajout d'un nouveau widget, par exemple un dockWidget (qui peut être placé dans l'un des panneaux latéraux de FreeCAD) est facile:
{{Code|code=
{{Code|code=
PySide2.QtWidgets.QCheckBox -> PySide.QtGui.QCheckBox
myWidget = QtGui.QDockWidget()
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myWidget)
}}
}}
{{Top}}
Vous pouvez ensuite ajouter ce que vous voulez directement sur votre widget:
<span id="Examples_of_PySide_use"></span>
{{Code|code=
== Exemples d'utilisation de PySide ==
myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(300,100)) # sets size of the widget
label = QtGui.QLabel("Hello World", myWidget) # creates a label
label.setGeometry(QtCore.QRect(2,50,200,24)) # sets its size
label.setObjectName("myLabel") # sets its name, so it can be found by name
}}
Mais la meilleure méthode est de créer un objet "interface utilisateur" (UI) qui fera toute la configuration de votre widget.
Le gros avantage est, qu'une telle interface utilisateur peut être créées graphiquement avec le programme Qt Designer.
Un objet typique généré par Qt Designer est fait comme ceci:
{{Code|code=
class myWidget_Ui(object):
def setupUi(self, myWidget):
myWidget.setObjectName("my Nice New Widget")
myWidget.resize(QtCore.QSize(300,100).expandedTo(myWidget.minimumSizeHint())) # sets size of the widget


* [[PySide_Beginner_Examples/fr|Exemples PySide Débutant]], bonjour le monde, annonces, entrez du texte, entrez un numéro.
self.label = QtGui.QLabel(myWidget) # creates a label
* [[PySide_Intermediate_Examples/fr|Exemples intermédiaires PySide]], dimensionnement de la fenêtre, masquage des widgets, menus contextuels, position de la souris, événements de la souris.
self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
* [[PySide_Advanced_Examples/fr|Exemples avancés de PySide]], de nombreux widgets.
self.label.setObjectName("label") # sets its name, so it can be found by name


Les exemples de PySide sont divisés en 3 parties, différenciées par niveau d'exposition à PySide, Python et les composants internes de FreeCAD. La première page a un aperçu sur PySide; les deuxième et troisième pages sont pour la plupart des exemples de code à différents niveaux.
def retranslateUi(self, draftToolbar): # built-in QT function that manages translations of widgets
myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget", "My Widget", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("myWidget", "Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8))
}}
Pour l'utiliser, il suffit de l'appliquer à votre widget fraîchement créé,
comme ceci:
{{Code|code=
app = QtGui.qApp
FCmw = app.activeWindow()
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window
}}
{{docnav/fr|[[Pivy/fr|Pivy]]|[[Scripted objects/fr|Scripted objects]]}}


On s'attend à ce que ces exemples soient utiles pour commencer et par la suite l'utilisateur peut consulter d'autres ressources en ligne ou la documentation officielle.
[[Category:Poweruser Documentation/fr]]
{{Top}}
==Documentation==


Il existe quelques différences dans la gestion des widgets dans Qt4 (PySide) et Qt5 (PySide2). Le programmeur doit être conscient de ces incompatibilités et consulter la documentation officielle si quelque chose ne semble pas fonctionner comme prévu sur une plateforme donnée. Néanmoins, Qt4 est considéré comme obsolète, donc la plupart des développements devraient cibler Qt5 et Python 3.
{{clear}}

<languages/>
La documentation PySide fait référence aux classes de style Python; cependant, puisque Qt est à l'origine une bibliothèque C++, les mêmes informations devraient être disponibles dans la référence C++ correspondante.
* [https://doc.qt.io/qtforpython/modules.html Modules Qt] disponibles sur PySide2 (Qt5).
* [https://doc.qt.io/qt-5/modules-cpp.html Toutes les classes Qt par module] dans Qt5 pour C++.
* [https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/index.html Modules Qt] disponibles auprès de PySide (Qt4).
{{Top}}

{{Docnav/fr
|[[Pivy/fr|Pivy]]
|[[Interface_creation/fr|Création d'interface]]
}}

{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]

Latest revision as of 20:20, 4 April 2024

Introduction

La bibliothèque PySide donne accès à la boîte à outils d'interface utilisateur graphique (GUI) Qt de Python. Qt est une collection de bibliothèques C++, mais avec l'aide de PySide, les mêmes composants peuvent être utilisés à partir de Python. Chaque interface graphique qui peut être créée en C++, peut également être créée et modifiée en Python. Un avantage de l'utilisation de Python est que les interfaces Qt peuvent être développées et testées en direct, car nous n'avons pas besoin de compiler les fichiers source.

Lorsque vous installez FreeCAD, vous devriez obtenir à la fois Qt et PySide dans le package. Si vous compilez vous-même, vous devez vérifier que ces deux bibliothèques sont installées pour que FreeCAD fonctionne correctement. Bien sûr, PySide ne fonctionnera que si Qt est présent.

Dans le passé, FreeCAD utilisait PyQt, une autre liaison Qt pour Python, mais en 2013 (commit 1dc122dc9a) le projet a migré vers PySide car il a une licence plus permissible.

Pour plus d'informations, consultez :

Exemples créés avec PySide. À gauche: un simple dialogue. À droite: un dialogue plus complexe avec des graphiques.

PySide dans FreeCAD avec Qt5

FreeCAD a été développé pour être utilisé avec Python 2 et Qt4. Comme ces deux bibliothèques sont devenues obsolètes, FreeCAD est passé à Python 3 et Qt5. Dans la plupart des cas, cette transition s'est faite sans qu'il soit nécessaire de rompre la rétrocompatibilité.

Normalement, le module PySide fournit un support pour Qt4, tandis que PySide2 fournit un support pour Qt5. Cependant, dans FreeCAD, il n'est pas nécessaire d'utiliser directement PySide2 car un module spécial PySide est inclus pour gérer Qt5.

Ce module PySide est situé dans le répertoire Ext/ d'une installation de FreeCAD compilée pour Qt5.

/usr/share/freecad/Ext/PySide

Ce module importe simplement les classes nécessaires depuis PySide2 et les place dans l'espace de noms PySide. Cela signifie que dans la plupart des cas, le même code peut être utilisé avec Qt4 et Qt5, tant que nous utilisons l'unique module PySide.

PySide2.QtCore -> PySide.QtCore
PySide2.QtGui -> PySide.QtGui
PySide2.QtSvg -> PySide.QtSvg
PySide2.QtUiTools -> PySide.QtUiTools

Le seul aspect inhabituel est que les classes PySide2.QtWidgets sont placées dans l'espace de noms PySide.QtGui.

PySide2.QtWidgets.QCheckBox -> PySide.QtGui.QCheckBox

En haut

Exemples d'utilisation de PySide

Les exemples de PySide sont divisés en 3 parties, différenciées par niveau d'exposition à PySide, Python et les composants internes de FreeCAD. La première page a un aperçu sur PySide; les deuxième et troisième pages sont pour la plupart des exemples de code à différents niveaux.

On s'attend à ce que ces exemples soient utiles pour commencer et par la suite l'utilisateur peut consulter d'autres ressources en ligne ou la documentation officielle.

En haut

Documentation

Il existe quelques différences dans la gestion des widgets dans Qt4 (PySide) et Qt5 (PySide2). Le programmeur doit être conscient de ces incompatibilités et consulter la documentation officielle si quelque chose ne semble pas fonctionner comme prévu sur une plateforme donnée. Néanmoins, Qt4 est considéré comme obsolète, donc la plupart des développements devraient cibler Qt5 et Python 3.

La documentation PySide fait référence aux classes de style Python; cependant, puisque Qt est à l'origine une bibliothèque C++, les mêmes informations devraient être disponibles dans la référence C++ correspondante.

En haut