Files
work-secretfile-selfcheck/UmiOCR-data/py_src/mission/mission_connector.py

33 lines
1.3 KiB
Python
Raw Normal View History

# =====================================================================
# =============== qml与【后端Python任务控制器们】的连接器 ===============
# =====================================================================
from PySide2.QtCore import QObject, Slot, Signal
# 本模块内定义的任务控制器单例
from .mission_ocr import MissionOCR
from umi_log import logger
# 控制器字典
MsnObjDict = {"ocr": MissionOCR}
# 任务连接器类(不限制单例)
class MissionConnector(QObject):
# qml访问某个Python任务控制器的方法同步
# qml调用ctrlKey的方法funcName入参为列表对应参数顺序返回值为可变类型。
@Slot(str, str, list, result="QVariant")
def callPy(self, msnKey, funcName, args=()):
if msnKey not in MsnObjDict:
logger.error(f"qml访问不存在的任务控制器 {msnKey}")
return None
# 获取方法的引用
msnObj = MsnObjDict[msnKey]
method = getattr(msnObj, funcName, None)
# 查询失败
if not callable(method):
logger.error(f"qml调用了 {msnKey} 的不存在的py方法 {funcName}")
return None
# 调用方法,参数不对的话让系统抛出错误
return method(*args)