ihm avec python Qt

ihm avec python Qt

REM: Exemples en python 3


Recopie d’un Message

$ chmod +x copyString.py
$ ./copyString.py 

copyString.png

#! /usr/bin/python3
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit,  QPushButton, QVBoxLayout

########################################################################
#							FUNCTIONS
########################################################################

def onPushCopy():
    var =  line_source.text()
    print(var)
    line_dest.setText(var)
    line_source.clear()  

########################################################################
#								UI
########################################################################

if  __name__ == "__main__" :

    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Copy Example")
    
    # Elements de l'IHM
    label_source = QLabel(w)
    label_source.setText("Source :")
    
    label_dest = QLabel(w)
    label_dest.setText("Destination :")
    
    line_source = QLineEdit(w)
    line_dest = QLineEdit(w)
    
    btn = QPushButton(w)
    btn.setText('COPY')
    btn.clicked.connect(onPushCopy) # Action associée à l'appui sur le bouton ( signal )
    
    # Disposition des Elements
    vb = QVBoxLayout(w)
    
    vb.addWidget(label_source)
    vb.addWidget(line_source)
    vb.addStretch()
    vb.addWidget(btn)
    vb.addStretch()
    vb.addWidget(label_dest)
    vb.addWidget(line_dest)   
    
    w.show()
    
    sys.exit(app.exec_())

########################################################################
    

Version ORIENTE OBJET :

#! /usr/bin/python3
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QLineEdit,  QPushButton, QVBoxLayout

########################################################################
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

		# Elements de l'IHM
        self.setMinimumSize(300, 300)    
        self.setWindowTitle("Copy Example") 

        self.label_source = QLabel(self)
        self.label_source.setText('Source :')
        
        self.label_dest = QLabel(self)
        self.label_dest.setText('Destination :')        
        
        self.line_source = QLineEdit(self)
        
        self.line_dest = QLineEdit(self)
        
        self.btn = QPushButton(self)
        self.btn.setText('COPY')
        self.btn.clicked.connect(self.onPushCopy)  # Action associée à l'appui sur le bouton ( signal )
 
         # Disposition des Elements
        widget = QWidget()
        self.setCentralWidget(widget)
        vb = QVBoxLayout(widget)
        
        vb.addWidget(self.label_source)
        vb.addWidget(self.line_source)
        vb.addStretch()
        vb.addWidget(self.btn)
        vb.addStretch()
        vb.addWidget(self.label_dest)
        vb.addWidget(self.line_dest)  

    def onPushCopy(self):
        var =  self.line_source.text()
        print(var)
        self.line_dest.setText(var)
        self.line_source.clear()  

########################################################################
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
########################################################################

   

Chronomètre

$ chmod +x timer_oo.py
$ ./timer_oo.py 

timer.png

#! /usr/bin/python3
import sys
from PyQt5 import QtCore
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QLineEdit,  QPushButton, QGridLayout, QLCDNumber

########################################################################
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

		# Elements de l'IHM
        self.setMinimumSize(300, 300)    
        self.setWindowTitle("Chrono") 
        
        self.lcd = QLCDNumber(self)
        
        self.btn_start = QPushButton(self)
        self.btn_start.setText('start')
        self.btn_start.clicked.connect(self.onPushStart) 
 
        self.btn_stop = QPushButton(self)
        self.btn_stop.setText('stop')
        self.btn_stop.clicked.connect(self.onPushStop) 
 
        self.btn_reset = QPushButton(self)
        self.btn_reset.setText('reset')
        self.btn_reset.clicked.connect(self.onPushReset)
 
         # Disposition des Elements
        widget = QWidget()
        self.setCentralWidget(widget)
        grid_layout = QGridLayout(widget)
        
        grid_layout.addWidget(self.btn_start,0,0)
        grid_layout.addWidget(self.btn_stop,1,0)
        grid_layout.addWidget(self.lcd,0,1)
        grid_layout.addWidget(self.btn_reset,1,1)   
        
        # Timer
        countTimer=0;
        self.timer_chrono = QTimer()
        self.resetCount();
        self.timer_chrono.timeout.connect(self.onTimerTick)
    
    def resetCount(self):  
        self.countTimer=0  
        print(self.countTimer)
        self.lcd.display(self.countTimer)

    def onPushStart(self):
        self.timer_chrono.start(1000)
        self.lcd.display(self.countTimer)
		
    def onPushStop(self):  
        self.timer_chrono.stop()
		
    def onPushReset(self):  
        self.resetCount();
		
    def onTimerTick(self):  
        self.countTimer=self.countTimer+1
        print(self.countTimer)
        self.lcd.display(self.countTimer)

########################################################################
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
########################################################################

 

Python-Qt et laison série UART (RS232)

$ chmod +x testSerial_oo.py
$ ./testSerial_oo.py 

serial.png

#! /usr/bin/python3
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QLineEdit,  QPushButton, QVBoxLayout
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo

nameport='/dev/ttyACM0'
baudrate=115200

########################################################################
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

		# Elements de l'IHM
        self.setMinimumSize(300, 300)    
        self.setWindowTitle("UART Example") 

        self.label_toSend = QLabel(self)
        self.label_toSend.setText('Message à Envoyer :')
        
        self.label_recvd = QLabel(self)
        self.label_recvd.setText('Message Reçu :')        
        
        self.line_toSend = QLineEdit(self)
        
        self.line_recvd = QLineEdit(self)
        
        self.btn_send = QPushButton(self)
        self.btn_send.setText('Send Message')
        self.btn_send.clicked.connect(self.onPushSend)  # Action associée à l'appui sur le bouton ( signal )
 
         # Disposition des Elements
        widget = QWidget()
        self.setCentralWidget(widget)
        vb = QVBoxLayout(widget)
        
        vb.addWidget(self.label_toSend)
        vb.addWidget(self.line_toSend)
        vb.addStretch()
        vb.addWidget(self.btn_send)
        vb.addStretch()
        vb.addWidget(self.label_recvd)
        vb.addWidget(self.line_recvd)  
        
        # Serial Port
        self.serial=0
        self.openSerialPort()
        self.serial.readyRead.connect(self.readData)
        
         
    def openSerialPort(self):
        self.serial = QSerialPort()
        self.serial.setPortName(nameport)
        r = self.serial.open(QtCore.QIODevice.ReadWrite)
        if not r:
                print('Port open error')
        else:
                print('Port opened')
                self.serial.setBaudRate(baudrate)
                self.serial.setStopBits(1)
                self.serial.setParity(0) # no parity
                self.serial.setDataBits(8)
                self.serial.setFlowControl(0)
               

    def onPushSend(self):
        text_to_send =  self.line_toSend.text()
        print(text_to_send)
        self.serial.write(text_to_send.encode())
        self.line_toSend.clear() 

    def readData(self):
        data=self.serial.readAll()
        print(str(data))
        self.line_recvd.setText(str(data))

  
########################################################################
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
########################################################################







Installation

$ sudo apt-get install python python3-qt python3-serial