33 lines
1.3 KiB
Python
33 lines
1.3 KiB
Python
# =====================================================================
|
||
# =============== 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)
|