PyQt5窗口滚动显示最新数据

PyQt5窗口滚动显示最新数据

如图所示

显示数据

显示窗口使用的为QTextBrowser()
刷新显示数据很简单,在单独一个新线程中进行填充数据即可

self.TextView.append(buf_gbk)

buf_gbk是需要显示的数据
使用append方法追加显示,注意此处不要使用setText()方法,setText()只能显示一次,不能追加数据,多次调用会异常崩掉
使用append()方法追加显示后效果如下
PyQt5窗口滚动显示最新数据_第1张图片
但是!咱们要做的是个串口数据监视窗口,数据肯定需要实时显示最新的
那么仅仅追加就不够了

实时显示最新数据

其实显示最新也很简单的
最开是找了想了很多方法比如直接设置窗口显示最新数据什么的都没管用(可能还是我太菜了吧)
最后用最简单的方式解决了
在每次追加数据之后把光标移动指最后一行即可
就一行

self.TextView.moveCursor(self.TextView.textCursor().End)  # 移动光标到底部

全部代码

    # 读串口线程
    def __textUpdateThread(self):
        while self.__connectBuf:
            try:
                # 阻塞式读串口
                buf = self.serialBuf.ser.readline()
                if buf is not None:
                    buf_gbk = buf.decode("GBK")
                    self.TextView.append(buf_gbk)
                    self.TextView.moveCursor(self.TextView.textCursor().End)  # 移动光标到底部
                    print(buf_gbk)

            except Exception as e:
                self.serial_err.emit(e.args[0])  # 发送异常信号
                print(e.args[0])
                return 0

这里我是直接把串口数据读取跟界面追加显示放在一起了(这样貌似会有点bug,但这里懒得改了)
串口读取完成后直接追加到显示窗口,然后把光标移动至最后一行,就能实现本文开头那样的效果了。
记得要单独线程读取和刷新,不然会阻塞然后崩掉。

结尾

软件全部代码放在了Gitee
功能还未完成,有时间会不断更新
仓库链接

你可能感兴趣的:(PyQt5,python,pyqt,物联网)