Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. PyQt5
  3. Usages étendus de PyQt
Extrait - PyQt5 Développez vos interfaces graphiques en Python
Extraits du livre
PyQt5 Développez vos interfaces graphiques en Python
4 avis
Revenir à la page d'achat du livre

Usages étendus de PyQt

Introduction

Dans les chapitres précédents, nous avons pu découvrir l’essentiel concernant le développement utilisant le framework PyQt. Celui-ci aborde tous les aspects du développement logiciel et il est donc presque impossible d’aborder exhaustivement ses multiples usages. Néanmoins, il est intéressant de conclure cet ouvrage par un chapitre dédié à des utilisations qui, si elles ne sont pas centrales, démontrent l’éclectisme du framework, et qui sont susceptibles de faciliter bien des développements.

Nous nous pencherons en premier lieu sur l’affichage de graphique et diagrammes de données (QtCharts). Nous aborderons ensuite le web browsing (QtWebEngine). Enfin, nous terminerons en abordant d’autres facettes assez étonnantes du framework : l’animation et la modélisation trois dimensions (3D).

Les exemples qui tendent à démontrer l’exhaustivité fonctionnelle du framework pourraient être encore plus nombreux, tellement Qt et par conséquent PyQt ont atteint une très bonne maturité fonctionnelle.

Les points suivants seront abordés dans le présent chapitre, dans cet ordre :

  • Diagrammes de données

  • Web browsing

  • Modélisation 3D

Diagrammes de données en PyQt

1. Introduction

Il est possible en PyQt de définir la plupart des représentations visuelles courantes en analyse de données. Ainsi, on peut notamment et facilement afficher à partir d’un jeu de données les diagrammes suivants :

  • Fonction point à point

  • Diagramme à barres

  • Diagramme circulaire (de type « camembert »)

  • Diagramme de type chronogramme

Il peut être nécessaire sur votre machine d’explicitement installer le module PyQtChart, par exemple, à l’aide de pip.

> pip install PyQtChart 

La documentation en ligne de ce module, en ce qui concerne Qt, est disponible à cette adresse : https://doc.qt.io/qt-5/qtcharts-index.html

Une liste exhaustive de diagrammes disponibles se trouve à cette adresse (incluant des exemples d’utilisation en Qt) : https://doc.qt.io/qt-5/qtcharts-examples.html

Plutôt que de manipuler un jeu de données statique pour détailler un exemple, nous allons manipuler un flux de données en temps réel, issu de notre ordinateur, que nous allons tâcher d’interpréter en chronogramme. En effet, l’exemple va être ici l’affichage de l’activité CPU de votre ordinateur en temps réel. Nous afficherons donc le pourcentage d’utilisation CPU au fur et à mesure de son utilisation sous forme de graphique.

2. Exemple de diagramme en PyQt : le pourcentage CPU

Nous aurons en premier lieu besoin de définir un objet « diagramme », correspondant à l’instanciation de la classe PyQt dédiée (classe QChart) dont la documentation Qt est accessible à cette adresse : https://doc.qt.io/qt-5/qchart.html

La représentation elle-même peut ou pourrait prendre diverses formes : diagramme en barres, fonction linéaire continue par morceau, ou encore fonction de type « spline » pour obtenir un rendu plus harmonieux.

Ce dernier type de fonction est en effet continu par morceaux à l’aide de polynômes, ce qui atténue l’effet anguleux d’un tracé linéaire entre les points fournis en entrée.

Ainsi, si l’on a quatre points (par exemple, l’évolution d’un pourcentage en fonction du temps)...

Web browsing en PyQt

1. Introduction

Il peut être très utile dans le développement d’applications de pouvoir naviguer dans des pages web, construites en HTML, CSS et JavaScript. On peut ainsi imaginer avoir la documentation fournie avec le logiciel browsée en local. On peut également imaginer que la documentation distante soit lue au sein du logiciel.

On peut être amené à installer le module PyQtWebEngine par exemple de cette façon :

> pip install PyQtWebEngine 

On peut alors utiliser la classe QWebEngineView qui implémente le protocole HTTP, ce qui permet par exemple de coder très facilement un navigateur web. C’est le développement que nous allons réaliser ici.

La documentation en ligne de cette classe se trouve à l’adresse suivante : https://doc.qt.io/qt-5/qwebengineview.html

2. Développement d’un navigateur web

Nous allons essentiellement utiliser une instance de la classe QWebEngineView qui embarque nativement tout ce qu’il faut pour d’une part implémenter le protocole HTTP et, d’autre part, ce qui est nécessaire pour interpréter correctement du HTML/CSS conforme au standard W3C.

Comme d’habitude, on déclare nos imports, notamment des classes issues de QWebEngineView.

from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView 
from PyQt5.QtCore import QUrl 
from PyQt5.QtGui import QIcon 
from PyQt5.QtWidgets import QApplication, QLineEdit, QMainWindow,  
QPushButton, QToolBar 
 
import sys 

On fait le choix de tout définir dans une même classe, et donc dans le code de notre fenêtre que l’on fait hériter de la classe QMainWindow.

class Fenetre(QMainWindow): 

On déclare un attribut qui est une instance de la classe QWebEngineView. On positionne ensuite cette vue graphique dans la fenêtre.

self.moteur_web = QwebEngineView(self) 
self.setCentralWidget(self.moteur_web) 

On définit alors l’apparence de la fenêtre...

Modélisation 3D en PyQt

1. Introduction

La raison première de cette section est de montrer à quel point le framework Qt, et par conséquent PyQt, a exploré d’innombrables champs applicatifs, y compris la modélisation trois dimensions, avec un véritable support OpenGL qui permet de faire de la modélisation et de l’animation 3D.

2. Modélisation 3D en PyQt

Dans le chapitre Les animations en PyQt, nous avons abordé la notion de dessin en deux dimensions ainsi que l’animation de scènes en 2D. En effet, la manipulation de la classe QPainter puis de la classe QGraphicsScene en ce qui concerne l’animation nous a permis d’approfondir ce volet.

Il serait ainsi possible, et ce, relativement facilement, de développer un petit jeu vidéo en deux dimensions en PyQt. Certes, contrairement à un framework comme Pygame qui est dédié au jeu vidéo, il n’y a pas réellement en PyQt de support dédié à la gestion des collisions, même s’il est évidemment toujours possible de coder cet aspect.

La gestion des collisions, ou détection des collisions est le traitement relatif à la collision d’objets solides dans un jeu vidéo. Ainsi, la rencontre d’un véhicule avec un mur, un ballon qui rebondit sur le sol ou l’atteinte d’un ennemi par un projectile correspond à une collision. Un framework comme Pygame offre un certain nombre de classes et de fonctions facilitant grandement cette gestion des collisions.

Comme avec le framework Pygame, il est possible de faire de la modélisation et de l’animation en 3D avec PyQt. En effet (et comme en Pygame à nouveau), le framework PyQt intègre un support performant de la technologie OpenGL.

OpenGL est une bibliothèque de calcul 2D surtout connue pour son utilisation pour la 3D. OpenGL consiste en une interface de programmation permettant de définir une géométrie à l’aide de points, d’arêtes et de surfaces. Il est alors possible d’ajouter une texture à la forme géométrique. OpenGL se charge ensuite de calculer les différentes projections nécessaires pour la représentation de l’objet graphique selon la position de l’observateur (ce qui inclut la distance entre...