Logo Mon Club Elec

Le PyQt-Lab’ : mes codes PyQt en vrac !

Le PyQt-Lab est un outil puissant et pratique pour les développeurs Python qui souhaitent créer des applications graphiques. Il permet de créer des applications riches en fonctionnalités et faciles à utiliser grâce à l’utilisation de l’API PyQt. Avec le PyQt-Lab, les développeurs peuvent créer des applications graphiques complexes et intuitives en un temps record. Dans cet article, nous allons examiner en détail le PyQt-Lab et voir comment il peut être utilisé pour créer des applications graphiques à l’aide de codes PyQt.

Le PyQt-Lab’ : mes codes PyQt en vrac !

Par X. HINAULT – Juin 2013

Le PyQt-Lab’ : mes codes PyQt en vrac !

Je rassemble dans cette rubrique la plupart des codes Python + Qt que j’ai écrit sous forme « as is », bruts de décoffrage. C’est un peu ma « boite à codes » PyQt où je rassemble tests, idées et tout ce qui me passe par la tête, en vrac. Les codes les plus pertinents sont détaillés et repris dans la rubrique Ateliers Python + Qt et les codes d’interfaces opérationnelles utilisables en pratique sont disponibles dans la rubrique PyQt Apps.

Le bouton Le PyQt-Lab’ : mes codes PyQt en vrac ! signale les codes pour lesquels un tuto détaillé est disponible dans la rubrique Ateliers Python + Qt.

PYQTLAB

1.  PyQt : Les Bases

Le PyQt-Lab’ : mes codes PyQt en vrac !

2.  PyQt + PySerial : la communication série (avec Arduino)

Le PyQt-Lab’ : mes codes PyQt en vrac ! Le PyQt-Lab’ : mes codes PyQt en vrac !

PyQt + PySerial : 1. la communication série Arduino vers interface PyQt (réception)
PyQt + PySerial : 2. la communication série interface PyQt vers Arduino (envoi)
PyQt + PySerial : 3. la communication série avancée entre interface PyQt et Arduino


Le PyQt-Lab’ : mes codes PyQt en vrac !

3.  PyQt + PySerial : 1. la communication série Arduino vers interface PyQt (réception)

Le PyQt-Lab’ : mes codes PyQt en vrac !
Le PyQt-Lab’ : mes codes PyQt en vrac !

Créer un Terminal Série « Arduino like » de A à Z !
Terminal Série de base

Variantes du Terminal Série

Le PyQt-Lab’ : mes codes PyQt en vrac !

Arduino vers PyQt : Réception Série avec traitement de chaînes de caractères

Le PyQt-Lab’ : mes codes PyQt en vrac !

Arduino vers PyQt : Réception Série avec affichages numériques

Le PyQt-Lab’ : mes codes PyQt en vrac !

Arduino vers PyQt+PyQwt (1) : Réception Série avec affichage dans des widgets d’affichage analogique.
QwtDial

QwtThermo

4.  PyQt + PySerial : 2. la communication série interface PyQt vers Arduino (envoi)

Le PyQt-Lab’ : mes codes PyQt en vrac !
Le PyQt-Lab’ : mes codes PyQt en vrac !

Envoi par clic pushButton On/Off

Envoi par clic pushButton

Le PyQt-Lab’ : mes codes PyQt en vrac !

Envoi par widget graphique analogique

  • Envoyer sur le port la valeur numérique courante d’un slider en « live »
    • Régler la position d’un servomoteur à l’aide d’un slider en « live » par envoi d’une valeur numérique sur le port série
  • Envoyer sur le port série la valeur numérique courante de 3 sliders en « live » sous forme de chaînes avec paramètres numériques *
    • Régler la couleur d’une LED RGB à l’aide de 3 sliders en « live » par envoi d’une valeur numérique sur le port série
  • Envoyer sur le port série la valeur numérique courante de 5 sliders en « live » sous forme de chaînes avec paramètres numériques *
    • Contrôler un bras robotisé 5/6 axes à l’aide de 6 sliders en « live » par envoi de chaînes avec paramètres numériques sur le port série
  • Envoyer sur le port série la valeur numérique courante d’un Dial, bouton réglable, en « live » (lors du lâcher bouton souris)
  • Envoyer sur le port série la valeur numérique courante de 5 sliders en « live » sous forme de chaînes avec paramètres numériques + enregistrement des positions et boutons GoTo Sync et bouton « play » +/- enregistrement fichier
    • Contrôler un bras robotisé 5/6 axes à l’aide de 5 sliders en « live » par envoi de chaînes avec paramètres numériques sur le port série et mémorisation des séquences
  • Envoyer sur le port série la valeur numérique courante d’un QwtDial, widget « à aiguille » configuré à 180°, en « live »
    • Régler la position d’un servomoteur à l’aide d’un QwtDial, widget « à aiguille » configuré à 180° en « live »
Le PyQt-Lab’ : mes codes PyQt en vrac !

Avec affichage webcam (voir OpenCV)

  • Interface couplant Terminal Série + affichage capture webcam (pour contrôle tourelle pan/tilt avec retour vidéo…) *
  • Interface couplant Terminal Série + clavier graphique type « Joystick » + affichage capture webcam (pour contrôle robot avec retour vidéo…)*

5.  PyQt + PySerial : 3. la communication série avancée entre interface PyQt et Arduino

Le PyQt-Lab’ : mes codes PyQt en vrac !
Le PyQt-Lab’ : mes codes PyQt en vrac !

Echanges bi-directionnels Arduino <=> PyQt

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Arduino vers PyQt vers Gnu/Linux : Réception Série et contrôle du Système

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Arduino vers PyQt+Pyqtgraph : Réception Série avec affichage graphique avancé sous forme de courbes

  • Oscilloscope mono-voie simple (voir pyqtgraph)
  • Oscilloscope mono-voie simple avec datalogging dans fichier texte (voir pyqtgraph)
  • Oscilloscope 6 voies simultanées sur le même graphique
  • Oscilloscope 6 voies simultanées sur 6 graphiques différents
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Arduino vers PyQt+PyQwt (2) : Réception Série avec affichage graphique sous forme de courbes

  • Oscilloscope mono-voie simple (voir Qwt)
  • Oscilloscope mono-voie simple avec datalogging dans fichier texte (voir Qwt)
  • Oscilloscope 6 voies simultanées sur le même graphique
  • Oscilloscope 6 voies simultanées sur 6 graphiques différents
  • Une interface pour thermomètre numérique (LM 35 côté Arduino) avec affichage QwtPlot + QwtThermo + datalogging dans un fichier

PYQTLAB

6.  PyQt et le pcDuino

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

6.1  Utilisation des E/S seules à partir d’une interface graphique

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac ! Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Dans cette rubrique, apprenez à créer des interfaces graphiques pour contrôler et interagir avec les broches E/S : une fois l’interface graphique lancée, vous pourrez simplement l’afficher sur un écran HDMI de votre choix, mais surtout, vous pourrez contrôler le pcduino à partir d’un poste fixe ou d’une tablette tactile par accès distant via le réseau ethernet filaire ou wifi !

S’installer

Sorties numériques

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Entrées numériques

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Entrées analogiques
Affichages numériques

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Affichages analogiques

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Affichages sous forme de courbe
Monovoie :

Multivoies :

  • Oscilloscope basse fréquence 6 voies sur 1 graphique
  • Oscilloscope basse fréquence 6 voies sur 1 graphique avec widget de sélection des courbes à afficher
  • Oscilloscope basse fréquence 6 voies sur 6 graphiques

A savoir : toutes les interfaces graphiques affichant les courbes proposées ici, basées sur la librairie pyqtgraph, permettent le zoom sur le graphique, l’export par simple clic droit, au format vectoriel *.svg, image *.png, data texte *.csv et même le copier/coller dans le presse-papier ! Une réutilisation maximale des graphiques obtenus est ainsi possible.

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Sorties analogiques

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

6.2  Utilisation des E/S + fonctions système à partir d’une interface graphique

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

S’installer

Sorties numériques

  • Interface de contrôle à 5 boutons pour contrôle d’un robot mobile avec retour vidéo

Entrées numériques

Entrées analogiques

  • Serveur graphique de données analogiques

Sorties analogiques

Périphériques d’entrée

  • Utiliser un keypad en tant que télécommande
  • Allumer des LEDs à l’aide d’un Joystick
  • Application « pompe à essence »

Systeme

Fichiers

  • ..

Reseau

  • Contrôler les broches E/S à partir d’une interface web javascript + Ajax
  • Serveur graphique de données analogiques

Audio/Voix

  • ..

Image

  • Capturer une image webcam et la visualiser par appui sur un bouton poussoir
  • Application photomaton

PCDUINOAppESSysModele

Création originale de X.HINAULT – www.mon-club-elec.fr – 2013 – Tous droits réservés – GPLv3

PYQTLAB

7.  PyQt et le RaspberryPi

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

7.1  Utilisation des E/S seules à partir d’une interface graphique

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac ! Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

S’installer

  • S’installer pour programmer le raspberryPi en Python et intro au langage Python PDF

Sorties numériques

Entrées numériques

  • L’appui sur un bouton fait défiler un compteur (pompe a essence)

Entrées analogiques

  • Afficher la mesure numérique dans un widget afficheur LCD
  • Afficher les mesures numériques dans 6 widgets afficheur LCD
  • Oscilloscope basse fréquence monovoie

Sorties analogiques

  • Faire varier la luminosité d’une LED à l’aide d’un slider

Réseau

  • Contrôler les broches E/S à partir d’une interface web javascript + Ajax

7.2  Utilisation des E/S + fonctions système à partir d’une interface graphique

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

S’installer

  • S’installer pour programmer des interfaces graphiques avec PyQt pour le RaspberryPi PDF

Sorties numériques

  • Contrôler les broches E/S à partir d’une interface web javascript + Ajax
  • Interface de contrôle à 5 boutons pour contrôle d’un robot mobile par le port série avec retour vidéo

Entrées numériques

  • Enregistrer un message dans un fichier lors appui sur un bouton poussoir
  • Capturer une image webcam sur appui bouton poussoir
  • Déclencher l’exécution d’une commande système à partir d’un bouton poussoir

Entrées analogiques

Sorties analogiques

  • Enregistrer la mesure d’une broche analogique à intervalle régulier dans un fichier
  • Serveur graphique de données analogiques

Clavier

  • Utiliser un Keypad en tant que clavier numérique
  • Utiliser un keypad en tant que télécommande
  • Allumer des LEDs à l’aide d’un Joystick

Création originale de X.HINAULT – www.mon-club-elec.fr – 2013 – Tous droits réservés – GPLv3

PYQTLAB

8.  PyQt Lab’ : Images et Dessin avec PyQt

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Pour comprendre

  • Les images dans PyQt

Dessin fixe
Intro

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Dessiner des formes géométriques simples sur une image dans un Label (QPixmap et QImage)

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !
Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Dessin, Images et I/O

Zone de dessin et Interactivité avec la souris

Animation dessin

et aussi : pygame ? en fait interface spécifique… donc on perd les atouts de PyQt…

Images existantes

  • Ouvrir/Enregistrer une image (QPixmap et QImage) depuis/dans un fichier
  • Connaître les caractéristiques RGB du pixel sous le pointeur de la souris
  • Dessiner sur une image à la souris et enregistrer l’image modifiée
  • Insérer une image dans une image..
  • Capturer dans une image un QWidget existant ou une fenêtre..
  • Ligne horizontale mobile à l’aide d’un slider vertical, sur une image ouverte à partir d’un fichier. *
  • pyqtgraph : Afficher la courbe d’intensité des pixels sous une ligne horizontale mobile à l’aide d’un slider vertical sur une image ouverte à partir d’un fichier. *
  • Modifier les caractéristiques d’une image : voir section OpenCV

Console

  • Interagir avec une image/dessin à partir d’une console intégrée dans la GUI *

Image et interactivité avancée

  • Contrôler la couleur d’une image à la voix

Création originale de X.HINAULT – www.mon-club-elec.fr – 2013 – Tous droits réservés – GPLv3

PyqtDessinModele

PYQTLAB

9.  Affichage graphique et mathématique avec PyQt

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

Plusieurs librairies pour affichage graphique type scientifique ou mathématique sont disponibles et utilisables avec PyQt :

  • PyQwt : une librairie graphique dérivée de la version originale en C, Qwt. Cette librairie est actuellement obsolète et non maintenue, mais elle reste potentiellement utile en raison des widgets analogiques qu’elle propose et son utilisation facile avec QtDesigner.
  • Matplotlib : cette librairie est « The Must » de l’affichage graphique scientifique en Python, supportant notamment plusieurs environnement graphique dont PyQt. Une librairie incontournable qu’il faut connaître en raison de ses nombreuses possibilités avancées 2D et 3D. Cette librairie s’utilise également très facilement avec ipython. Par contre, cette librairie s’avère un peu lente pour des affichages temps réel. Intégration dans PyQt simple. Matplotlib est à privilégier dès lors que l’on souhaite réaliser des graphiques élaborés ( champs vectoriels, coordonnées polaires, etc… )
  • Pyqtgraph : Comme son nom l’indique, cette librairie est construite sur PyQt et son utilisation avec PyQt est donc naturelle. Cette librairie est plus simple dans ses possibilités que Matplotlib (ne supporte pas champs vectoriel, coordonnées polaires, etc..) mais propose aussi des choses qui n’existent pas avec matplotlib (notamment l’interactivité avec le graphique). Le point fort de Pyqtgraph : sa grande rapidité qui en fait la solution privilégiée pour des affichages temps-réel.

PyQt + Pyqtgraph : Afficher des courbes temps-réel et réaliser du calcul scientifique
PyQt + Qwt : afficher des graphiques analogiques et des courbes?
PyQt + Matplotlib : Afficher des courbes mathématiques et réaliser du calcul scientifique?

10.  PyQt + PyqtGraph : afficher des graphiques et des courbes

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

10.1  Tracé de courbes simples

Les bases

Affichages de courbes y=f(x)

Exemples de courbes mathématiques

Affichage de courbes paramétriques y=f(t) et x=f(t)

10.2  Paramétrage de l’interactivité du graphique

Le clic droit sur le graphique pyqtgraph permet l’export immédiat aux formats *.svg, *.png et même Matplotlib du graphique courant !! Il est donc incroyablement simple de réutiliser un graphique pyqtgraph obtenu par calcul !

Doc

  • L’interactivité par défaut
  • Description du menu contextuel par défaut et des options disponibles

Codes

10.3  Tracé de courbes « temps réel »

Simple

Pyduino

Port Série (Arduino)
Avec Pyqtgraph (recommandé)

Avec PyQwt (obsolète)

  • Afficher une courbe à partir de valeurs reçues sur le port série (oscillo simple) *
  • Afficher une courbe à partir de valeurs reçues sur le port série, avec widgets de paramétrage des axes *
  • Idem avec affichage de la valeur courante et conversion en unité voulue
  • Idem avec option de tracé d’une croix de lignes et du point courant
  • Idem multicourbe sur le même graphe
  • Idem multicourbe sur n courbes

10.4  Console intégrée

  • Interface PyQt intégrant graphique pyqtgraph et console dans une même GUI pour interactivité « en direct » avec le graphique*

10.5  Tracé de courbes avec timeline

10.6  Images simples avec pyqtgraph

  • Affichage d’une image simple
  • Création d’une image telle que i=f(x,y)

10.7  Images avec widgets pyqtgraph

10.8  Images et ROI

10.9  Tracé d’images « temps-réel » ou animées

  • Affichage animé d’une image telle que i=f(x,y)

PYQTLAB

11.  PyQt + OpenCV : traiter des images fixes

11.1  Pour débuter

11.2  Traitement d’image de base

11.3  Traitement d’image avancé

Couleurs RGB

  • Afficher les canaux RGB d’une image dans des fenêtres séparées
  • Modifier les canaux d’une image RGB à l’aide de sliders
  • Filtre « mixeur de canaux » couleur
  • Filtre « mixeur de canaux » en niveaux de gris

Histogrammes

  • Egaliser histogramme
  • Afficher histogramme d’une image

Espace de couleurs

  • Conversion RGB to HSV

11.4  Opérations sur pixels

  • Analyser l’intensité de tous les pixels d’une ligne sous forme graphique

11.5  Extractions de contours

  • Appliquer un filtre de Sobel à une image RGB
  • Appliquer un filtre de Sharr à une image RGB
  • Appliquer un filtre de Canny à une image RGB

11.6  Traitement entre 2 images

11.7  Soustraction du fond

11.8  Détection de visage

  • Détecter des visages dans une image RGB*
  • Obtenir de l’information sur les visages détectés (nombre, position centre, rectangle encadrant…)
  • Détection des yeux dans une image RGB*

11.9  Détection des contours de formes 2D quelconques (détection de Blobs)

  • Détecter et dessiner les contours de formes 2D quelconques à partir d’une image binarisée
  • Obtenir de l’information sur les contours détectés (position centre, aire, rectangle et cercle encadrants)

11.10  Sélection de formes 2D de formes 2D quelconques (filtrage des Blobs retenus)

11.11  Analyse de contours de formes 2D quelconques

  • analyse de convexité de contours de formes 2D quelconques

11.12  Détection de formes 2D géométriques

11.13  Fonctions de dessin 2D

PYQTLABOpenCVFichiersModele

PYQTLAB

12.  PyQt Lab’ : PyQt + OpenCV + webcam : Capturer et traiter en « temps réel » des images issues d’un flux vidéo

Le PyQt-Lab&rsquo; : mes codes PyQt en vrac !

12.1  Pour débuter

12.2  Dessin sur l’image vidéo

12.3  Enregistrer image

  • Capturer une image webcam et l’enregistrer dans un fichier par clic sur un pushButton (façon « appareil photo »). +/- son
  • Capturer une image webcam à intervalle régulier (datalogging « photo »)

12.4  Améliorer la vitesse de capture d’image

Capture avec OpenCV

Capture avec GSVideo

12.5  Traitement d’image de base du flux vidéo direct

  • Afficher le flux vidéo issu d’une webcam dans une interface Qt (version avec buffers pour traitement d’image ) Tuto :Le PyQt-Lab&rsquo; : mes codes PyQt en vrac ! – 22 p. – 0.25€
  • Afficher le flux vidéo brut issu d’une webcam et le flux traité (exemple en niveau de gris) dans une même interface Qt (buffers + 2 zones d’affichages) Tuto : Le PyQt-Lab&rsquo; : mes codes PyQt en vrac ! – 24 p. – 0.25€
  • Convertir une image RGB webcam en niveaux de gris *
  • Appliquer un effet miroir à une image RGB webcam *
  • Inverser une image RGB webcam *
  • Appliquer un flou à une image RGB webcam (filtre Gaussien) *
  • Appliquer un seuillage (réglé par Slider) et binariser une image RGB webcam *

12.6  Traitement d’image avancé du flux vidéo direct

  • Afficher les canaux RGB d’une image webcam dans des fenêtres séparées *
  • Modifier les canaux d’une image RGB webcam à l’aide de sliders
  • Filtre « mixeur de canaux » couleur d’une image webcam *
  • Filtre « mixeur de canaux » en niveaux de gris d’une image webcam *
  • Filtre « mixeur de canaux » couleur d’une image webcam avec Sliders
  • Filtre « mixeur de canaux » en niveaux de gris d’une image webcam avec Sliders
  • Isolement objet coloré par filtrage « mixeur de canaux » en niveau de gris + seuillage binaire
  • Egaliser histogramme d’une image webcam
  • Afficher histogramme d’une image webcam
  • Conversion RGB to HSV d’une image webcam
  • Afficher Histogramme d’une image RGB dans QwtPlot

12.7  Capture d’image sur clic bouton

  • Capturer une image sur clic pusbutton
  • Capturer image traitée sur clic pushButton
  • Enregistrer image dans un fichier

12.8  Opérations sur pixels

  • Analyser l’intensité de tous les pixels d’une ligne sous forme graphique d’une image webcam *

12.9  Extractions de contours

  • Appliquer un filtre de Sobel à une image RGB webcam
  • Appliquer un filtre de Sharr à une image RGB webcam
  • Appliquer un filtre de Canny à une image RGB webcam

12.10  Traitement entre 2 images

12.11  Soustraction du fond

12.12  Détection de visage

  • Détecter des visages dans une image RGB webcam
  • Obtenir de l’information sur les visages détectés (nombre, position centre, rectangle encadrant…) à partir d’une image webcam

12.13  Détection des contours de formes 2D quelconques (détection de Blobs)

  • Détecter et dessiner les contours de formes 2D quelconques à partir d’une image webcam binarisée
  • Obtenir de l’information sur les contours détectés (position centre, aire, rectangle et cercle encadrants) à partir d’une image webcam

12.14  Sélection de formes 2D de formes 2D quelconques (filtrage des Blobs retenus)

12.15  Analyse de contours de formes 2D quelconques

  • analyse de convexité de contours de formes 2D quelconques à partir d’une image webcam

12.16  Détection de formes 2D géométriques

12.17  Fonctions de dessin 2D

12.18  …

12.19  Calibrage de webcam

12.20  OCR (avec OpenCV ou non…)

PYQTLABOpenCVWebcamModele
PYQTLABPyqtcvWebcamModele

13.  PyQt + OpenGL(3D) : l’accélération graphique et l’affichage 3D avec PyQt

13.1  Pour commencer

13.2  Les fonctions et concepts OpenGL de base

13.3  Utiliser les Display List

13.4  Utiliser les Vertex Shaders

13.5  Utiliser les VBO (Virtual Buffer Object)

PYQTLAB3DOpenGLModele

PYQTLABModele

Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.