gui.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. sys.path.append(os.path.join(os.path.dirname(__file__), 'test_u'))
  8. import threading
  9. from PySide2.QtWidgets import QApplication
  10. from PySide2.QtCore import QObject,Signal
  11. from PySide2 import QtCore
  12. from main_windows import MainWindow
  13. # 兼容4K屏幕
  14. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
  15. QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
  16. app = None
  17. mainWindows:MainWindow = None
  18. GUI_instan = None
  19. sub_thread = None
  20. exit_flag = False
  21. class Application(QApplication):
  22. sig = Signal(object)
  23. def __init__(self, argv):
  24. super().__init__(argv)
  25. def run_forever(GUI):
  26. global app,mainWindows,GUI_instan
  27. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
  28. app = Application(sys.argv)
  29. mainWindows = MainWindow(GUI)
  30. mainWindows.sig.connect(handle_signal)
  31. # GUI.Elaborate("top", True)
  32. GUI_instan = GUI
  33. app.exec_()
  34. def run_in_thread(GUI:QObject):
  35. global sub_thread
  36. sub_thread = threading.Thread(target=run_forever, args=(GUI,))
  37. sub_thread.setDaemon(True)
  38. sub_thread.start()
  39. # 需等待线程启动成功,否则会丢失 _GUI 打印的版本信息
  40. time.sleep(0.05)
  41. return sub_thread
  42. def signale(dat):
  43. mainWindows.sig.emit(dat)
  44. def handle_signal(dat):
  45. if isinstance(dat, str):
  46. dat = dat.lower()
  47. sig_call = {'start':mainWindows.show, 'stop':mainWindows.hide, 'exit':mainWindows.close,
  48. 'busy': mainWindows.busy,
  49. "ready": mainWindows.ready,
  50. "stage": mainWindows.stage,
  51. "message": mainWindows.show_message,
  52. }
  53. call = sig_call.get(dat)
  54. if call:
  55. call()
  56. else:
  57. mainWindows.sub_win.sig.emit(dat)
  58. def StopGui():
  59. return mainWindows.hide()
  60. def StartGui():
  61. return mainWindows.show()
  62. def exit():
  63. signale('exit')
  64. sub_thread.join()
  65. if __name__ == '__main__':
  66. run_forever(1)