python pyqt5 线程 暂停 重启_PyQt5 线程阻塞?

读取串口数据实时显示到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()阻塞,不知道怎么办?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/507213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

yolov3 python_TensorFlow的YOLOv3和YOLOv3_tiny

git clone https://github.com/Huangdebo/YOLOv3_tiny_TensorFlow.git11.简介添加YOLOv3_tiny和数据增强(剪切,变亮,更改饱和度)2.要求tensorflow> 1.8.0(更低版本也可以工作)OpenCV的Python3.运行演示(1)使用ckpt文件的单图像测试演示:p…

用python玩转数据测试与作业_用Python玩转数据分析10

MOOC上的课程《用Python玩转数据分析》的学习笔记。数据探索与预处理之数据清洗数据探索包括检查数据错误,了解数据分布特征和内在规律数据预处理包括数据清洗,数据集成(integration),数据变换,数据规约(reduction)本次主要讲解数…

excel中空格去不掉java_在Apache POI中跳过空白Excel单元格

我是Apache POI的新手,但我想做的是通过Excel文件(.xls)读取并将其放入ArrayList进行存储,以便稍后进行操作 . 我可以得到整张纸,但我的问题就在于:我得到整张纸(约54183行) .我想跳过空白的单元格,它是类型3.由于某种…

python代替javascript_Pyjamas - 用python代替javascript编写基于浏览器的应用

如果能用python代替Javascript编写基于浏览器的应用,该有多好啊。但是,Javascript是唯一一种能在浏览器里执行的语言(Flash或Silverlight除外)。换个思路,先用Python编写代码,然后在通过编译器转为为Javascript脚本,这…

java unreported exception_Java异常处理

大家好,欢迎来到乐字节小乐的Java技术分享园地在计算机程序运行的过程中,总是会出现各种各样的错误。有一些错误是用户造成的,比如,希望用户输入一个int类型的年龄,但是用户的输入是abc:// 假设用户输入了a…

数据通信原理_同网段主机通信原理

本篇文章介绍数据通信中最基础,最关键的原理之一,两台通网段的主机如何通信。获得更多技术资料和免费学习视频,加入讨论群:752160765适合两台普通电脑之间,两台服务器之间,两台手机之间,电脑和打…

java jdk 未知错误_解决JAVA JDK安装出错的最常见问题,帮你排除困扰

一般来说,安装JAVA JDK的整个流程是很简单的,只要按照提示进行操作即可,就不会出现问题。但是呢,有小伙伴反映说,之前安装了JAVA JDK,进行卸载重装的时候出现错误提示,“正在进行另一Java安装”…

定义const变量是不可以赋值_JavaScript的声明方法和作用范围,常见的结构赋值类型和使用场景...

链接:https://juejin.im/post/5d9bf530518825427b27639d声明const命令:声明常量 let命令:声明变量作用作用域全局作用域函数作用域:function() {}块级作用域:{}作用范围var 命令在全局代码中执行const命令和let命令只能…

java社区活跃度_Java并发编程-活跃度问题

在讲问题前,我先说明一下什么是活跃度?一个并发应用及时执行的能力称作活跃度。我主要讲死锁问题,顺带介绍一下饥饿,弱响应性和活锁。死锁死锁这个词大家都听过,我先来罗列一下产生死锁的四个必要条件:(1) …

python post 上传文件_如何在 Python 中模拟 post 表单来上传文件

展开全部发个以前用urllib2模块来做的62616964757a686964616fe4b893e5b19e31333335343366class HTTPError(urllib2.HTTPDefaultErrorHandler):def __init__(self):self.errMsg def getErrorMsg(self):return self.errMsgdef http_error_default(self, req, fp, code, msg, hdr…

java8 di_java8 多个list对象用lambda求差集操作

业务场景:调用同步接口获取当前全部有效账户,数据库已存在部分账户信息,因此需要筛选同步接口中已存在本地的帐户。调用接口获取的数据集合List list response.getData().getItems();本地查询出来的账户集合List towList accountRepository…

怎么抓python程序的包_如何在AWS上部署python应用程序

如何在AWS上部署python应用程序,学姐呕心沥血亲自总结,亲测有效,比网上看网上大把大把的文档要快得多!作者:蕾学姐亚马逊云计算服务(Amazon Web Services,缩写为AWS),由亚…

【Hadoop】Zookeeper架构/特点

Zookeeper 中的角色主要有以下三类: Zookeeper需要保证高可用性和强一致性为了支持更多的客户端,需要增加更多Server,但是Server增多,意味着投票阶段延迟增大,会影响整个系统的性能。所以在3.3.0中ZK引入的新角色&…

json 反射java 实体_java反射实现javabean转json

BeantoModel->利用cglibBeanMap.create(src);直接将Bean装成Map,然后model._setAttrs(map)即可。ModeltoBean麻烦一点,最简单的方法是用json了。这个bean.dao.put应该是不对的,应该是bean.put吧,还有也不需要转换成map吧&#…

wpf 按钮样式_键盘 | 01.在程序集间引用样式

设置Button和TextBox的特定颜色和字体的样式和默认样式,并在程序集间引用。从零开始用WPF/C#开发一个键盘指示器项目完整开源、免费,不依赖第三方库编译好的先行版程序在微信公众号(香辣恐龙蛋)下载。文章同时发布在微信公众号(香辣恐龙蛋)、B站(香辣恐龙…

怎么去除表中的系统导出的字符_EXCEL非常有用的字符函数LEN、LENB,财务工作者的必备利器...

LEN函数与LENB函数是比较常用的函数,在实际中应用那是相当广的,尤其在财务工作中的使用频率是相当的高。我就一起看看实际工作中哪些地方用到了它。我们先简单说下它的用法,很简单,LEN(text)、LENB(text),两个用法是一…

laravel mysql视图_php-动态更新Laravel视图

我正在通过JS从API加载数据,将数据发送到Laravel控制器并将其保存到数据库中.加载所有Ajax之后,我想在master.blade的子视图/部分中显示数据-可以在页面加载完成后动态呈现视图,-稍后,我想更新数据库行并显示新的视图中的数据动态.//afater Ajax loading - update / display th…

python3打开excel_python3操作Excel (一)

安装:pip install openpyxlexcel表中有图像,需要安装pillow库。pip install Pillow代码:from openpyxl import Workbookwb Workbook()# grab the active worksheetws wb.active# Data can be assigned directly to cellsws[‘A1‘] 42# Rows can also…

java 获得json对象的属性值_JSON 获取属性值的方法

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习…

python常用包数据分析_数据分析领域常用的五个Python包

NumpyNumpy提供了两种基本的对象:ndarray和ufunc。ndarray是存储单一数据类型的多维数组,而ufunc是能够对数组进行处理的函数。Numpy的功能:N维数组,一种快速、高效使用内存的多维数组,他提供矢量化数学运算。可以不需…