详解PyQt5中textBrowser显示print语句输出的简单方法


Posted in Python onAugust 07, 2020

开发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:\aml\startaml.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内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
使用PDB简单调试Python程序简明指南
Apr 25 Python
Python上传package到Pypi(代码简单)
Feb 06 Python
深入解答关于Python的11道基本面试题
Apr 01 Python
ubuntu中配置pyqt4环境教程
Dec 27 Python
Python入门之后再看点什么好?
Mar 05 Python
详解Django+Uwsgi+Nginx的生产环境部署
Jun 25 Python
python实现flappy bird小游戏
Dec 24 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python 提高开发效率的5个小技巧
Oct 19 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
PyQt5的相对布局管理的实现
Aug 07 #Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 #Python
Python configparser模块封装及构造配置文件
Aug 07 #Python
Python logging模块进行封装实现原理解析
Aug 07 #Python
Python定时任务APScheduler安装及使用解析
Aug 07 #Python
Python如何解除一个装饰器
Aug 07 #Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 #Python
You might like
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
php工具型代码之印章抠图
2018/07/18 PHP
Javascript 对象的解释
2008/11/24 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
2010/12/02 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
利用forever和pm2部署node.js项目过程
2017/05/10 Javascript
react中fetch之cors跨域请求的实现方法
2018/03/14 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
Python检测QQ在线状态的方法
2015/05/09 Python
Python算法应用实战之队列详解
2017/02/04 Python
python中lambda()的用法
2017/11/16 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
css3高级选择器使用方法
2013/12/02 HTML / CSS
巴西网上药房:onofre
2016/11/21 全球购物
实体的生命周期
2013/08/31 面试题
毕业生的求职信范文分享
2013/12/04 职场文书
代领毕业证委托书
2014/08/02 职场文书
药店促销活动策划方案
2014/08/24 职场文书
作风建设年活动总结
2014/08/27 职场文书
学校党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
歌舞青春观后感
2015/06/10 职场文书
交流会主持词
2015/07/02 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL