PyQt Lab est un outil puissant qui permet aux développeurs de créer des applications graphiques avec Python. Il offre une variété de fonctionnalités, notamment la possibilité de communiquer avec des périphériques externes via le port série. Dans cet article, nous allons vous montrer comment initialiser le port série à l’aide d’un pushButton dans PyQt Lab. Nous expliquerons également comment configurer le port série et comment envoyer et recevoir des données.
PyQt Lab’ : Port Série : réception : Initialiser le port série à l’aide d’un pushButton
Par X. HINAULT – Juin 2013

Ce que l’on va faire ici
- Dans ce code PyQt, je montre comment initialiser le port série à l’aide d’un pushButton.
Pré-requis
- python 2.7
- pyqt4.x
- modules :
- python-serial
Téléchargement :
- Ces codes sont disponibles ici :
Le fichier d’interface *.py
- Fichier obtenu automatiquement avec l’utilitaire pyuic4 à partir du fichier *.ui créé avec QtDesigner :
# Form implementation generated from reading ui file
# Created: Thu Jan 3 15:58:46 2013
# by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8(« Form »))
Form.resize(298, 65)
self.pushButtonInit = QtGui.QPushButton(Form)
self.pushButtonInit.setGeometry(QtCore.QRect(10, 15, 136, 31))
self.pushButtonInit.setObjectName(_fromUtf8(« pushButtonInit »))
self.lineEditPort = QtGui.QLineEdit(Form)
self.lineEditPort.setGeometry(QtCore.QRect(150, 20, 136, 23))
self.lineEditPort.setObjectName(_fromUtf8(« lineEditPort »))
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(QtGui.QApplication.translate(« Form », « PyQt + PySerial : Init Serial », None, QtGui.QApplication.UnicodeUTF8))
self.pushButtonInit.setText(QtGui.QApplication.translate(« Form », « Initialiser Port Série », None, QtGui.QApplication.UnicodeUTF8))
self.lineEditPort.setText(QtGui.QApplication.translate(« Form », « /dev/ttyACM0 », None, QtGui.QApplication.UnicodeUTF8))
if __name__ == « __main__ »:
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Le fichier d’application *Main.py
# -*- coding: utf-8 -*-
# par X. HINAULT – Déc 2012 – Tous droits réservés
# GPLv3 – www.mon-club-elec.fr
# modules a importer
from PyQt4.QtGui import *
from PyQt4.QtCore import * # inclut QTimer..
import os,sys
import serial # communication serie
from tuto_pyqt_pyserial_init_pushbutton import * # fichier obtenu à partir QtDesigner et pyuic4
class myApp(QWidget, Ui_Form): # la classe reçoit le Qwidget principal ET la classe définie dans test.py obtenu avec pyuic4
def __init__(self, parent=None):
QWidget.__init__(self) # initialise le Qwidget principal
self.setupUi(parent) # Obligatoire
#Ici, personnalisez vos widgets si nécessaire
#Réalisez les connexions supplémentaires entre signaux et slots
# connecte le signal Clicked de l’objet bouton à l’appel de la fonction voulue
self.connect(self.pushButtonInit, SIGNAL(« clicked() »), self.pushButtonInitClicked)
#— déclaration utiles —
self.serialPort=None # déclaration initiale
# les fonctions appelées, utilisées par les signaux
def pushButtonInitClicked(self):
print(« Bouton Init cliqué »)
if self.serialPort: # si le port existe déjà
self.serialPort.close() # ferme le port si existe
# — initialise paramètre initialisation
if self.lineEditPort.text()==« » : # si le champ d’initialisation est vide = initialisation par défaut
chaineInit=« /dev/ttyACM0 » # par défaut
else :
chaineInit=str(self.lineEditPort.text()) #avec paramètre champ texte
#— initialisation série avec gestion erreur —
try:
self.serialPort=serial.Serial(chaineInit, 115200) # initialise port serie
self.serialPort.flushInput() # vide la file d’attente série
print(« Initialisation Port Série : /dev/ttyACM0 @ 115200 = OK « )
#– change aspect bouton init
self.pushButtonInit.setStyleSheet(QString.fromUtf8(« background-color: rgb(0, 255, 0); »)) # bouton en vert
self.pushButtonInit.setText(« Connexion OK ») # change titre bouton
except: # si erreur initialisation
print(« Erreur initialisation Série »)
#– change aspect bouton init
self.pushButtonInit.setStyleSheet(QString.fromUtf8(« background-color: rgb(255, 127, 0); »)) # bouton en orange
self.pushButtonInit.setText(QString.fromUtf8(« Non connecté »)) # change titre bouton
def main(args):
a=QApplication(args) # crée l’objet application
f=QWidget() # crée le QWidget racine
c=myApp(f) # appelle la classe contenant le code de l’application
f.show() # affiche la fenêtre QWidget
r=a.exec_() # lance l’exécution de l’application
return r
if __name__==« __main__ »: # pour rendre le code exécutable
main(sys.argv) # appelle la fonction main
Utilisation
- Les 2 fichiers suivants sont à enregistrer dans un même répertoire, l’un en nom.py et l’autre en nomMain.py.
- Puis lancer l’application depuis Geany ou équivalent, en exécutant le fichier nomMain.py
- Connecter la carte Arduino et appuyer sur Init : le port série doit s’initialiser.
Articles similaires:
- PyQt Lab’ : Série : Interface graphique de base pour initialiser la connexion au port série (sélection graphique du débit, du port utilisé)
- PyQt Lab’ : Les Bases : L’interface graphique minimale.
- PyQt Lab’ : Série : Interface graphique de base pour configuration, paramétrage, réception et affichage de chaines en provenance d’Arduino par le port série
- PyQt Lab’ : Port Série : en réception : Réception d’une valeur numérique sur le port série et affichage dans un widget LCD.
- PyQt Lab’ : Port Série : en réception : Afficher dans un QwtThermo, le widget d’affichage analogique « vu-mètre », une valeur de conversion analogique numérique (0-1023) reçue sur le port série en provenance d’Arduino.
Articles Liés
- PyQt Lab' : Port Série : en envoi : Envoyer sur le port série une valeur numérique saisie à l'aide d'un clavier graphique.
PyQt Lab est un outil puissant qui permet aux utilisateurs de créer des applications graphiques…
- PyQt Lab' : Graphiques Math : Pyqtgraph + Pyserial : Afficher une courbe à partir de valeurs reçues sur le port série, avec widgets de paramétrage des axes
PyQt Lab est un outil puissant qui permet aux utilisateurs de créer des graphiques mathématiques…
- PyQt Lab' : Série : Interface graphique de base pour initialiser la connexion au port série (sélection graphique du débit, du port utilisé)
PyQt Lab est un outil puissant et facile à utiliser qui permet aux développeurs de…