需求
如何把控制台中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_())
結果

