PYQT | Premiers pas | Les bases | Port Série | Réseau | Memo PyQt | Memo PyQwt |
Le PyQt-Lab' : mes codes PyQt en vrac !
Par X. HINAULT - Juin 2013
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
signale les codes pour lesquels un tuto détaillé est disponible dans la rubrique Ateliers Python + Qt.
PYQTLAB
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
|
Créer un Terminal Série "Arduino like" de A à Z ! Terminal Série de base
Variantes du Terminal Série
|
|
Arduino vers PyQt : Réception Série avec traitement de chaînes de caractères
|
|
Arduino vers PyQt : Réception Série avec affichages numériques
|
|
Arduino vers PyQt+PyQwt (1) : Réception Série avec affichage dans des widgets d'affichage analogique. QwtDial
QwtThermo
|

|
Envoi par clic pushButton On/Off
Envoi par clic pushButton
|
|
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"
|
|
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...)*
|

|
Echanges bi-directionnels Arduino <=> PyQt
|
|
Arduino vers PyQt vers Gnu/Linux : Réception Série et contrôle du Système
|
|
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
|
|
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.1 Utilisation des E/S seules à partir d'une interface graphique
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
Entrées numériques
Entrées analogiques
Affichages numériques
Affichages analogiques
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.
Sorties analogiques
6.2 Utilisation des E/S + fonctions système à partir d'une interface graphique
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.1 Utilisation des E/S seules à partir d'une interface graphique
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
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
Pour comprendre
Dessin fixe
Intro
Dessiner des formes géométriques simples sur une image dans un Label (QPixmap et QImage)
- Accéder aux pixels d'une zone de dessin (QPixmap et QImage) :
- Appliquer une opération mathématique f(x,y) à tous les pixels (QPixmap et QImage) :
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
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.1 Tracé de courbes simples
Les bases
Affichages de courbes y=f(x)
Exemples de courbes mathématiques
- Autour de la loi du corps Noir
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.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
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.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 :
- 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 :
- 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.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