读取串口数据实时显示到textbrower,但会线程阻塞,求大神指教

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

# Form implementation generated from reading ui file '22.ui'

#

# Created by: PyQt5 UI code generator 5.10.1

#

# WARNING! All changes made in this file will be lost!

import sys, serial, pexpect, time

from PyQt5 import QtCore, QtGui, QtWidgets

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

class BackendThread(QThread):

sec_changed_signal = pyqtSignal(int)

def __init__(self, sec=1000, parent=None):

super().__init__(parent)

self.sec = sec # 默认1000ms

def run(self):

for i in range(self.sec):

self.sec_changed_signal.emit(i)

time.sleep(0.001)

class Ui_MainWindow:

def setupUi(self, MainWindow):

self.window = MainWindow

MainWindow.setObjectName("MainWindow")

MainWindow.resize(970, 575)

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)

self.textBrowser.setGeometry(QtCore.QRect(300, 10, 641, 521))

self.textBrowser.setMouseTracking(False)

self.textBrowser.setObjectName("textBrowser")

self.textBrowser.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)

self.textBrowser.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)

self.widget = QtWidgets.QWidget(self.centralwidget)

self.widget.setGeometry(QtCore.QRect(10, 40, 281, 29))

self.widget.setObjectName("widget")

self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)

self.horizontalLayout.setContentsMargins(0, 0, 0, 0)

self.horizontalLayout.setObjectName("horizontalLayout")

# start com

self.lineEdit = QtWidgets.QLineEdit(self.widget)

self.lineEdit.setObjectName("lineEdit")

self.horizontalLayout.addWidget(self.lineEdit)

self.pushButton = QtWidgets.QPushButton(self.widget)

self.pushButton.setObjectName("pushButton")

self.horizontalLayout.addWidget(self.pushButton)

self.widget1 = QtWidgets.QWidget(self.centralwidget)

self.widget1.setGeometry(QtCore.QRect(40, 440, 221, 51))

self.widget1.setObjectName("widget1")

self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget1)

self.horizontalLayout_3.setContentsMargins(0, 0, 0, 20)

self.horizontalLayout_3.setObjectName("horizontalLayout_3")

self.pushButton_5 = QtWidgets.QPushButton(self.widget1)

self.pushButton_5.setFlat(False)

self.pushButton_5.setObjectName("pushButton_5")

self.horizontalLayout_3.addWidget(self.pushButton_5)

self.pushButton_4 = QtWidgets.QPushButton(self.widget1)

self.pushButton_4.setObjectName("pushButton_4")

self.horizontalLayout_3.addWidget(self.pushButton_4)

self.widget2 = QtWidgets.QWidget(self.centralwidget)

self.widget2.setGeometry(QtCore.QRect(1, 123, 301, 271))

self.widget2.setObjectName("widget2")

self.verticalLayout = QtWidgets.QVBoxLayout(self.widget2)

self.verticalLayout.setContentsMargins(0, 0, 0, 0)

self.verticalLayout.setObjectName("verticalLayout")

self.label = QtWidgets.QLabel(self.widget2)

self.label.setObjectName("label")

self.verticalLayout.addWidget(self.label)

self.checkBox_6 = QtWidgets.QCheckBox(self.widget2)

self.checkBox_6.setEnabled(True)

font = QtGui.QFont()

font.setBold(True)

font.setWeight(75)

self.checkBox_6.setFont(font)

self.checkBox_6.setAutoFillBackground(False)

self.checkBox_6.setChecked(True)

self.checkBox_6.setTristate(False)

self.checkBox_6.setObjectName("checkBox_6")

self.verticalLayout.addWidget(self.checkBox_6)

self.checkBox_2 = QtWidgets.QCheckBox(self.widget2)

self.checkBox_2.setObjectName("checkBox_2")

self.verticalLayout.addWidget(self.checkBox_2)

self.checkBox_5 = QtWidgets.QCheckBox(self.widget2)

self.checkBox_5.setObjectName("checkBox_5")

self.verticalLayout.addWidget(self.checkBox_5)

self.checkBox_4 = QtWidgets.QCheckBox(self.widget2)

self.checkBox_4.setObjectName("checkBox_4")

self.verticalLayout.addWidget(self.checkBox_4)

self.checkBox_3 = QtWidgets.QCheckBox(self.widget2)

self.checkBox_3.setObjectName("checkBox_3")

self.verticalLayout.addWidget(self.checkBox_3)

self.checkBox = QtWidgets.QCheckBox(self.widget2)

self.checkBox.setObjectName("checkBox")

self.verticalLayout.addWidget(self.checkBox)

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0, 0, 970, 25))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar = QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.lineEdit.setText(_translate("MainWindow", "请输入当前系统密码"))

self.pushButton.setText(_translate("MainWindow", "PushButton"))

self.lineEdit.selectAll()

self.lineEdit.setFocus()

self.pushButton.setText(_translate("MainWindow", "启动串口"))

self.pushButton.clicked.connect(self.startCom)

# 读取按钮和取消按钮功能连接

# 启动线程

thread = BackendThread()

thread.sec_changed_signal.connect(self.update)

self.pushButton_5.setText(_translate("MainWindow", "开始读取"))

self.pushButton_5.clicked.connect(lambda: thread.start())

self.pushButton_4.setText(_translate("MainWindow", "停止读取"))

self.pushButton_4.clicked.connect(lambda : thread.terminate())

self.label.setText(_translate("MainWindow", "选择串口位置:"))

self.checkBox_6.setText(_translate("MainWindow", "All"))

self.checkBox_2.setText(_translate("MainWindow", "Head"))

self.checkBox_5.setText(_translate("MainWindow", "Wheel"))

self.checkBox_4.setText(_translate("MainWindow", "Arm"))

self.checkBox_3.setText(_translate("MainWindow", "Wheel"))

self.checkBox.setText(_translate("MainWindow", "Query"))

def startCom(self):

pass_word = self.lineEdit.text()

shell_cmd = 'cd /dev && sudo chmod 777 ttyUSB*'

child = pexpect.spawn('/bin/bash', ['-c', shell_cmd]).sendline(pass_word)

@staticmethod

def readData():

pos = True

with serial.Serial('/dev/ttyUSB0', '256000') as ser:

with open("shoulder.txt", 'a') as f:

while True:

s = ser.read()

h = hex(ord(s))

if h == '0xff' and pos:

f.write('\n')

f.write(time.strftime("%m-%d %H:%M:%S: ", time.localtime()))

f.write(h + " ")

pos = False

else:

f.write(

h + " "

)

pos = True

def update(self, sec):

self.readData()

text_edit = QPlainTextEdit()

text = open('shoulder.txt').read()

self.textBrowser.setPlainText(text)

if __name__ == "__main__":

app = QtWidgets.QApplication(sys.argv)

ex = Ui_MainWindow()

w = QtWidgets.QMainWindow()

ex.setupUi(w)

w.show()

sys.exit(app.exec_())

因为我要实时读取串口的数据存到一个文件,但将数据显示到textbrower时就会在readData()阻塞,不知道怎么办?

python pyqt5 线程 暂停 重启_PyQt5 线程阻塞?相关推荐

  1. python pyqt5 线程 暂停 重启_如何在PyQT5中暂停/播放线程?

    我正在用PyQT5制作一个简单的GUI程序.在 但现在我遇到了一些关于线的问题.在 我只做了一个简单的测试程序,比如bottom: 该程序只是试图将数字附加到textbox,但它崩溃了.在 我不知道为 ...

  2. pythonpyqt5线程暂停重启时间_PyQT5 停止死循环线程(监控文件是否修改)

    说明 在软件使用中,大多数需要使用多线程来实现,并且需要线程长久执行,所以就需要用到死循环,哪如何停止该死循环线程呢? 监控文件是否修改 主界面代码import sys import os from ...

  3. java线程暂停_Java之线程停止

    public void run() { while(true){ someWork(); if(finished){ break; } try { Thread.sleep(10000); } cat ...

  4. Python 多线程、守护进程、同时运行最大线程数、锁、线程阻塞(线程暂停和继续)

    python 多线程的使用笔记 1.多线程的基本用法 (1)简单任务多线程的开启方式 from threading import Thread import timedef target(name, ...

  5. python多线程threading之阻塞线程(join)线程同步和守护线程(setDaemon(True))实例详解

    一.多线程(主线程和子线程同时执行) 1.主线程是程序本身,看不到的,主线程和子线程没有依赖关系,同步执行的,若主线程先执行完,会等子线程执行完毕,程序结束 2.启动一个线程就是把一个函数传入并创建T ...

  6. python 进程池阻塞和非阻塞_python 之 并发编程(进程池与线程池、同步异步阻塞非阻塞、线程queue)...

    9.11 进程池与线程池 池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务 池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO ...

  7. python线程暂停_在python中暂停一个线程和另一个线程

    我正在研究如何在python中执行多线程(2个线程).在 我要他们中的一个一直在读串行端口.读取每个帧并将其保存到数据库中.我已经做了一个脚本来做这个.在 对于第二个,我希望它监听一个套接字端口.当它 ...

  8. python线程启动和暂停_threading之线程的开始,暂停和退出

    背景 利用多线程实现一个开关功能,需要对产生的线程进行管理(例如:开启,暂停,关闭等操作). 实现代码 任务脚本: #!/usr/bin/python3 # _*_ coding: utf-8 _*_ ...

  9. python线程的暂停与继续_线程暂停与继续实现

    C#线程暂停与继续解决方案 昨天, 老师要我们每个人交一个关于黑客方面的程序,想了半天发现端口扫描工具好像好写点,从昨天写到今天基本快完成了,给大家看下效果,不要笑话我哦哦(~~) 图1 端口扫描器 ...

最新文章

  1. 装饰模式(Decorator Pattern)
  2. 程序员娶妻子的经典准则
  3. CSDN问答频道“华章杯”7月排行榜活动开始,丰厚奖品等你拿
  4. noip2006总结
  5. 《我的侠客》主策划何铮:如何打出武侠游戏的新招
  6. JavaScript程序开发(十四)—函数声明与函数表达式
  7. 毕设题目:Matlab飞行器
  8. 使用java映射ipv4,ipv6到阿里DDNS,适用于黑白群晖或其他用途
  9. 如何打造一个高效的研发团队
  10. 超全超详细的安装nvidia显卡驱动教程
  11. 计算机拓扑结构网状图,网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
  12. 下载苹果官网视频的方式
  13. 成都敏之澳:拼多多投诉问题类型客服怎么做?
  14. 聚观早报 | 嘀嗒出行重启赴港IPO;饿了么到店业务将与高德合并
  15. 频率选择性衰落、时间选择性衰落
  16. MCE公司:抗真菌新策略:抑制线粒体磷酸盐转运
  17. JAVA从入门到放弃(设置java环境)
  18. VOS3000,呼叫中心服务器和软交换状态显示红灯实际后台服务都在线的原因
  19. c语言基础编程题文库,C语言基础编程题资料.doc
  20. 医药公司的绩效管理体系搭建案例

热门文章

  1. 基于Keras的卷积神经网络用于猫狗分类(进行了数据增强)+卷积层可视化
  2. 李航《统计学习方法》笔记
  3. 使用 mitmproxy + python 做拦截代理
  4. Java8 Stream详解~归约(reduce)
  5. ThreadLocal与Synchronized的用法
  6. 畅玩4c刷android 9.0,华为畅玩4C电信版 CyanogenMod 13.0_Android_6.0.1 【HRT_chiwahfj】
  7. 计算机组装没步的组件,计算机组装教案.doc
  8. [网络]------长连接和短连接
  9. python文件只读模式_Python脚本去除文件的只读性操作
  10. php获取js函数返回的值_最全最详细的PHP面试题(带有答案)