详解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 相关文章推荐
python删除文件示例分享
Jan 28 Python
Python修改MP3文件的方法
Jun 15 Python
Python出现segfault错误解决方法
Apr 16 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
python添加模块搜索路径方法
Sep 11 Python
python opencv 图像尺寸变换方法
Apr 02 Python
python实现可视化动态CPU性能监控
Jun 21 Python
TensorFlow实现模型评估
Sep 07 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
利用Python实现Shp格式向GeoJSON的转换方法
Jul 09 Python
python简单利用字典破解zip文件口令
Sep 07 Python
python 生成器需注意的小问题
Sep 29 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+redis消息队列实现抢购功能
2018/02/08 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
javascript 一些用法小结
2009/09/11 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
js常用排序实现代码
2010/12/28 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
three.js实现围绕某物体旋转
2017/01/25 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
在Python下尝试多线程编程
2015/04/28 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
python 文件操作删除某行的实例
2017/09/04 Python
python 全局变量的import机制介绍
2017/09/07 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
python中列表的含义及用法
2020/05/26 Python
python中K-means算法基础知识点
2021/01/25 Python
C语言面试题
2015/10/30 面试题
什么是GWT的Module
2013/01/20 面试题
秘书专业自荐信范文
2013/12/26 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
爱情检讨书大全
2014/01/21 职场文书
音乐教学反思
2014/02/02 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
高中学生自我评价范文
2014/09/23 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
如何基于python实现单目三维重建详解
2022/06/25 Python
MySQL存储过程及语法详解
2022/08/05 MySQL