详解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正则表达式操作指南(re使用)
Sep 06 Python
介绍Python中的__future__模块
Apr 27 Python
python实现通过代理服务器访问远程url的方法
Apr 29 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
python中异常报错处理方法汇总
Nov 20 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Python实现的生成格雷码功能示例
Jan 24 Python
详解python配置虚拟环境
Apr 08 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
从列表或字典创建Pandas的DataFrame对象的方法
Jul 06 Python
Django密码存储策略分析
Jan 09 Python
opencv python如何实现图像二值化
Feb 03 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 strtr() 函数使用说明
2008/11/21 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP实现单条sql执行多个数据的insert语句方法
2019/10/11 PHP
javascript时间函数基础介绍
2013/03/28 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
jQuery如何防止Ajax重复提交
2016/10/14 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
vue 文件目录结构详解
2017/11/24 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
python中模块查找的原理与方法详解
2017/08/11 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
python实现月食效果实例代码
2019/06/18 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
师恩难忘教学反思
2014/04/27 职场文书
文明生主要事迹
2014/05/25 职场文书
给下属加薪申请报告
2015/05/15 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python
sql字段解析器的实现示例
2021/06/23 SQL Server
Python 正则模块详情
2021/11/02 Python