PyQt 5でtextBrowserがprint文出力を表示する簡単な方法を詳しく説明します。


pythonプログラムを開発して大きなデータ量を処理する時、print文を使って出力結果を見てみます。データを長時間処理する場合はprintで進捗状況を出力します。PyQt 5を使ってUIインタフェースを開発した後、本能的に自分でデバッグしたpyコードの中のprintをUIのtextBrowserに出力したいです。CSDNで多くの結果を調べましたが、一般的にはマルチスレッドを使います。マルチスレッドについてはあまり研究していないので、融通の効かない方法を採用しました。
Uiインターフェースプログラム(Ui_startaml.pyではtextBrowserを設定してプログラム出力情報を表示し、自分でコードを定義し、以降はpyプログラムでは一般的にprintの場所をui.print()に変更して呼び出すと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("
, !") 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)は単独のデバッグに成功したrungett.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      。
ここで、PyQt 5のtextBrowserがprint文の出力を表示する簡単な方法についての記事を紹介します。PyQt 5 textBrowserに関する詳細な説明は以前の文章を検索してください。また、下記の関連記事をご覧ください。これからもよろしくお願いします。