开发python程序处理大数据量的时候,少不了使用print语句看看输出结果;长时间处理数据时用print输出处理进展情况。使用pyqt5开发了ui界面后,本能地想让已自己调试好的py代码中的print输出到ui的textbrowser中显示出来。在csdn上查了不少结果,一般都是使用多线程。我对多线程研究不多,就采用了变通办法,效果还挺好。
在ui界面程序(ui_startaml.py)中设置textbrowser用于显示程序输出信息,并自己定义代码(def printf ),以后将.py程序中凡是用print的地方改用ui.printf()调用就ok.
# -*- coding: utf-8 -*- # form implementation generated from reading ui file 'd:amlstartaml.ui' # created by: pyqt5 ui code generator 5.11.3 # warning! all changes made in this file will be lost! from pyqt5 import qtcore, qtgui, qtwidgets class ui_mainwindow(object): def setupui(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") #..........其它语句 def printf(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程序如何去调用class ui_mainwindow(object) 类呢,比如:
# -*- coding: utf-8 -*- """ module implementing mainwindow. 这是ui界面主程序,它将调用已调试成功的.py程序。如runget.py """ from pyqt5 import qtwidgets from pyqt5.qtcore import pyqtslot from pyqt5.qtwidgets import qmainwindow from ui_startaml import ui_mainwindow import sys sys.path.append('src') from runget import run_get #单独调试成功代码,可将正常print语句稍加改造 class mainwindow(qmainwindow, ui_mainwindow): """ class documentation goes here. """ def __init__(self, parent=none): """ constructor @param parent reference to the parent widget @type qwidget """ super(mainwindow,self).__init__(parent) self.setupui(self) self.graphicspsw.mousepressevent=self.chpsw_clicked #点mouse调用改密码功能。 def chpsw_clicked(self, e): """ change psw """ print('change psw record') def _runget(self,ui): #此处调用单独开发的py代码。 run_get(ui) #是 runget.py 中主程序的入口方法。 @pyqtslot() def on_pushbut_get_clicked(self): """ slot documentation goes here. 这是槽函数,调用事先开发好的模块 """ # todo: not implemented yet 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 """ created on wed mar 13 15:32:50 2019 @author: yuce_hz 2019年3月11日,runget.py """" import re import os import time import requests from requests.exceptions import requestexception from lxml import etree #.......... #......省略无关代码.... #........ def run_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语句输出的简单方法的文章就介绍到这了,更多相关pyqt5 textbrowser显示print内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/598278.html