详解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的类中动态添加属性与生成对象
Sep 17 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
Python 调用 Windows API COM 新法
Aug 22 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
python3连接MySQL8.0的两种方式
Feb 17 Python
python实现电子词典
Mar 03 Python
pandas分组聚合详解
Apr 10 Python
在主流系统之上安装Pygame的方法
May 20 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
Django项目创建及管理实现流程详解
Oct 13 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
星际争霸任务指南——神族
2020/03/04 星际争霸
php防注
2007/01/15 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
php生成curl命令行的方法
2015/12/14 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
JavaScript jQuery 中定义数组与操作及jquery数组操作
2015/12/18 Javascript
node网页分段渲染详解
2016/09/05 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
python开发中module模块用法实例分析
2015/11/12 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
网络公司美工设计工作个人的自我评价
2013/11/03 职场文书
运动会演讲稿50字
2014/08/25 职场文书
单位接收函格式
2015/01/30 职场文书
同学会邀请函模板
2015/01/30 职场文书
保送生自荐信范文
2015/03/26 职场文书
考研经验交流会策划书
2015/11/02 职场文书
初中班长竞选稿
2015/11/20 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python