gui.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import os
  2. import sys
  3. import time
  4. # sys.path.append(os.path.dirname(__file__))
  5. # 必须要把 ui 目录添加到系统路径,否则子目录文件 ui_MainWindows.py 无法 import 资源文件
  6. sys.path.append(os.path.join(os.path.dirname(__file__), 'ui'))
  7. import threading
  8. from PySide2.QtWidgets import QApplication
  9. from PySide2.QtCore import QObject
  10. from PySide2 import QtCore
  11. from main_windows import MainWindow
  12. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
  13. QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
  14. app = None
  15. mainWindows:MainWindow = None
  16. sub_thread = None
  17. exit_flag = False
  18. def run_forever(GUI):
  19. global app,mainWindows
  20. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
  21. app = QApplication(sys.argv)
  22. mainWindows = MainWindow(GUI)
  23. mainWindows.sig.connect(handle_signal)
  24. mainWindows.show_analyze_window()
  25. app.exec_()
  26. def run_in_thread(GUI:QObject):
  27. global sub_thread
  28. sub_thread = threading.Thread(target=run_forever, args=(GUI,))
  29. sub_thread.setDaemon(True)
  30. sub_thread.start()
  31. # 需等待线程启动成功,否则会丢失 _GUI 打印的版本信息
  32. time.sleep(0.05)
  33. return sub_thread
  34. def signale(dat):
  35. mainWindows.sig.emit(dat)
  36. def handle_signal(dat):
  37. if isinstance(dat, str):
  38. dat = dat.lower()
  39. if dat == 'start':
  40. mainWindows.show()
  41. elif dat == 'stop':
  42. mainWindows.hide()
  43. elif dat == 'exit':
  44. mainWindows.nc_shell_thread.quit()
  45. mainWindows.nc_shell_thread.wait(5)
  46. mainWindows.close()
  47. else:
  48. mainWindows.sub_win.sig.emit(dat)
  49. def StopGui():
  50. return mainWindows.hide()
  51. def StartGui():
  52. return mainWindows.show()
  53. def exit():
  54. signale('exit')
  55. sub_thread.join()
  56. if __name__ == '__main__':
  57. run_forever(1)