View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

PYQT | Premiers pas | Les bases | Port Série | Réseau | Memo PyQt | Memo PyQwt |

Ateliers Python + Qt : Ecrire de "vraies" applications graphiques avec PyQt (Python + Qt4)

Par X. HINAULT - Novembre 2012 - Juin 2013

Plusieurs centaines de pages de supports PDF disponibles !
Plusieurs nouveaux supports PDF mis en ligne chaque mois !

Pour une description détaillée des ateliers,voir ci-dessous

Sympa les prix : seulement 0,25€ le tuto !

Je vous propose ici probablement la façon la plus simple et la plus rapide pour créer en quelques minutes de vraies interfaces graphiques que ce soit sur un poste fixe ou un système embarqué (RaspberryPi notamment), le tout à partir de ressources opensource :

  • pas d'installation et de configuration complexe : l'utilisation d'un simple éditeur à coloration syntaxique et l'installation de quelques paquets suffiront
  • création graphique des interfaces qui s'intégreront parfaitement dans l'environnement système, enrichissement des interfaces par simple copier/coller
  • génération automatique du fichier de description de l'interface,
  • une solution multi-plateforme (Gnu/Linux, Windows, Mac OsX), économe en ressources système,
  • une solution polyvalente (série, réseau, dessin 2D, math, courbes, traitement d'image avec OpenCV, 3D avec OpenGL, astro...)
  • du plus simple au plus complexe, pas à pas... : suivez le guide !

En un mot : en 5 minutes vous êtes opérationnels,
dans quelques jours vous afficherez des courbes en temps réel ou ferez de la 3D avec OpenGL !

Envie de créer facilement, des applications graphiques exécutables sur le Raspberry Pi ?
Vous-êtes au bon endroit : la plupart des tutos présentés ici sont directement utilisables sur le Raspberry Pi avec une Raspbian installée !! Suivez le guide !


Développer avec le langage Python et Qt : les différentes rubriques du site www.mon-club-elec.fr

Python shell

Pour s'initier à Python en "ligne de commande" à partir de l'interpréteur. En moins de 5 minutes, vous commencez à coder... Ensuite vous apprenez pas à pas à votre rythme avec les nombreux exemples (gratuits) fournis.

Python scripts

En vrac, quelques exemples de scripts Python basiques, permettant de se faire la main.

Tutos Python+Qt (PyQt)

Grâce aux nombreux tutos détaillés proposés (légèrement payants), apprenez à créer de vraies petites interfaces graphiques opérationnelles. De l'utilisation d'un simple bouton à l'utilisation d'un graphique scientifique avancé ou bien l'utilisation de la reconnaissance visuelle ou encore la création d'un terminal série ou réseau, découvrez à votre rythme les étonnantes et très nombreuse possibilités de PyQt.

Applications PyQt

Pour allez droit à l'essentiel : je vous propose ici de nombreux exemples d'interfaces GUI écrites en PyQt immédiatement opérationnelles avec tous les codes utiles fournis sous licence GPLv3. Idéal pour ceux qui se sentent à l'aise avec PyQt. Sur ces pages, je vous fournit l'essentiel, sans entrer dans les détails : si vous êtes perdu ou si vous souhaitez approfondir, les tutos PyQt des autres rubriques sont là pour çà.

PyQt + Arduino

En complément naturel des interfaces PyQt utilisant le port série, j'ai rassemblé ici plusieurs PDF (gratuits) d'activités utilisant Arduino avec une interface graphique PyQt : au programme contrôle de robot, de tourelle Pan-Tilt, oscilloscope "maison", affichages analogiques, interface de datalogging, etc...

Le PyQt Lab'

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.

Vue d'ensemble des tutos PyQt

Pour comprendre

Premiers pas

Les Bases

Port Série et Arduino

Le Temps


Les sections suivantes sont en cours de réalisation


Système et ligne de commande

Fichiers

Math et Graphiques

Réseau

Souris et Clavier

Images et Dessin

Traitement d'images fixes

Capture webcam et traitement d'image "temps réel"

Reconnaissance visuelle et Kinect

3D

Astro

RaspberryPi

Sons



Lien local

Accès libre

Accès Boutique

Les points forts des supports PDF des ateliers Python + Qt

  • Nombreuses captures d'écran permettant de refaire facilement par soi-même les étapes de la conception graphique de l'interface dans le logiciel Qt Designer
  • schéma fonctionnel de l'application annoté et en couleur
  • format "paysage" offrant un visionnage facilité sur écran et une utilisation en diaporama
  • pleine largeur de page des schémas ou du code, facilitant le copier/coller
  • approche systématique abordant successivement toutes les étapes de la conception graphique à l'exécution du code
  • liens utiles vers les pages du site www.mon-club-elec.fr et des documentations officielles
  • coloration syntaxique des codes utilisés
  • les contenus ne mettent en oeuvre que des ressources logicielles open-source et multi-plateformes (Windows, Mac Os X, Gnu/Linux) !
  • utilisables sur n'importe quelle plateforme supportant le format PDF (poste fixe ou tablette, sous Windows, Gnu/Linux ou Mac Os X, Android, ... ) et sans être obligatoirement en ligne !

Page d'exemple - cliquer pour agrandir

Pratiques les tutos !

Le plus : lien direct inclus dans chaque tuto vers une archive contenant les codes "prêts à l'emploi"!


Premiers pas avec PyQt

(L'installation est réalisable sous Gnu/Linux (Ubuntu, Raspbian,..), Windows ou Mac)

Et aussi :

A venir... :

  • S'installer pour coder des interfaces graphiques (GUI) en Python + Qt sous MacOsX... en 5 minutes !
  • Utiliser une interface existante pour créer une nouvelle interface en quelques clics !
  • Réutiliser par simple copier/coller des éléments d'interfaces existantes pour créer une nouvelle interface !

Les bases de PyQt

PushButton

RadioButton

LineEdit

TextEdit

Liste déroulante

Widgets réglables

Timer

Affichages

Mini-applications

Pour comprendre


Malin : tous les tutos de la catégorie "Les Bases" en 1 clic
OFFRE SPECIALE DECOUVERTE : Réduction -20 % incluse soit 22 tutos (plus de 300 pages) à 0,20€ le tuto !


PushButton

RadioButton

LineEdit (champ texte)

TextEdit (Zone de texte)

Liste déroulante

Slider (curseur réglable) et widgets de réglage

Timer et génération d'évènements à intervalle régulier

Widget LCD et widgets d'affichage

Mini-applications complètes

Pour comprendre : Notion de signaux et de slots :


Mémo : Procédures QtDesigner


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

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



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

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

Variantes du Terminal Série

  • Un Terminal série « Arduino-like » léger et autonome : variante avec bouton de stop. - 32 p. - 0.25€
  • Terminal série "Arduino like" : variante avec bouton de stop et zone texte pour les chaînes envoyées sur le port série
  • Terminal série "Arduino like" : variante avec bouton de stop et spinbox de réglage du délai de réception
  • Terminal série "Arduino like" : variante avec bouton de stop et zone texte pour les chaînes envoyées sur le port série et spinbox de réglage du délai de réception *

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

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

En vert : des exemples d'utilisation concrète des interfaces PyQt

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
  • 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...)*

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

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

PyQt et le temps

Timers

Temps Réel système

  • Calculer la durée d'exécution d'une fonction

L'heure "temps réel"


Quoi ?? Vous êtes déjà arrivés ici ? Un peu de patience, la suite arrive bientôt !
Je mets en ligne plusieurs tutos par semaine... Merci de repasser prochainement !


PyQt et les fichiers

Sélection des chemins de fichier

  • Ouvrir une fenêtre de sélection de fichier à l'emplacement voulu à partir du contenu d'un champ texte
  • Sélectionner un fichier à l'aide d'une fenêtre de sélection de fichier et récupérer le chemin dans un champ texte
  • Sélectionner un fichier à l'aide d'une fenêtre de sélection de fichier en prédéfinissant le type possible

Contenus de répertoires

  • Sélectionner un répertoire à l'aide d'une fenêtre de sélection du chemin, ouvrir le répertoire à partir du chemin saisi dans un champ texte et afficher le contenu dans une zone de texte *

Fichiers textes

  • Sélectionner un fichier à l'aide d'une fenêtre de sélection de fichier et ouvrir un fichier texte dans une zone de texte - v2 ok
  • Une interface graphique pour l'utilitaire pyuic4
  • Une interface graphique pour l'utilitaire pyuic4 avec affichage des fichiers *.ui et *.py
  • Un éditeur texte basique permettant d'ouvrir ou créer, éditer et sauvegarder un fichier texte. - v2
  • Interface permettant de générer une série de valeurs x,y par saisie d'une fonction dans une zone texte *

Fichiers textes et enregistrement de données (datalogging)

  • Enregistrer des données dans un fichier texte lors appui sur un pushButton
  • Enregistrer des données dans un fichier texte à intervalle régulier
  • Enregistrer des données reçues sur le port Série dans un fichier texte à intervalle régulier
  • Oscilloscope avec enregistrement des donnée dans un fichier texte
  • Interface de contrôle de position de plusieurs servomoteurs par Sliders et enregistrement des positions dans un fichier + fonction de lecture de la séquence enregistrée

Fichiers et graphique

  • Enregistrer des données affichées graphiquement dans un fichier et afficher données dans QwtPlot à partir fichier *

Fichiers et ligne de commande

  • Sélectionner un fichier son à l'aide d'une fenêtre de sélection système et lancer la lecture du fichier à partir du chemin obtenu

Fichiers image

  • Enregistrer une image capturée à partir de la webcam

Fichier sons et vidéos

  • ..

Contrôler le système par ligne de commande avec PyQt

  • L'appui sur un pushButton lance l'exécution d'un commande saisie dans un champ texte.
  • Une console GUI permettant de saisir une ligne de commande (champ texte), de lancer exécution (pushButton) et afficher sortie système (zone texte)
  • Une interface graphique pour l'utilitaire pyuic4
  • Une interface graphique pour l'utilitaire pyuic4 avec affichage des fichiers *.ui et *.py
  • Sélectionner un fichier son à l'aide d'une fenêtre de sélection système et lancer la lecture du fichier à partir du chemin obtenu
  • Test de la synthèse vocale
  • Reconnaissance vocale via serveur internet *

PyQt et le RaspberryPi

  • Allumer une LED du GPIO par appui sur un pushButton en mode ON/OFF *
  • Contrôler les 8 broches E/S du GPIO par appui sur un pushButton en mode ON/OFF *
  • Contrôler les broches du GPIO à partir d'une interface web javascript + Ajax

PyQt + Reseau : la communication réseau

PyQt et le réseau : 1. Interfaces PyQt serveur TCP
PyQt et le réseau : 2. Interfaces PyQt client TCP
PyQt et le réseau : 3. Interfaces PyQt UDP

PyQt + Reseau : Interfaces PyQt en Serveur TCP

  • Terminal serveur TCP simple avec envoi de réponse Http et HTML
  • Terminal serveur TCP et champ pour envoi de réponse Http et HTML (idéal pour tests) *
  • Terminal mixte serveur TCP et Série + réceptions de 6 valeurs numériques sous forme de chaine et affichage dans 6 widgets LCD *

PyQt + Reseau : Interfaces PyQt en Client TCP

Les interfaces réseau client TCP possibles se superposent aux interfaces Série

Client TCP : Réception de données en provenance du réseau

Réseau vers PyQt : Réception Réseau avec une interface "Terminal Client TCP Réseau"
Avec le module QtNetwork

  • Terminal client TCP avec champ réception réponse serveur et pushButton pour ping vers le serveur *

Avec le module Socket (Pour mémoire)

  • Définir paramètres serveur, envoyer une requête et afficher la réponse reçue du serveur distant = "Terminal client TCP" *
  • Terminal client TCP avec pushButton pour ping vers le serveur *

Réseau vers PyQt : Réception Réseau avec traitement de chaînes de caractères

  • Analyse d'une chaîne de caractères reçue en provenance du réseau et extraction de paramètres numériques.
  • Recevoir de façon asynchrone des paramètres numériques par réception de chaines spécifiques avec paramètre numérique reçue en provenance du réseau(= décodage de "fonctions" avec un paramètre numérique reçues sur le port série)

Réseau vers PyQt : Réception Réseau avec affichages numériques

  • Réception d'une valeur numérique en provenance du réseau et affichage dans un widget LCD
  • Réception d'une valeur numérique en provenance du réseau, conversion mesure/unité et affichage dans des widgets LCD.
  • Terminal client TCP complet + réceptions de 6 valeurs numériques sous forme de chaine et affichage dans 6 widgets LCD *
  • Affichage dans 12 widgets d'affichage LCD de 6 valeurs numériques reçues en provenance du réseau et converties en unités.
  • Configurer le port série, recevoir les 6 valeurs numériques des voies analogiques en provenance du réseau et les afficher dans 6 widgets LCD - variante avec onglets

Réseau vers PyQt+PyQwt (1) : Réception Réseau avec affichage dans des widgets d'affichage analogique
QwtDial

  • Afficher dans un QwtDial, le widget d'affichage analogique « à aiguille », une valeur de conversion analogique numérique (0-1023) reçue en provenance du réseau
  • Réception d'une valeur numérique en provenance du réseau, dans un QwtDial, le widget d'affichage analogique « à aiguille », conversion mesure/unité et affichage dans des widgets LCD.
  • Réception de 6 valeurs numériques en provenance du réseau, dans 6 QwtDial, le widget d'affichage analogique « à aiguille », conversion mesure/unité et affichage dans 12 widgets LCD.

QwtThermo

  • Afficher dans un QwtThermo, le widget d'affichage analogique « vu-mètre », une valeur de conversion analogique numérique (0-1023) reçue en provenance du réseau
  • Réception d'une valeur numérique en provenance du réseau, dans un QwtThermo, le widget d'affichage analogique « vu-mètre », conversion mesure/unité et affichage dans des widgets LCD.
  • Réception de 6 valeurs numériques en provenance du réseau, dans 6 QwtThermo, le widget d'affichage analogique « vu-mètre », conversion mesure/unité et affichage dans 12 widgets LCD.
  • Lancer une alarme sonore ou vocale en cas de dépassement d'une valeur d'alarme d'un QwtThermo par une valeur reçue en provenance du réseau

Client TCP : Envoi de données sur le réseau

Path:

Envoi par clic pushButton On/Off

  • Allumer une LED côté serveur TCP Arduino avec un PushButton en mode ON/OFF.
  • Contrôler toutes les broches numériques d'un serveur TCP Arduino en mode ON/OFF à l'aide de pushButton On/Off

Envoi par clic pushButton

  • Envoyer et recevoir des chaînes sur le réseau = créer un terminal client TCP réseau « Arduino-like » !
    • Envoyer une chaîne avec paramètre numérique vers serveur TCP Arduino et extraire la valeur numérique reçue côté Arduino
  • Terminal réseau intégrant un clavier de 5 pushButtons type "Joystick" pour envoi de chaînes personnalisées vers le serveur TCP (contrôle graphique de dispositifs, robots...via le réseau)
    • Contrôler un robot à PC embarqué à l'aide d'une tablette tactile
    • Contrôler une tourelle pan-tilt à l'aide de l'interface "Joystick"
  • Terminal client TCP réseau intégrant 1 spinBox (widget de réglage de valeur numérique) pour envoi de chaîne avec paramètre numérique sur le port Série.
  • Envoyer vers le serveur TCP par clic sur un pushButton une valeur numérique d'un widget LCD réglable par un dial +/- précédée du contenu d'un champ texte (format fonction(valeur))
    • Régler la luminosité d'une LED
  • Envoyer vers le serveur TCP la valeur numérique courante d'un slider après validation par appui sur un pushButton
    • Régler la position d'un servomoteur à l'aide d'un slider après validation par appui sur un pushButton
  • Envoyer vers le serveur TCP la valeur numérique courante d'un QwtDial après validation par appui sur un pushButton
    • Régler la position d'un servomoteur à l'aide d'un QwtDial, widget "à aiguille" configuré à 180°après validation par appui sur un pushButton
  • Envoyer vers le serveur TCP une valeur numérique saisie à l'aide d'un clavier graphique.
    • Contrôler la position d'une tourelle pan-tilt à l'aide de l'interface à clavier graphique
  • Un minuteur graphique pour contrôler serveur TCP Arduino : réglage d'un widget LCD avec un bouton réglable (dial), bouton de Go / Stop, envoi vers le serveur TCP signal de début/fin (à partir de 2 champs texte) *
    • Allumer / éteindre un dispositif connecté à Arduino à partir de l'interface de minuteur graphique série

Path:

Envoi par widget graphique analogique

  • Envoyer vers le serveur TCP 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 vers le serveur TCP 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 vers le serveur TCP 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 vers le serveur TCP la valeur numérique courante d'un Dial, bouton réglable, en "live" (lors du lâcher bouton souris)
  • Envoyer vers le serveur TCP 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
  • Envoyer vers le serveur TCP 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"

Client TCP : Communication avancée

Path:

Echanges bi-directionnels serveur TCP <=> Client TCP PyQt

  • Envoyer et recevoir des chaînes en provenance/vers le réseau = créer un terminal client TCP « Arduino-like » !
  • Un Terminal client TCP « Arduino-like » léger et autonome : variante avec bouton de stop.
  • Terminal client TCP "Arduino like" : variante avec bouton de stop et spinbox de réglage du délai de réception
  • Envoyer une chaîne de requête vers serveur TCP Arduino et récupérer la réponse renvoyée (lancer conversion analogique et récupérer mesure)

Path:

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

  • La réception d'une chaîne (envoyée par serveur Arduino TCP ) sur le réseau lance une ligne de commande système.
  • Déclencher une succession de lignes de commande par réception d'une chaîne reçue sur le réseau lors appui sur un BP côté serveur TCP Arduino

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

  • (voir Qwt)
  • 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

PyQt + Reseau : Interfaces PyQt communication UDP

Path:

UDP

  • Terminal avec fonction getIP sur pushButton et scan réseau *
  • Terminal UDP pour envoi / réception de paquets UDP *

PyQt, souris et claviers

Souris

  • Capturer l'évènement "clic bouton souris"
  • Obtenir les coordonnées de la souris

Clavier

  • Capturer l'évènement "appui touche clavier'''
  • Récupérer la valeur de la touche appuyée

PyQt et les sons

  • lire un fichier son
  • synthèse vocale
  • reconnaissance vocale
  • Créer un fichier son à partir d'un tableau de valeurs Numpy *

Images et Dessin avec PyQt

Pour comprendre

  • Les images dans PyQt

Dessin fixe

  • Créer une image de couleur unie simple et régler la couleur avec des sliders
  • Dessiner des formes géométriques simples sur une image dans un Label (QPixmap)
    • Déplacer une ligne à l'aide d'un slider..
    • Dessiner un carré, une ligne, un cercle..
  • Accéder aux pixels d'une zone de dessin
  • Enregistrer une zone de dessin dans un fichier (QPixmap et QImage)

Animation dessin

  • Rafraîchir une zone de dessin à intervalle régulier

Images

  • Ouvrir une image à partir d'un fichier et l'afficher dans un Label (QPixmap et QImage)
  • Dessiner sur une image

Image et Interactivité

  • Modifier couleur de l'image lors clic souris
  • Détecter la position de souris sur l'image et afficher le point courant (croix de lignes)
  • Un rectangle suit la souris...

Console

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

Affichage graphique et mathématique avec PyQt

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?

PyQt + PyqtGraph : afficher des graphiques et des courbes

Tracé de courbes simples

Les bases

Affichages de courbes y=f(x)

  • Afficher une courbe de 1000 valeurs aléatoires simulant une série de données
  • Afficher/masquer plusieurs courbes simples dans un graphique pyqtgraph, sélectionnables par case à cocher *
  • Afficher une courbe à partir d'une série de valeurs chargées à partir d'un fichier texte ou saisies dans une zone texte, enregistrables dans un fichier texte
  • Définir la courbe à tracer à partir d'une formule saisie en zone texte, et enregistrer données dans fichier*

Exemples de courbes mathématiques

  • Exemple de courbe réelle : afficher la courbe du corps noir et la paramétrer à l'aide d'un slider

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

  • Affichage d'une courbe paramétrique d'exemple * shell
  • Courbe de l'analemna

Paramétrage de l'interactivité du graphique

  • L'interactivité par défaut
  • Description du menu contextuel par défaut et des options disponibles
  • Exemple d'interactivité prédéfinie : voir affichage courbe simple
  • Afficher le point courant d'une courbe y=f(x) sous le curseur de la souris *
  • Afficher une croix de lignes sous la souris ainsi que le point courant d'une courbe *
  • Récupérer la valeur du point courant lors d'un clic souris *

Console intégrée

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

Tracé de courbes avec timeline

  • Créer un graphique avec une timeline interactive *
  • Créer un graphique avec une timeline interactive à partir d'un fichier de données

Tracé de courbes "temps réel"

  • Affichage progressif d'une courbe *
  • 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

Images simples avec pyqtgraph

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

Images avec widgets pyqtgraph

Images et ROI

Tracé d'images "temps-réel" ou animées

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

PyQt + Qwt : afficher des graphiques et des courbes

  • Présentation de Qwt et principe d'utilisation avec PyQt

Utiliser les widgets de réglages Qwt

  • Utiliser le QwtCounter, widget amélioré de réglage de valeur numérique
  • Utiliser le QwtWheel, widget de réglage rotatif sans fin
  • ...

Utiliser les widgets d'affichage analogique Qwt

  • Utiliser un afficheur analogique "à aiguille"
  • Régler un afficheur analogique "à aiguille" avec un slider
  • ..

Découvrir le QwtPlot, l'affichage des points, l'utilisation de marqueurs et l'utilisation du Zoom.

  • Découvrir et configurer QwtPlot, le widget de tracé de courbe
  • Afficher des points(x,y) quelconques dans un QwtPlot
  • Paramétrer l'aspect des points
  • Paramétrer l'aspect du tracé (le type de connexion entre les points)
  • Afficher un Marker dans un QwtPlot et le déplacer à l'aide de pushButton
  • Afficher les coordonnées du point courant du graphique sous le curseur souris +/- afficher axes passant par le point
  • Afficher un Marker à l'emplacement du curseur lors d'un clic souris
  • Appliquer un zoom (au besoin itératif) à une zone du graphique sélectionnée à la souris (sélection de zone, réinitialisation, zoom+, zoom-,...)

Tracer des courbes statiques avec Qwt

  • Afficher une simple courbe dans un QwtPlot
  • Appliquer un zoom (au besoin itératif) à une zone d'une courbe sélectionnée à la souris (sélection de zone, réinitialisation, zoom+, zoom-,...)
  • Sélectionner à l'aide de pushButton des points d'une courbe au sein d'un QwtPlot à l'aide d'un Marker et afficher les coordonnées du point courant
  • Modifier l'échelle d'affichage d'une courbe par appui sur un pushBouton + 2 champs texte (mapper valeurs / nombre x)

Tracer des courbes interactives avec Qwt

  • Modifier les paramètres de tracé d'une courbe à l'aide de sliders - 34 p.
  • Utiliser un QwtPlot à la façon "Processing"

Tracer des courbes "temps-réel" avec Qwt

pushButton

  • Ajouter des points à une courbe en "temps réel" par appui sur un pushButton
  • Datalogging de points d'une courbe ajoutés à l'aide push button, ouverture fichier, retracé courbe, etc...

timer

  • Afficher une courbe progressivement à l'aide d'un Timer (ajout final ou initial + effacement entre chaque passage) *
  • Afficher une courbe progressivement à l'aide d'un Timer (ajout final ou initial + affichage continu) *

Port série

  • Afficher sous forme d'une courbe des données reçues en temps réel depuis le port Série (base oscillo) (ajout final ou initial + effacement entre chaque passage)
  • Afficher une courbe progressivement à l'aide d'un Timer (ajout final ou initial + affichage continu)
  • Datalogging de points d'une courbe reçus par le port série, bouton stop/go, ouverture fichier, enregistrement courbe, retracé courbe, etc...
  • Application pour étalonnage de capteur (chaque appui pushButton prend en compte nouveau point basé sur X + Y mesuré) + datalogging

Tracé de Map avec Qwt

  • Utiliser une échelle de couleur
  • Tracer une Map
  • Afficher les contours d'un Map.

Calcul mathématique et gestion des tableaux

  • Fonctions de base de gestion des tableaux avec NumPy

Applications utilisant le tracé de courbe en temps réel

  • Un oscilloscope "mono-voie" pour Arduino simple
  • Un oscilloscope "multi-voies" simultanées pour Arduino simple
  • Un oscilloscope "multi-voies" séparées pour Arduino simple
  • Un oscilloscope "mono-voie" pour Arduino simple avec analyse graphique
  • Un oscilloscope "multi-voies" séparées pour Arduino simple avec analyse graphique
  • Un oscilloscope "multi-voies" simultanées pour Arduino simple avec analyse graphique
  • Un oscilloscope "mono-voie" pour Arduino avec fonction d'enregistrement dans un fichier
  • Un oscilloscope "multi-voies" pour Arduino avec fonction d'enregistrement dans un fichier

PyQt + OpenCV : traiter des images fixes

Pour débuter

  • Afficher une image chargée depuis un fichier avec OpenCV dans une interface PyQt
  • Sélectionner un fichier image et afficher l'image avec OpenCV dans une interface PyQt

Traitement d'image de base

  • Déclarer / Initialiser des "buffers" image OpenCV pour réaliser facilement les opérations sur des images
  • Convertir une image RGB en niveaux de gris
  • Appliquer un effet miroir à une image RGB
  • Inverser une image RGB
  • Appliquer un flou à une image RGB (filtre Gaussien)
  • Appliquer un seuillage (réglé par Slider) et binariser une image RGB

Traitement d'image avancé

  • 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
  • Egaliser histogramme
  • Afficher histogramme d'une image
  • Conversion RGB to HSV

Opérations sur pixels

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

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

Traitement entre 2 images

Soustraction du fond

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 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)

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

Analyse de contours de formes 2D quelconques

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

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

Fonctions de dessin 2D


PyQt + OpenCV + webcam : Capturer et traiter en "temps réel" des images issues d'un flux vidéo

Pour débuter

Traitement d'image de base du flux vidéo direct

  • 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 *

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

Capture d'image sur clic bouton

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

Opérations sur pixels

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

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

Traitement entre 2 images

Soustraction du fond

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

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

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

Analyse de contours de formes 2D quelconques

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

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

Fonctions de dessin 2D

...

Calibrage de webcam

OCR (avec OpenCV ou non...)


PyQt + OpenCV + OpenNI (Kinect)

  • Installer OpenNI pour PyQt
  • Afficher l'image RGB issue de la Kinect
  • Afficher l'image de profondeur issue de la Kinect
  • Détecter et afficher les personnes
  • Suivi des mains
  • Détection des gestes
  • Détection et suivi du squelette

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

Pour commencer

  • Afficher le repère 3D de la fenêtre dans une interface Qt
  • Interface Qt de visualisation du repère 3D (rotation/translation dans les 3 axes)

Les fonctions et concepts OpenGL de base

Utiliser les Display List

Utiliser les Vertex Shaders

Utiliser les VBO (Virtual Buffer Object)


PyQt + ARToolkit : la reconnaissance de Marker avec PyQt


PyQt + PyEphem : le calcul astronomique en Python

  • Calcul de l'azimuth et de l'élévation solaire
  • Calcul de la position lunaire
  • Calcul de l'onde des marées

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

PYQTModeleDPD | PYQTModeleDPDGratuit | PYQTModeleLocalGratuit