gui.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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
  11. from PySide2 import QtCore
  12. from main_windows import MainWindow
  13. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
  14. QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
  15. app = None
  16. mainWindows:MainWindow = None
  17. sub_thread = None
  18. exit_flag = False
  19. def run_forever(GUI):
  20. global app,mainWindows
  21. QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
  22. app = QApplication(sys.argv)
  23. mainWindows = MainWindow(GUI)
  24. mainWindows.sig.connect(handle_signal)
  25. GUI.Elaborate("top", True)
  26. app.exec_()
  27. def run_in_thread(GUI:QObject):
  28. global sub_thread
  29. sub_thread = threading.Thread(target=run_forever, args=(GUI,))
  30. sub_thread.setDaemon(True)
  31. sub_thread.start()
  32. # 需等待线程启动成功,否则会丢失 _GUI 打印的版本信息
  33. time.sleep(0.05)
  34. return sub_thread
  35. def signale(dat):
  36. mainWindows.sig.emit(dat)
  37. def handle_signal(dat):
  38. if isinstance(dat, str):
  39. dat = dat.lower()
  40. sig_call = {'start':mainWindows.show, 'stop':mainWindows.hide, 'exit':mainWindows.close,
  41. # 'busy': lambda: mainWindows.statusbar.showMessage("Busy"),
  42. # "ready": lambda: mainWindows.statusbar.showMessage("Ready"),
  43. 'busy': lambda: mainWindows.status_label.setText("Busy"),
  44. "ready": lambda: mainWindows.status_label.setText("Ready"),
  45. }
  46. call = sig_call.get(dat)
  47. if call:
  48. call()
  49. else:
  50. mainWindows.sub_win.sig.emit(dat)
  51. def StopGui():
  52. return mainWindows.hide()
  53. def StartGui():
  54. return mainWindows.show()
  55. def exit():
  56. signale('exit')
  57. sub_thread.join()
  58. if __name__ == '__main__':
  59. run_forever(1)