| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- import queue
- import re
- import sys
- import threading
- from PySide2.QtWidgets import QApplication, QMainWindow
- from PySide2.QtUiTools import QUiLoader
- from PySide2.QtWidgets import *
- from PySide2.QtCore import *
- from PySide2 import QtCore
- from PySide2.QtGui import QTextCursor
- from ui.ui_MainWindows import Ui_MainWindow
- from ui.Analyze import AnalyzeWindow
- from sub_windows import SubWindows
-
- class Stream(QObject):
- """Redirects console output to text widget."""
- newText = Signal(str)
- def __init__(self):
- super().__init__()
- self.stdout_bak = sys.stdout
- self.buffer = self.stdout_bak.buffer
- self.close = self.stdout_bak.close
- self.closed = self.stdout_bak.closed
- self.detach = self.stdout_bak.detach
- self.encoding = self.stdout_bak.encoding
- self.errors = self.stdout_bak.errors
- self.fileno = self.stdout_bak.fileno
- self.flush = self.stdout_bak.flush
- self.isatty = self.stdout_bak.isatty
- self.line_buffering = self.stdout_bak.line_buffering
- self.mode = self.stdout_bak.mode
- self.name = self.stdout_bak.name
- self.newlines = self.stdout_bak.newlines
- self.read = self.stdout_bak.read
- self.readable = self.stdout_bak.readable
- self.readline = self.stdout_bak.readline
- self.readlines = self.stdout_bak.readlines
- self.reconfigure = self.stdout_bak.reconfigure
- self.seek = self.stdout_bak.seek
- self.seekable = self.stdout_bak.seekable
- self.tell = self.stdout_bak.tell
- self.truncate = self.stdout_bak.truncate
- self.writable = self.stdout_bak.writable
- self.write_through = self.stdout_bak.write_through
- self.writelines = self.stdout_bak.writelines
-
- def write(self, text:str):
- self.stdout_bak.write(str(text))
- self.stdout_bak.flush()
- if len(text) == 0:
- return
- if text.isspace():
- return
- self.newText.emit(str(text+'\n'))
- class MainWindow(Ui_MainWindow, QMainWindow):
- textEdit_sig = Signal(str)
- sig = Signal(object)
- def __init__(self, GUI) -> None:
- super().__init__()
- self.setupUi(self)
- # 这里显示一下是为了能获取到 mdiArea 的尺寸,给 sub_windows 使用
- self.show()
-
- self.loader = QUiLoader()
- self.actionReport_Virtual_Timing.triggered.connect(self.add_sub_win)
- self.textEdit.document().contentsChanged.connect(self.textEdit_change_size)
- self.textEdit.document().contentsChange.connect(self.textEdit_change_contents)
- sys.stdout = Stream()
- sys.stdout.newText.connect(self.outputWritten)
- sys.stderr = sys.stdout
- self.GUI = GUI
- self.setWindowTitle(GUI.Title)
-
- self.sub_win = SubWindows(self)
- self.sub_win.sig.connect(self.sub_win.add_windows)
- self.actionAnalyze.triggered.connect(self.show_analyze_window)
-
- def show_analyze_window(self):
- d = AnalyzeWindow(self)
- d.exec_()
-
- def outputWritten(self, text):
- cursor = self.LogText.textCursor()
- cursor.movePosition(QTextCursor.End)
- cursor.insertText(text)
- self.LogText.setTextCursor(cursor)
- self.LogText.ensureCursorVisible()
-
- def textEdit_change_size(self):
- height = self.textEdit.document().size().height()
- self.textEdit.setMinimumHeight(height)
-
- def textEdit_change_contents(self, from_index, charsRemoved, charsAdded):
- if not charsAdded:
- return
- stdin = self.textEdit.toPlainText()
- if not stdin:
- return
- # 捕获回车键
- if stdin[from_index] != '\n':
- return
- # 回车时,判断字符串代码是否结束
- if self.GUI.Shell_IsCmdFinished(stdin):
- # 删除回车字符
- stdin = stdin[:from_index] + stdin[from_index+1:]
- print(stdin)
- thread = threading.Thread(target=self.GUI.Shell_Execute, args=(stdin,))
- thread.start()
- self.textEdit.setText('')
- self.textEdit_change_size()
-
- def add_sub_win(self):
- print('add sub')
- self.t = self.loader.load("ui/TimingAnalyze.ui")
- self.mdiArea.addSubWindow(self.t)
- self.t.show()
|