最近笔者在做一个pyqt5的界面,由于在日常生活中,一些实际运用的场合都需要对数据进行实时的刷新,例如对某个数值的监控,水温,室温的监控等等,都需要实时的刷新控件显示的数据。
对于实现这样的一种功能,pyqt5在面板生成的同时就固定住了UI中的数据,例如我们产生一个QLineEdit控件,然后布局在面板上,但是控件中的数据是固定的,如果这个数据是实时更新的,想要改变空间中的数据时,就要去刷新面板,pyqt5提供了一个QApplication.processEvents()的命令来刷新整个面板,但是要完成数据的动态显示,则要不断的去调用这个函数来刷新面板,同样,以使用多线程去刷新面板上的数据,但是通过搜索各种大佬的博客等,发现了pyqt5多线程刷新的各种问题,即大佬主要使用多线程来对控件显示的数据进行实时的刷新。本文旨在演示一种使用定时器来刷新控件实现数据的方法,具体代码如下:
导入系统 进口随机 进口numpy np 从进口睡眠时间 进口日期时间 从PyQt5进口QtWidgets 从PyQt5。QtCore进口* 从PyQt5。QtGui进口* 从PyQt5。QtWidgets进口*
定义数据生成线程,该线程主要目的是不断生成随机数,用来模拟不断采集数据
类WorkThread (QThread): #初始化线程 def __int__(自我): 超级(WorkThread自我). __init__ () #线程运行函数 def运行(自我): 而真正的: 全球T_value 全球P_value T_value=https://www.yisu.com/zixun/random.randint (200225) P_value=random.randint (150200) 打印(T_value P_value) 睡眠(3)
<强>定义显示面板强>
类plotwindows (QtWidgets.QWidget): def __init__(自我): 超级(plotwindows自我). __init__ () 布局=QFormLayout () 自我。edita3=QLineEdit () 自我。edita4=QLineEdit () 自我。edita5=QLineEdit () 布局。addRow(“数值”,self.edita3) 布局。addRow (" B数值”,self.edita4) 布局。addRow (“C数值”,self.edita5) self.setLayout(布局) self.Mytimer ()
<强>定义定时器,使用定时器每隔一段时间来出发更新函数,从而刷新数据强>
def定时器(自我): 计时器=QTimer(自我) timer.timeout.connect (self.update) timer.start (100)
<>强刷新函数强>
def(自我更新): self.edita3.setText (str (T_value)) self.edita4.setText (str (P_value)) 全球SUM_value SUM_value=https://www.yisu.com/zixun/T_value + P_value self.edita5.setText (str (SUM_value)) def主窗口(): 应用=QtWidgets.QApplication (sys.argv) 新=plotwindows () new.show () sys.exit (app.exec_ ()) if __name__==癬_main__”: workThread=workThread () workThread.start () 主窗口() >之前
可以看的到,子线程不断的生成数据,同时定时器以一种不断调用刷新函数的方法来实现对控件显示数据的刷新,这样就不用再建立新线程的情况下实现刷新控件显示的功能。
以上这篇Python3和pyqt5实现控件数据动态显示方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Python3和pyqt5实现控件数据动态显示方式