91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyQt5 QSerialPort子線程操作的實現

發布時間:2020-10-02 15:18:33 來源:腳本之家 閱讀:230 作者:云中蝦 欄目:開發技術

環境:

python3.6 pyqt5

只是簡單的一個思路,請忽略脆弱的異常防護:

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
from PyQt5.QtCore import pyqtSignal, QThread, QObject, QTimer
class SerialWork(QObject):
  def __init__(self):
    super().__init__()

  def init(self):
    self.com = QSerialPort()
    self.com.setPortName('COM7')
    self.com.setBaudRate(115200) 
    if self.com.open(QSerialPort.ReadWrite) == False:
      return
    self.readtimer = QTimer()
    self.readtimer.timeout.connect(self.readData)
    self.readtimer.start(100) 

  def readData(self):
    revData = self.com.readAll()
    revData = bytes(revData)
    print('%d read' % len(revData))

class PyQt_Serial(QWidget):
  def __init__(self):
    super().__init__()
    self.serialthread = QThread()
    self.serialwork = SerialWork()
    self.serialwork.moveToThread(self.serialthread)
    self.serialthread.started.connect(self.serialwork.init)
    self.serialthread.start()

if __name__ == '__main__':
  app = QApplication(sys.argv)
  win = PyQt_Serial()
  win.show()
  sys.exit(app.exec_()) 

需要注意的地方:

1、對QSerialPort的讀寫操作需要在同一個線程,不能跨線程操作

2、serialwork內不能有死循環,原因可能是死循環阻塞了串口接收事件的傳遞,導致readall函數一直讀不到數據。如果非要加入死循環,在循環內加入QApplication.processEvents()可以讀到串口數據

3、通過這次子線程操作QSerialPort的例程大致了解了兩種QThread使用的陣營:run和moveToThread,哈哈

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

荔波县| 建平县| 石屏县| 武宣县| 谢通门县| 小金县| 麻栗坡县| 盐源县| 隆安县| 闸北区| 伊宁县| 新丰县| 响水县| 天等县| 墨玉县| 连城县| 威远县| 伽师县| 布尔津县| 竹溪县| 广元市| 榆中县| 醴陵市| 东安县| 云阳县| 太白县| 红桥区| 两当县| 临沧市| 项城市| 贵阳市| 万年县| 封丘县| 巨鹿县| 静宁县| 济阳县| 涿鹿县| 惠来县| 定州市| 奉新县| 萨迦县|