import os import sys import time # sys.path.append(os.path.dirname(__file__)) # 必须要把 ui 目录添加到系统路径,否则子目录文件 ui_MainWindows.py 无法 import 资源文件 sys.path.append(os.path.join(os.path.dirname(__file__), 'ui')) sys.path.append(os.path.join(os.path.dirname(__file__), 'test_u')) import threading from PySide2.QtWidgets import QApplication from PySide2.QtCore import QObject,Signal from PySide2 import QtCore from main_windows import MainWindow # 兼容4K屏幕 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True) app = None mainWindows:MainWindow = None GUI_instan = None sub_thread = None exit_flag = False class Application(QApplication): sig = Signal(object) def __init__(self, argv): super().__init__(argv) def run_forever(GUI): global app,mainWindows,GUI_instan QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts) app = Application(sys.argv) mainWindows = MainWindow(GUI) mainWindows.sig.connect(handle_signal) GUI.Elaborate("top", True) GUI_instan = GUI app.exec_() def run_in_thread(GUI:QObject): global sub_thread sub_thread = threading.Thread(target=run_forever, args=(GUI,)) sub_thread.setDaemon(True) sub_thread.start() # 需等待线程启动成功,否则会丢失 _GUI 打印的版本信息 time.sleep(0.05) return sub_thread def signale(dat): mainWindows.sig.emit(dat) def handle_signal(dat): if isinstance(dat, str): dat = dat.lower() sig_call = {'start':mainWindows.show, 'stop':mainWindows.hide, 'exit':mainWindows.close, 'busy': mainWindows.busy, "ready": mainWindows.ready, "stage": mainWindows.stage, } call = sig_call.get(dat) if call: call() else: mainWindows.sub_win.sig.emit(dat) def StopGui(): return mainWindows.hide() def StartGui(): return mainWindows.show() def exit(): signale('exit') sub_thread.join() if __name__ == '__main__': run_forever(1)