0

介绍

我是 Python 的绝对初学者,我正在编写一个程序来读取刻度的输出并在小部件中实时显示它。我将 QTextStream 与 PySide 和 Python 2.7.14 一起使用。

问题描述

基本程序以 9600 的波特率监听 USB 端口 /dev/ttyUSB0,并显示从刻度 KERN PCB 100-3 读取的值。秤通过 RS232/USB 转换器连接到 PC 并设置为 AU PC,因此称重值会自动连续发送。到目前为止,该程序仅在控制台中显示值。编码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import serial

# define variables
global valueScale, unitScale, replyScale

# open scale port
scale_port = serial.Serial("/dev/ttyUSB0", 9600)

# read usb port
while True:
    if (scale_port.inWaiting() > 0):
        replyScale = scale_port.read(18)
        valueScale = float(replyScale[3:12])
        unitScale = replyScale[13]
        print valueScale, unitScale

我发现了一个关于使用QTextStream 和标准输入的类似线程,并根据我的需要进行了修改。编码:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

from PySide.QtGui import *
from PySide.QtCore import *
import sys
import serial

# open scale port
scale_port = serial.Serial("/dev/ttyUSB0", 9600)

class Widget(QWidget):

     def __init__(self, parent=None):
         super(Widget, self).__init__(parent)
         self.setupUi()
         self.setupButtonSlots()
         self.setupStreams()

     def setupUi(self):
         self.setLayout(QVBoxLayout())
         self.pbReadQt = QPushButton("Read console (using QTextstream)", self)
         self.labelReadQt = QLabel('Console output: ', self)

         self.layout().addWidget(self.pbReadQt)
         self.layout().addWidget(self.labelReadQt)

     def setupButtonSlots(self):
         self.pbReadQt.clicked.connect(self.readQt)

     def setupStreams(self):
         self.stdin = QFile()
         self.stdin.open(0, QIODevice.OpenMode(QIODevice.OpenModeFlag.ReadOnly))
         self.stdout = QFile()
         self.stdout.open(1, QIODevice.OpenMode(QIODevice.OpenModeFlag.WriteOnly))   # orginal WriteOnly

         self.inStream = QTextStream(self.stdin)
         self.outStream = QTextStream(self.stdout)

     def readQt(self):
         global valueScale, unitScale, replyScale
         while True:
            if (scale_port.inWaiting() > 0):
                replyScale = scale_port.read(18)
                valueScale = float(replyScale[3:12])
                unitScale = replyScale[13]
                print valueScale
                txt = self.outStream.readLine()
                self.labelReadQt.setText('Scale output: %s' % txt)

if __name__ == '__main__':
     import sys
     app = QApplication(sys.argv)
     w = Widget()
     w.show()
     sys.exit(app.exec_())

运行程序,控制台会显示实时print()语句以及消息QIODevice::read: WriteOnly device,并将其更改OpenModeFlagReadOnly仅给出第一次读数。

问题

它根本不显示控制台输出的小部件。问题出在哪里?

4

0 回答 0