gui.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import asyncio
  2. import logging
  3. import os
  4. import re
  5. import sys
  6. import time
  7. from typing import TextIO
  8. import queue
  9. # sys.path.append(os.path.dirname(__file__))
  10. # 必须要把 ui 目录添加到系统路径,否则子目录文件 ui_MainWindows.py 无法 import 资源文件
  11. sys.path.append(os.path.join(os.path.dirname(__file__), 'ui'))
  12. import threading
  13. from PySide2.QtWidgets import QApplication, QMainWindow
  14. from PySide2.QtUiTools import QUiLoader
  15. from PySide2.QtWidgets import *
  16. from PySide2.QtCore import *
  17. from PySide2 import QtCore
  18. from PySide2.QtGui import QTextCursor
  19. from ui.ui_MainWindows import Ui_MainWindow
  20. # from ui.log import Ui_Form
  21. from ui.ui_TimingAnalyze import Ui_TimingWindow
  22. from main_windows import MainWindow
  23. class Stream2(TextIO):
  24. def __init__(self,sig):
  25. super().__init__()
  26. self.newText = sig
  27. def write(self, __s) -> int:
  28. self.newText.emit(__s)
  29. # self.
  30. # return super().write(__s)
  31. app = None
  32. mainWindows:MainWindow = None
  33. sub_thread = None
  34. exit_flag = False
  35. def run_forever(GUI):
  36. global app,mainWindows
  37. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
  38. app = QApplication(sys.argv)
  39. mainWindows = MainWindow(GUI)
  40. mainWindows.sig.connect(handle_signal)
  41. # TODO test
  42. mainWindows.GUI.Elaborate("ela", True)
  43. app.exec_()
  44. def run_in_thread(GUI:QObject):
  45. global sub_thread
  46. sub_thread = threading.Thread(target=run_forever, args=(GUI,))
  47. sub_thread.setDaemon(True)
  48. sub_thread.start()
  49. time.sleep(0.01)
  50. return sub_thread
  51. def signale(dat):
  52. mainWindows.sig.emit(dat)
  53. def handle_signal(dat):
  54. # print('dat:', dat)
  55. if isinstance(dat, str):
  56. dat = dat.lower()
  57. if dat == 'start':
  58. mainWindows.show()
  59. elif dat == 'stop':
  60. mainWindows.hide()
  61. elif dat == 'exit':
  62. mainWindows.dc_shell_thread.quit()
  63. mainWindows.dc_shell_thread.wait(5)
  64. mainWindows.close()
  65. else:
  66. mainWindows.sub_win.sig.emit(dat)
  67. def StopGui():
  68. return mainWindows.hide()
  69. def StartGui():
  70. return mainWindows.show()
  71. def exit():
  72. signale('exit')
  73. sub_thread.join()
  74. if __name__ == '__main__':
  75. run_forever(1)
  76. # sys.stdout = Stream()
  77. # sys.stdout.newText.connect(stderr_)
  78. # print('ok')