帮人同学修改pyqt5界面成功

本文介绍了一个使用Python和Qt实现串口通信的例子,通过串口接收数据并实时更新GUI界面。具体实现了从指定串口接收数据,并将接收到的数据通过线程发送给界面进行展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding:utf-8 -*-

#import serial

import serial

import sys

import time

import threading

from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QPushButton,QLineEdit # 这里导入了一个按钮控件

from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication

from PyQt5.QtWidgets import *

from PyQt5.QtCore import *



ser = serial.Serial("/dev/ttyAMA0", 115200)  # 位置1      #选择使用哪个串口,波特率多少

ser.flushInput()  # 位置2     清除缓冲区

ser.write("begin".encode("utf - 8"))  # 位置3     发送函数,并设置发送时候的编码格式



class MyTemperatureThread(QThread):     #线程

    breakSignal = pyqtSignal(int,int,int,int,int,int,int,int,int,int)

    def __init__(self, parent=None):        #线程初始化

        super().__init__(parent)



    def run(self):

        while 1:

            count = ser.inWaiting()  # 	读取返回值  读取缓冲区字节

            print(count)        #打印出来已经接受了多少个字节

            if count == 10:      #当满三个字节进行刷新界面

                recv = ser.read(count)  #    进行读取

                self.breakSignal.emit(recv[0],recv[1],recv[2],recv[3],recv[4],recv[5],recv[6],recv[7],recv[8],recv[9])      #给界面送数值 有几个变量就需要在上面定义的时候添加几个int

                print(recv)

                ser.flushInput()  # 清除缓冲区

            time.sleep(0.1)  # 位置8



class Demo(QWidget):  # 让我们自定义这个类继承QWidget,可以当做是一个空白窗口

    def __init__(self):

        super(Demo, self).__init__()

        self.resize(900, 300)  # 设置窗口长宽都为600



        self.label = QLineEdit("Label", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.label.setText("1")

        self.labelA = QLineEdit("LabelA", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelA.setText("2")

        self.labelB = QLineEdit("LabelB", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelB.setText("3")
        
        self.labelC = QLineEdit("LabelB", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelC.setText("4")
        
        self.labelD = QLineEdit("LabelB", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelD.setText("5")



        self.labelq1 = QLabel("方向:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelq2 = QLabel("X:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelq3 = QLabel("Y:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数
        
        self.labelq4 = QLabel("左码盘:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelq5 = QLabel("右码盘:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数


        self.labelq1.move(10, 13)  #

        self.labelq2.move(10, 53)

        self.labelq3.move(10, 93)
        
        self.labelq4.move(10, 133)
        
        self.labelq5.move(10, 173)



        self.label.move(80, 10)  #

        self.labelA.move(80, 50)

        self.labelB.move(80, 90)
        
        self.labelC.move(80, 130)
        
        self.labelD.move(80, 170)
        
#################################
        self.Line = QLineEdit("Label", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.Line.setText("6")

        self.Line1 = QLineEdit("LabelA", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.Line1.setText("7")

        self.Line2 = QLineEdit("LabelB", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.Line2.setText("8")
        
        self.Line3 = QLineEdit("LabelB", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.Line3.setText("9")
        
        self.Line4 = QLineEdit("LabelB", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.Line4.setText("10")



        self.labelW1 = QLabel("X+:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelW2 = QLabel("X-:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelW3 = QLabel("Y+:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数
        
        self.labelW4 = QLabel("Y-:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数

        self.labelW5 = QLabel("颜色:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数


        self.labelW1.move(260, 13)  #

        self.labelW2.move(260, 53)

        self.labelW3.move(260, 93)
        
        self.labelW4.move(260, 133)
        
        self.labelW5.move(260, 173)



        self.Line.move(340, 10)  #

        self.Line1.move(340, 50)

        self.Line2.move(340, 90)
        
        self.Line3.move(340, 130)
        
        self.Line4.move(340, 170)
        
#############################################
        self.labelqqq = QLabel("显示颜色区域:", self)  # 第一个参数是指定的文本,第二个参数是指定的父类DemoQLabel函数
        self.labelqqq.resize(350, 350)
        self.labelqqq.move(500, 10)



# 是存在和属于于Demo()窗口上的

# 接着我们编写程序入口处代码

# def chuli(t):

#     a.labelB.setText(str(t))



#槽的动作函数

def chuli(data1,data2,data3,data4,data5,data6,data7,data8,data9,data10):

    a.label.setText(str(data1))

    a.labelA.setText(str(data2))

    a.labelB.setText(str(data3))
    
    a.labelC.setText(str(data4))
    
    a.labelD.setText(str(data5))

    a.Line.setText(str(data6))
    
    a.Line1.setText(str(data7))
    
    a.Line2.setText(str(data8))
    
    a.Line3.setText(str(data9))
    
    a.Line4.setText(str(data10))



if __name__ == "__main__":

    app = QApplication(sys.argv)  # 传入sys.argv参数用于构造

    a = Demo()

    a.show()



    T = MyTemperatureThread()

    T.breakSignal.connect(chuli)        #将线程绑定到槽

    T.start()

    # 因为窗口和控件默认是隐藏的,所以我们要调用show()来进行显示

    sys.exit(app.exec())  # 此时a作为参数传递给了sys.exit()表示正常退出python程序




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值