需求
如何把控制台中print的内容,输出在 QTextEdit组件中。
过程
# 注意!!!这个文件的导入形式一定是这样!!!!
from PyQt5.QtGui import QTextCursor
from main import f
import frozen_dir
from PyQt5.uic.properties import QtGui
import os, sys, re
from PyQt5.QtWidgets import QApplication, QWidget
from ui_Widget import Ui_Widget
from PyQt5.QtWidgets import QFileDialog
import os
import h5py
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSlot, QTimer, QEventLoop, QObject, pyqtSignal
#
base = frozen_dir.app_path()
mf4path = '{}\\src\\file\\mf4\\'.format(base)
mf43 = '{}\\src\\file\\mf4'.format(base)
h53 = '{}\\src\\file\\h5'.format(base)
csv3 = '{}\\src\\file\\csv'.format(base)
@pyqtSlot(str)
class Stream(QObject):
newText = pyqtSignal(str)
def write(self, text):
self.newText.emit(str(text))
QApplication.processEvents()
class QmyWidget(QWidget, Ui_Widget):
def __init__(self):
# 调用父类构造函数,创建QWidget窗体
super(QmyWidget, self).__init__()
# 创建UI对象
# self.ui = Ui_Widget
# 构造UI
self.setupUi(self)
# 下面将输出重定向到textEdit中
# sys.stdout 与 print的作用基本类似,可以看作print就是sys.stdout的进一步封装
# print 会调用 sys.stdout 的 write 方法以下两行在事实上等价:
# sys.stdout.write('hello'+'\n')
# print 'hello'
sys.stdout = Stream(newText=self.onUpdateText)
# 绑定事件
# TAB Single处理文件
self.btnH5.clicked.connect(self.on_btnH5)
self.btnMF4.clicked.connect(self.on_btnMF4)
self.btnCsv.clicked.connect(self.on_btnCsv)
self.btnOK.clicked.connect(self.on_btnOK)
# TAB Batch批量处理文件
self.btnH5_3.clicked.connect(self.on_btnH5_3)
self.btnMF4_3.clicked.connect(self.on_btnMF4_3)
self.btnCsv_3.clicked.connect(self.on_btnCsv_3)
self.btnOK_3.clicked.connect(self.on_btnOK_3)
# 显示H5文件的Dataset_name 也就是key:
self.btnKeyShow.clicked.connect(self.on_btnKeyShow)
def onUpdateText(self, text):
"""Write console output to text widget."""
# self.textEdit.clear()
"""keyShow 是我自定义的TextEdit命名"""
cursor = self.keyShow.textCursor()
cursor.movePosition(QTextCursor.End)
cursor.insertText(text)
self.keyShow.setTextCursor(cursor)
self.keyShow.ensureCursorVisible()
def on_btnMF4(self):
# 批量选择文件
self.file = QFileDialog.getExistingDirectory(self, '请选取文件夹', "src/file")
self.fileList1 = os.listdir(self.file)
for i in self.fileList1:
self.textBrowser_mf4.append(i)
def on_btnMF4_3(self):
# 选取文件,在指定文件夹选取
self.file = QFileDialog.getExistingDirectory(self, '请选取文件夹', "src/file")
print(self.file)
# self.fileList2 = os.listdir(self.file)
self.textBrowser_2.setText(self.file)
def on_btnH5(self):
# 批量选择文件
self.file = QFileDialog.getExistingDirectory(self, '请选取文件夹', "src/file/")
self.fileList2 = os.listdir(self.file)
for i in self.fileList2:
self.textBrowser_h5.append(i)
def on_btnH5_3(self):
# 选取文件,在指定文件夹选取
filename, filetype = QFileDialog.getOpenFileName(self, '请选取文件', h53, "Text Files(*.h5)")
print(filename)
self.lineEdit.setText(filename)
def on_btnCsv(self):
# 批量选择文件
self.file = QFileDialog.getExistingDirectory(self, '请选取文件夹', "src/file")
self.fileList3 = os.listdir(self.file)
for i in self.fileList3:
self.textBrowser_csv.append(i)
def on_btnCsv_3(self):
filename, filetype = QFileDialog.getOpenFileName(self, '请选取文件', csv3, "Text Files(*.csv)")
print(filename)
self.lineEdit_3.setText(filename)
def on_btnOK(self):
# 遍历文件夹中的每个文件 执行n次函数f()
for h5, mf4, csv in zip(self.fileList2, self.fileList1, self.fileList3):
f('src/file/h5/' + h5, 'src/file/mf4/' + mf4, 'src/file/csv/' + csv)
# 显示h5文件的key值,也就是dataset_name:
def on_btnKeyShow(self, text):
with h5py.File(self.lineEdit.text(), 'r+') as hdf:
# 打印 KeysViewHDF5 H5文件的键 CamF20262964
# f_handler = open('out.log', 'w')
# sys.stdout = f_handler
print(hdf.keys())
def on_btnOK_3(self):
# textBrowser类型的文本框,要用.show()显示出来。
f(self.lineEdit.text(), self.file,
self.lineEdit_3.text(), self.dateset.text())
print('Hello,Execute is down~')
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
# app = QtWidgets.QApplication(sys.argv)
ui = QmyWidget()
ui.show()
sys.exit(app.exec_())