详解PyQt5中textBrowser显示print语句输出的简单方法
开发python程序处理大数据量的时候,少不了使用print语句看看输出结果;长时间处理数据时用print输出处理进展情况。使用PyQt5开发了UI界面后,本能地想让已自己调试好的py代码中的print输出到UI的textBrowser中显示出来。在CSDN上查了不少结果,一般都是使用多线程。我对多线程研究不多,就采用了变通办法,效果还挺好。
在Ui界面程序(Ui_startaml.py)中设置textBrowser用于显示程序输出信息,并自己定义代码(defprintf),以后将.py程序中凡是用print的地方改用ui.printf()调用就OK.
#-*-coding:utf-8-*-
#Formimplementationgeneratedfromreadinguifile'D:\aml\startaml.ui'
#Createdby:PyQt5UIcodegenerator5.11.3
#WARNING!Allchangesmadeinthisfilewillbelost!
fromPyQt5importQtCore,QtGui,QtWidgets
classUi_MainWindow(object):
defsetupUi(self,MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setEnabled(True)
MainWindow.resize(490,390)
MainWindow.setMaximumSize(QtCore.QSize(490,390))
font=QtGui.QFont()
#.......
#........中间自动生成代码省去....
#........
self.textBrowser=QtWidgets.QTextBrowser(self.centralWidget)
self.textBrowser.setGeometry(QtCore.QRect(10,109,471,221))
self.textBrowser.setMaximumSize(QtCore.QSize(16777215,16777215))
font=QtGui.QFont()
font.setFamily("宋体")
self.textBrowser.setFont(font)
self.textBrowser.setObjectName("textBrowser")
#..........其它语句
defprintf(self,mypstr):
###
自定义类print函数,借用c语言printf
Mypstr:是待显示的字符串
###
self.textBrowser.append(mypstr)#在指定的区域显示提示信息
self.cursor=self.tetxBrowser.textCursor()
self.tetxBrowser.moveCursor(self.cursor.End)#光标移到最后,这样就会自动显示出来
QtWidgets.QApplication.processEvents()#一定加上这个功能,不然有卡顿
其它py程序如何去调用classUi_MainWindow(object)类呢,比如:
#-*-coding:utf-8-*-
"""
ModuleimplementingMainWindow.
这是ui界面主程序,它将调用已调试成功的.py程序。如runget.py
"""
fromPyQt5importQtWidgets
fromPyQt5.QtCoreimportpyqtSlot
fromPyQt5.QtWidgetsimportQMainWindow
fromUi_startamlimportUi_MainWindow
importsys
sys.path.append('src')
fromrungetimportrun_get#单独调试成功代码,可将正常print语句稍加改造
classMainWindow(QMainWindow,Ui_MainWindow):
"""
Classdocumentationgoeshere.
"""
def__init__(self,parent=None):
"""
Constructor
@paramparentreferencetotheparentwidget
@typeQWidget
"""
super(MainWindow,self).__init__(parent)
self.setupUi(self)
self.graphicsPsw.mousePressEvent=self.chpsw_clicked#点mouse调用改密码功能。
defchpsw_clicked(self,e):
"""
changepsw
"""
print('changepswrecord')
def_runget(self,ui):#此处调用单独开发的py代码。
run_get(ui)#是runget.py中主程序的入口方法。
@pyqtSlot()
defon_pushBut_get_clicked(self):
"""
Slotdocumentationgoeshere.
这是槽函数,调用事先开发好的模块
"""
#TODO:notimplementedyet
self.printf("\n自动捕获信息分析数据,您等着瞧!")
self._runget(ui)#传入ui实例是关键
#...........省略非相关代码.....
if__name__=="__main__":
#这是Ui界面主程序,注意ui这个实例化对象,就OK了
app=QtWidgets.QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
ui=MainWindow()
ui.show()
sys.exit(app.exec_())
run_get(ui)是单独的调试成功的runget.py程序中的主入口,简化如下:
#!C:\\Anaconda3\\python.exe
#-*-coding:utf-8-*-
runget.py
"""
CreatedonWedMar1315:32:502019
@author:yuce_hz2019年3月11日,runget.py
""""
importre
importos
importtime
importrequests
fromrequests.exceptionsimportRequestException
fromlxmlimportetree
#..........
#......省略无关代码....
#........
defrun_get(ui):
#1全局变量,并打开设置
glob_var_chrome()#
#2.联网
if(login_nsso(gl_url,gl_user,gl_pass)!='OK'):
#print("登录系统不成功,无法进行下去,检查网络正常后,可再运行。")#这是正常的print代码
ui.printf("登录系统不成功,无法进行下去,检查网络正常后,可再运行。"#这是知适应ui界面输出的printf
browser.quit()
#............简化代码.........
#.....................
if__name__=='__main__':
run_get()#单独运行的调用时不用传ui参数,run_get(ui),是应对UI界面来调用的。
到此这篇关于详解PyQt5中textBrowser显示print语句输出的简单方法的文章就介绍到这了,更多相关PyQt5textBrowser显示print内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!