详解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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
shell命令行,一键创建 python 模板文件脚本方法
Mar 20 Python
Python实现中一次读取多个值的方法
Apr 22 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
Python中的asyncio代码详解
Jun 10 Python
Django的models中on_delete参数详解
Jul 16 Python
python通过http下载文件的方法详解
Jul 26 Python
关于python导入模块import与常见的模块详解
Aug 28 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
Python+OpenCV实现在图像上绘制矩形
Mar 21 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安装攻略:常见问题解答(二)
2006/10/09 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
解析php中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
python使用any判断一个对象是否为空的方法
2014/11/19 Python
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
解决Django后台ManyToManyField显示成Object的问题
2019/08/09 Python
pywinauto自动化操作记事本
2019/08/26 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
俄罗斯达美乐比萨外送服务:Domino’s Pizza
2020/12/18 全球购物
《钱学森》听课反思
2014/03/01 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
设备售后服务承诺书
2014/05/30 职场文书
工厂车间标语
2014/06/19 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
2015年幼儿园师德师风建设工作总结
2015/10/23 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS