详解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解析xml模块封装代码
Feb 07 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
Python配置mysql的教程(推荐)
Oct 13 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
Python线上环境使用日志的及配置文件
Jul 28 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
Django Auth用户认证组件实现代码
Oct 13 Python
Python机器学习之基础概述
May 19 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 mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
简单的PHP多图上传小程序代码
2011/07/17 PHP
解析如何屏蔽php中的phpinfo()函数
2013/06/06 PHP
php使用exec shell命令注入的方法讲解
2013/11/12 PHP
php使用正则验证中文
2016/04/06 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
使用JavaScriptCore实现OC和JS交互详解
2017/03/28 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
python+Django+apache的配置方法详解
2016/06/01 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
python字典与json转换的方法总结
2020/12/28 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
意大利体育用品网上商城:Nencini Sport
2016/08/18 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python