详解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提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python操作redis和mongoDB的方法
Dec 19 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
Python 如何反方向迭代一个序列
Jul 28 Python
给numpy.array增加维度的超简单方法
Jun 02 Python
Python Django获取URL中的数据详解
Nov 01 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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 引用是个坏习惯
2010/03/12 PHP
帝国cms目录结构分享
2015/07/06 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
js传值 判断
2006/10/26 Javascript
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
Puppeteer使用示例详解
2019/06/20 Python
Python的pygame安装教程详解
2020/02/10 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
学校安全检查制度
2014/01/27 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
公司门卫岗位职责
2015/04/13 职场文书
八年级物理教学反思
2016/02/19 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript
Python if else条件语句形式详解
2022/03/24 Python
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python