详解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 相关文章推荐
bat和python批量重命名文件的实现代码
May 19 Python
python与php实现分割文件代码
Mar 06 Python
python先序遍历二叉树问题
Nov 10 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
Python 离线工作环境搭建的方法步骤
Jul 29 Python
解决Mac下使用python的坑
Aug 13 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
使用AJAX和Django获取数据的方法实例
Oct 25 Python
Python实现简单得递归下降Parser
May 02 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
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python随机生成一个6位的验证码代码分享
2015/03/24 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
python远程邮件控制电脑升级版
2019/05/23 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
Python插件机制实现详解
2020/05/04 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
html5实现图片转圈的动画效果——让页面动起来
2017/10/16 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
毕业生自荐书模版
2014/01/04 职场文书
事业单位辞职信范文
2014/01/19 职场文书
研究生毕业鉴定
2014/01/29 职场文书
公司新年寄语
2014/04/04 职场文书
销售团队口号大全
2014/06/06 职场文书
张思德观后感
2015/06/09 职场文书
Django如何与Ajax交互
2021/04/29 Python
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技