Compare commits

..

5 Commits

Author SHA1 Message Date
f12a289c57 用户管理(未完成) 2025-09-13 17:03:22 +08:00
621c107be1 1.人脸验证执行操作成功
2.UI底图进行修改
2025-09-13 11:09:22 +08:00
a3bb7f0701 增加ini 人脸超时限制 2025-09-12 11:32:33 +08:00
0557ba7f1c 文件分离函数类,增加提示信息 2025-09-05 15:40:00 +08:00
79f733126b 1.增加人脸识别模块
2.人脸识别整定优化,分离串口配置
3.改为使用原有uart_group_config.py文件实现配置连接,保持原有断线重连
2025-09-04 16:22:33 +08:00
105 changed files with 19581 additions and 329 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.pyc

View File

@ -0,0 +1,929 @@
# This Python file uses the following encoding: utf-8
import sys
import time
from PyQt5.QtWidgets import QFileDialog
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget, QWidget, QLayout, QLabel, QLineEdit, QPushButton, QMessageBox, QShortcut, QDialog,QTextEdit
from PyQt5 import uic
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QObject, QRunnable, QMutex, QTimer, QEvent
from PyQt5.QtGui import QImage, QPixmap, QColor, QKeySequence
from UIFrameWork import UIFrameWork
from UIFrameWork import *
# 添加当前脚本的父级目录到 sys.path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from Shared_CODE.CameraThread import CameraThread
from PyQt5.QtWidgets import QApplication, QMainWindow, QStackedWidget
from PyQt5.QtWidgets import QDesktopWidget
import menu_utils as utils
import uart_group_config as group_config
from mqtt_device import class_comm_mqtt_thread, class_comm_mqtt_interface
from print_color import *
from Shared_CODE.get_tip_prop import *
from QT5_Project.Shared_CODE.FaceRecognitionProtocol import *
from QT5_Project.Shared_CODE.DialogFaceEnrollItgSingle import EnrollItgSingleDialog
from QT5_Project.Shared_CODE.DialogFaceUserManage import UserManageDialog, save_user, load_users, save_users_list
# 设置 UI 目录的路径
ui_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'UI'))
# 页面文件,动态构建 UI 文件的路径
uiFile_P00DeviceList = os.path.join(ui_path, "P00DeviceList.ui")
uiFile_P01DeviceMenu = os.path.join(ui_path, "P01DeviceMenu.ui")
uiFile_P02DataView = os.path.join(ui_path, "P02DataView.ui")
uiFile_P03SwitchAction = os.path.join(ui_path, "P03SwitchAction.ui")
uiFile_P04ParamSet = os.path.join(ui_path, "P04ParamSet.ui")
uiFile_P05CameraView = os.path.join(ui_path, "P05CameraView.ui")
uiFile_P05_01_FaceCameraView = os.path.join(ui_path, "P05_01_FaceCameraView.ui")
uiFile_P06FaultQuery = os.path.join(ui_path, "P06FaultQuery.ui")
uiFile_P07SystemSet = os.path.join(ui_path, "P07SystemSet.ui")
uiFile_P08FieldTestAction = os.path.join(ui_path, "P08FieldTestAction.ui")
uiFile_P11LightDeviceMenu = os.path.join(ui_path, "P11LightDeviceMenu.ui")
uiFile_P12LightDataView = os.path.join(ui_path, "P12LightDataView.ui")
uiFile_P13LightSwitchAction = os.path.join(ui_path, "P13LightSwitchAction.ui")
uiFile_P14LightParamSet = os.path.join(ui_path, "P14LightParamSet.ui")
uiFile_P16LightFaultQuery = os.path.join(ui_path, "P16LightFaultQuery.ui")
uiFile_P17LightSystemSet = os.path.join(ui_path, "P17LightSystemSet.ui")
uiFile_P18LightFieldTestAction = os.path.join(ui_path, "P18LightFieldTestAction.ui")
COLOR_RED = QColor("#EE2D2D").name()
COLOR_GREEN = QColor(Qt.green).name()
COLOR_BLUE = QColor(Qt.blue).name()
COLOR_YELLOW = QColor(Qt.yellow).name()
COLOR_NORMAL = QColor("#000000").name()
COLOR_ALARM_NORMAL = QColor("#ECECEC").name()
COLOR_ALARM_ERROR_TEXT = QColor("#B1E5FC").name()
COLOR_ALARM_ERROR_BG = QColor("#E17176").name()
COLOR_VALUE_NORMAL_YELLOW = QColor("#F8C822").name()
COLOR_VALUE_NORMAL_BLUE = QColor("#4E76D4").name()
COLOR_VALUE_NORMAL_READ = QColor("#CE5D62").name()
COLOR_VALUE_NORMAL_GREEN = QColor("#83BF6E").name()
def get_camera_id_and_canvas_id(action : str) :
camera_id = -1
canvas_id = -1
if "canvas" in action and "camera" in action :
action_splits = action.split("_")
for action_split_str in action_splits:
if "camera" in action_split_str:
camera_id = get_value_from_lead_value_str(action_split_str, "camera", -1)
elif "canvas" in action_split_str:
canvas_id = get_value_from_lead_value_str(action_split_str, "canvas", -1)
return camera_id, canvas_id
#根据回路选择摄像头url地址
def search_camera_url(camera_id : int) :
cameral_url = None
for config_dict in group_config.comm_thread_config :
device_list = utils.dict_or_object_get_attr(config_dict, "device_list", None)
if device_list != None :
for item_dict in device_list :
config_camera_id = utils.dict_or_object_get_attr(item_dict, "circuit_id", -1)
if config_camera_id == camera_id :
cameral_url = utils.dict_or_object_get_attr(item_dict, "camera_url", None)
if cameral_url != None :
return cameral_url
return cameral_url
menu_page_widget_list = []
class PageTemplate(UIFrameWork): # 页面模板类,包含各子页面公用功能
def __init__(self, parent_window): #
UIFrameWork.__init__(self) #
self.parent_window : APPWindow = parent_window
def connect_matched_camera_canvas(self) :
page_widget : UIFrameWork = self.parent_window.stack.currentWidget()
if page_widget != None :
for canvas_id in range(9) :
camera_id , face_detect = page_widget.get_canvas_prop(canvas_id)
if camera_id >= 0 :
self.parent_window.connect_camera_to_canvas(page_widget, camera_id, canvas_id, face_detect)
def virtual_connect_canvas_to_camera(self, canvas_id : int, camera_id : int, is_visible : bool = True) :
if camera_id >= 0 and canvas_id >= 0 and canvas_id < len(self.parent_window.camera_thread_list) :
face_detect = 0
canvas_object = self.search_canvas_object(canvas_id)
if canvas_object != None :
face_detect = get_tip_face_detection(canvas_object.statusTip())
camera_thread : CameraThread = self.parent_window.camera_thread_list[camera_id]
if camera_thread != None :
if not camera_thread.is_emit and is_visible:
self.show_camera_error(camera_id)
if camera_thread.is_emit:
self.connect_camera_thread(camera_thread, canvas_id, is_visible)
self.parent_window.camera_signal.emit(camera_id)
camera_thread.face_detection = face_detect
if hasattr(self, "CameraChioceLabel") :
# self.CameraChioceLabel.setStyleSheet("color: rgb(255, 255, 255); font-size: 50px;")
self.CameraChioceLabel.setText("回路" + str(camera_id+1))
else:
self.show_camera_error(camera_id)
def show_camera_error(self, camera_id) :
inform_box : DialogInform = DialogInform()
inform_box.information("提示", f"视频流{camera_id+1}无法初始化或失去连接!")
#定义虚函数, 进入页面时调用
def virtual_on_page_enter(self) :
pass
#定义虚函数, 退出页面时调用
def virtual_on_page_leave(self) :
pass
#重载虚函数, 切换页面时调用
def virtual_change_to_page(self, page) :
if self.parent_window == None :
return
self_page_widget : PageTemplate = self.parent_window.stack.currentWidget()
if self_page_widget == None :
return
target_page_widget : PageTemplate = None
if page >= 0 :
target_page_widget = self.parent_window.search_page_widget(page)
if target_page_widget in menu_page_widget_list:
while len(menu_page_widget_list) > 0 :
pop_page_widget = menu_page_widget_list.pop()
if pop_page_widget == None or pop_page_widget == target_page_widget:
break
else :
while len(menu_page_widget_list) > 0 :
pop_page_widget = menu_page_widget_list.pop()
if pop_page_widget == self :
continue
else :
target_page_widget = pop_page_widget
break
if target_page_widget == None :
target_page_widget = self.parent_window.allpages_list[0]
if target_page_widget != None :
menu_page_widget_list.append(target_page_widget)
self_page_widget.virtual_on_page_leave()
self.parent_window.stack.setCurrentWidget(target_page_widget)
target_page_widget.virtual_on_page_enter()
self.connect_matched_camera_canvas()
def virtual_widget_action_process(self, widget : QWidget, action : str) :
action_splits = action.split("+")
page_id = -1
circuit_id = -1
main_index = -1
add_circuit = -1
binding_circuit = -1
for action_split_str in action_splits :
if "SetPage" in action_split_str :
page_id = get_value_from_lead_value_str(action_split_str, "SetPage", -1)
elif "SetCircuit" in action_split_str :
circuit_id = get_value_from_lead_value_str(action_split_str, "SetCircuit", -1)
elif "SetMain" in action_split_str:
main_index = get_value_from_lead_value_str(action_split_str, "SetMain", -1)
elif "AddCircuit" in action_split_str :
add_circuit = get_value_from_lead_value_str(action_split_str, "AddCircuit", -1)
elif "SetBinding" in action_split_str :
binding_circuit = get_value_from_lead_value_str(action_split_str, "SetBinding", 1)
print("<virtual_widget_action_process>@Line:",inspect.currentframe().f_lineno,'<circuit_id> = ',circuit_id,'<Action> = ',action_splits)
if add_circuit >= 0 :
tip_str : str = page_widget.statusTip()
circuit_id = get_tip_circuit(tip_str)
circuit_id = circuit_id + 1
if binding_circuit > 0 :
circuit_id = self.get_circuit_from_object(widget)
target_page_widget = self.parent_window.search_page_widget(page_id)
page_widget : PageTemplate = target_page_widget
if page_id >= 0 : # 功能标记:执行页面跳转功能
target_page_widget = self.parent_window.search_page_widget(page_id)
if target_page_widget != None :
if circuit_id >= 0 :
target_page_widget.set_page_circuit(circuit_id)
self.virtual_change_to_page(page_id)
if main_index >= 0 : # 功能标记:执行控件主索引设定
self.set_menu_main_index(main_index) # 设置页面主索引字段<main>,可以跨组选择控件
if circuit_id >= 0 :
indicator : QLineEdit = target_page_widget.findChild(QLineEdit,"BindNum_Title")
indicator.setText("当前回路为 %d"%(circuit_id + 1))
# 显示提示图标
indicator_Label : QLabel = target_page_widget.findChild(QLabel,"indicator_Label")
tip_str : str = indicator_Label.statusTip()
imag_file_name = get_imag_value_file_name(tip_str, circuit_id)
if imag_file_name != None :
self.modify_object_style_sheet(indicator_Label, "background-image", "url(%s)"%(imag_file_name))
else :
self.reset_object_style_sheet(indicator_Label)
camera_id, canvas_id = get_camera_id_and_canvas_id(action)
self.virtual_connect_canvas_to_camera(canvas_id, camera_id)
#P00设备列表页面
class QDeviceListPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P00DeviceList)
# 回路1测试开关合闸1总开关0无报警
json_dict0 = { "SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"0", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"无故障","type" : "alarm", "color" : COLOR_ALARM_NORMAL},
"Voltage" : {"value" :"1143", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"60", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"20", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"45321", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# 回路2测试开关合闸1分开关1无报警
json_dict1 = { "SwitchStatus" : {"value" :"0", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"开关未到位","type" : "alarm","color" : COLOR_ALARM_ERROR_TEXT},
"Voltage" : {"value" :"1120", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"45", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"30", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"46321", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# 回路3测试开关合闸1总开关0无报警
json_dict2 = { "SwitchStatus" : {"value" :"0", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"正常运行,无告警信息","type" : "alarm", "color" : COLOR_ALARM_NORMAL},
"Voltage" : {"value" :"1065", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"30", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"16", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"1321", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# 回路4测试开关合闸1总开关0无报警
json_dict3 = { "SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"正常运行,无告警信息","type" : "alarm", "color" : COLOR_ALARM_NORMAL},
"Voltage" : {"value" :"1141", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"61", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"26", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"32321", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# 回路5测试开关合闸1总开关0无报警
json_dict4 = { "SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"正常运行,无告警信息","type" : "alarm", "color" : COLOR_ALARM_NORMAL},
"Voltage" : {"value" :"2133", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"61", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"26", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"4453", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# 回路6测试开关合闸1总开关0无报警
json_dict5 = { "SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"正常运行,无告警信息","type" : "alarm", "color" : COLOR_ALARM_NORMAL},
"Voltage" : {"value" :"1212", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"61", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"27", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"11212", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# 回路7测试开关合闸1总开关0无报警
json_dict6 = { "SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"SwitchType" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED},
"AlarmMessage" : {"value" :"正常运行,无告警信息","type" : "alarm", "color" : COLOR_ALARM_NORMAL},
"Voltage" : {"value" :"1564", "color" : COLOR_VALUE_NORMAL_YELLOW},
"Current" : {"value" :"61", "color" : COLOR_VALUE_NORMAL_READ},
"Power" : {"value" :"32", "color" : COLOR_VALUE_NORMAL_BLUE},
"Electricity" : {"value" :"45341", "color" : COLOR_VALUE_NORMAL_GREEN},
}
# self.flush_widgets(0, json_dict0)
# self.flush_widgets(1, json_dict1)
# self.flush_widgets(2, json_dict2)
# self.flush_widgets(3, json_dict3)
# # self.flush_widgets(4, json_dict4)
# # self.flush_widgets(5, json_dict5)
# # self.flush_widgets(6, json_dict6)
#P01设备列表页面
class QDeviceMenuPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P01DeviceMenu)
#P02数据查看页面
class QDataViewPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P02DataView)
json_dict0 = {"Uab" :"1111", "Ubc" : "1111", "Uca" : "1111", "Uo" : "11" , "Iab" : "1111", "Ibc" : "1111", "Ica" : "1111", "Io" : "1111"}
json_dict1 = {"Uab" :"2222", "Ubc" : "2222", "Uca" : "2222", "Uo" : "22" , "Iab" : "2222", "Ibc" : "2222", "Ica" : "2222", "Io" : "2222"}
json_dict2 = {"Uab" :"3333", "Ubc" : "3333", "Uca" : "3333", "Uo" : "33" , "Iab" : "3333", "Ibc" : "3333", "Ica" : "3333", "Io" : "3333"}
# self.flush_widgets(0, json_dict0)
# self.flush_widgets(1, json_dict1)
# self.flush_widgets(2, json_dict2)
self.camera_str = "0"
def virtual_on_page_enter(self):
children = self.findChildren(QLabel)
for child in children:
if child.objectName() == "TestCameraView" :
status_str = child.statusTip()
get_circuit = self.get_circuit_from_object(child)
print(status_str, get_circuit)
new_status_str = status_str.replace(f"camera{self.camera_str}", f"camera{get_circuit}")
self.camera_str = get_circuit
self.parent_window.camera_signal.emit(int(get_circuit))
child.setStatusTip(new_status_str)
#P03开关操作页面
class QSwitchActionPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P03SwitchAction)
json_dict0 = {"SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED}}
json_dict1 = {"SwitchStatus" : {"value" :"0", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED}}
json_dict2 = {"SwitchStatus" : {"value" :"1", "bk_color" : COLOR_NORMAL, "color" : COLOR_RED}}
# self.flush_widgets(0, json_dict0)
# self.flush_widgets(1, json_dict1)
# self.flush_widgets(2, json_dict2)
self.camera_str = "0"
def virtual_on_page_enter(self):
children = self.findChildren(QLabel)
for child in children:
if child.objectName() == "TestCameraView" :
status_str = child.statusTip()
get_circuit = self.get_circuit_from_object(child)
print(status_str, get_circuit)
new_status_str = status_str.replace(f"camera{self.camera_str}", f"camera{get_circuit}")
self.camera_str = get_circuit
self.parent_window.camera_signal.emit(int(get_circuit))
child.setStatusTip(new_status_str)
#P04参数设置页面
class QParamSetPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P04ParamSet)
json_dict0 = {"Uab" :"1000", "Ubc" : "5", "Uca" : "50"}
json_dict1 = {"Uab" :"1111", "Ubc" : "111", "Uca" : "111"}
json_dict2 = {"Uab" :"2222", "Ubc" : "222", "Uca" : "222"}
# self.flush_widgets(0, json_dict0)
# self.flush_widgets(1, json_dict1)
# self.flush_widgets(2, json_dict2)
'''
# 查找 QLineEdit 控件
self.line_edit = self.findChild(QLineEdit)
if self.line_edit:
# 重写 QLineEdit 的鼠标按下事件
self.line_edit.mousePressEvent = self.on_line_edit_clicked
def on_line_edit_clicked(self, event):
self.key_enter_process()
# 调用原始的鼠标按下事件处理方法
QLineEdit.mousePressEvent(self.line_edit, event)
'''
#P05视频查看页面 QFaultQueryPage
class QCameraViewPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P05CameraView)
def virtual_on_page_enter(self) :
self.parent_window.camera_signal.emit(0)
#P05_01人脸视频查看页面
class QFaceCameraViewPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P05_01_FaceCameraView)
# 读取配置
self.default_baud = getattr(group_config, "BAUDRATE", 115200)
# 串口/线程变量
self.ser = None
self.worker = SerialWorker(lambda: self.ser)
self.worker.frame_received.connect(self.on_frame)
self.worker.log_message.connect(self.log)
self.worker.start()
self.video_worker = None
self.last_port = None
self.last_enroll_name = ""
self.current_video_mode = 0
self.current_face_box = 0
# 定时器:串口监控 & 视频重连
self.t_port = QTimer(self)
self.t_port.setInterval(1000)
self.t_port.timeout.connect(self._port_tick)
self.t_port.start()
self.t_video = QTimer(self)
self.t_video.setInterval(2000)
self.t_video.timeout.connect(self._check_video)
self.t_video.start()
self.face_verify_result = None # 用于存储人脸验证结果
self.auto_connect_serial()
# 串口管理
def auto_connect_serial(self):
ports = [p.device for p in serial.tools.list_ports.comports()]
if not ports:
self.log("[WARN] 未检测到任何串口设备")
return
sys_platform = platform.system()
preferred_port = group_config.DEFAULT_PORT.get(sys_platform)
if preferred_port and preferred_port in ports:
self.last_port = preferred_port
self.log(f"[INFO] 已选择默认串口 {preferred_port},等待自动连接")
else:
self.log(f"[WARN] {sys_platform} 平台未找到配置串口或设备不在列表: {ports}")
def _port_tick(self):
ports = {p.device for p in serial.tools.list_ports.comports()}
# 如果串口对象不存在或已关闭
if not self.ser or not getattr(self.ser, "is_open", False):
# 串口掉线,自动关闭
if self.ser: # 如果之前有串口对象
self.close_serial()
# 尝试自动重连
if self.last_port in ports:
self.open_serial(self.last_port)
def open_serial(self, port=None):
port = port or self.cb_port.currentText() or self.last_port
if not port:
self.log("[WARN] 没有选择串口")
return
try:
baud = self.default_baud
self.ser = serial.Serial(port, baudrate=baud, timeout=0.05)
self.last_port = port
# self.btn_conn.setText("断开")
self.log(f"[INFO] 已连接 {port} @ {baud}")
except Exception as e:
self.log(f"[ERR] 打开串口失败: {e}")
self.ser = None
def close_serial(self):
if self.ser:
try:
self.ser.close()
except:
pass
self.ser = None
self.log("[INFO] 串口已关闭")
def toggle_conn(self):
if self.ser and getattr(self.ser, "is_open", False):
self.close_serial()
else:
self.open_serial()
def send(self, frame: bytes):
if not self.ser or not getattr(self.ser, "is_open", False):
inform_box : DialogInform = DialogInform()
inform_box.information("提示", "请先连接串口")
return
try:
self.ser.write(frame)
self.log("> " + frame.hex(" "))
except Exception as e:
self.log(f"[ERR] write: {e}")
# ---------------- 定时器检测 ----------------
def _check_video(self):
if self.video_worker and not self.video_worker.isRunning():
self.log("[WARN] 摄像头线程已停止")
self.video_worker=None # 自动重连可在这里实现
# 帧处理
def on_frame(self, fr: dict):
self.log("< " + fr["raw"].hex(" "))
msg_id = fr.get("msg_id")
data = fr.get("data", b"")
if msg_id == MID_REPLY:
info = parse_reply(data)
self.log(f"[REPLY] {info}")
if info.get("mid") in (CMD_ENROLL, CMD_ENROLL_ITG) and info.get("result") == 0x00:
user_id = info.get("user_id")
# 如果用户名为空使用用户ID作为用户名
user_name = self.last_enroll_name if self.last_enroll_name else str(user_id)
if user_id: # 只需检查user_id存在即可因为user_name已确保有值
if save_user(user_id, user_name):
self.log(f"[INFO] 用户 {user_name}(ID={user_id}) 已保存")
else:
QMessageBox.warning(self, "提示", f"用户ID {user_id} 已存在!")
elif info.get("mid") == CMD_VERIFY :
if info.get("result") == 0x00:
user_id = info.get("user_id")
print(f"[INFO] 用户(ID={user_id}) 验证通过")
self.face_verify_result = True
else:
self.face_verify_result = False
elif msg_id == MID_NOTE:
info = parse_note(data)
self.log(f"[NOTE] {info}")
# 日志
def log(self, s: str):
ts = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.txt_log.append(f"[{ts}] {s}")
self.txt_log.moveCursor(self.txt_log.textCursor().End)
pass
def save_log(self):
path, _ = QFileDialog.getSaveFileName(self, "保存日志", "", "Text files (*.txt)")
if not path:
return
with open(path, "w", encoding="utf-8") as f:
f.write(self.txt_log.toPlainText())
self.log(f"[INFO] 日志已保存到 {path}")
def closeEvent(self,e):
if self.video_worker and self.video_worker.isRunning():
self.video_worker.stop()
self.video_worker.wait(300)
if self.ser and getattr(self.ser,"is_open",False):
self.close_serial()
super().closeEvent(e)
#P06故障查询页面 QFaultQueryPage
class QFaultQueryPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P06FaultQuery)
self.alarm_index = 0
def virtual_on_page_enter(self) :
self.alarm_index = 0
self.query_alarm_index()
self.timer = QTimer()
self.timer.timeout.connect(self.query_alarm_index)
self.timer.start(4000)
def virtual_on_page_leave(self) :
self.alarm_index = 0
def query_alarm_index(self):
circuit_id = self.get_page_circuit()
unique_name = self.get_unique_name_from_circuit(circuit_id)
if unique_name != None :
publish_topic = "request/alarm/" + unique_name
publish_message = '{"index" : "%s"}'%(self.alarm_index)
self.mqtt_publish_and_wait_response(publish_topic, publish_message, object, 1000)
#action 处理虚函数, 只适用于故障查询页面
def virtual_widget_action_process(self, widget : QWidget, action : str) :
PageTemplate.virtual_widget_action_process(self, widget, action)
alarm_adjust = 0
if "CmdAlarmNext" in action :
alarm_adjust = 1
elif "CmdAlarmPrev" in action :
alarm_adjust = -1
if alarm_adjust != 0 :
self.alarm_index = self.alarm_index + alarm_adjust
if self.alarm_index < 0 :
self.alarm_index = 0
self.query_alarm_index()
#P07系统参数设置页面
class QSystemSetPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P07SystemSet)
#P08现场试验页面
class QFieldTestAction(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P08FieldTestAction)
# P11照明菜单选择
class QLightMenuPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P11LightDeviceMenu)
# P12照明运行数据页面
class QRunDataPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P12LightDataView)
self.camera_str = "0"
def virtual_on_page_enter(self):
children = self.findChildren(QLabel)
for child in children:
if child.objectName() == "TestCameraView" :
status_str = child.statusTip()
get_circuit = self.get_circuit_from_object(child)
print(status_str, get_circuit)
new_status_str = status_str.replace(f"camera{self.camera_str}", f"camera{get_circuit}")
self.camera_str = get_circuit
self.parent_window.camera_signal.emit(int(get_circuit))
child.setStatusTip(new_status_str)
# P13照明开关操作页面
class QLightSwitchActionPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P13LightSwitchAction)
self.camera_str = "0"
def virtual_on_page_enter(self):
children = self.findChildren(QLabel)
for child in children:
if child.objectName() == "TestCameraView" :
status_str = child.statusTip()
get_circuit = self.get_circuit_from_object(child)
print(status_str, get_circuit)
new_status_str = status_str.replace(f"camera{self.camera_str}", f"camera{get_circuit}")
self.camera_str = get_circuit
self.parent_window.camera_signal.emit(int(get_circuit))
child.setStatusTip(new_status_str)
# P14照明参数设置页面
class QLightParamSetPage(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P14LightParamSet)
# P16照明故障查询
class QLightFaultQuery(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P16LightFaultQuery)
def virtual_on_page_enter(self) :
self.alarm_index = 0
self.query_alarm_index()
self.timer = QTimer()
self.timer.timeout.connect(self.query_alarm_index)
self.timer.start(4000)
def virtual_on_page_leave(self) :
self.alarm_index = 0
def query_alarm_index(self):
circuit_id = self.get_page_circuit()
unique_name = self.get_unique_name_from_circuit(circuit_id)
if unique_name != None :
publish_topic = "request/alarm/" + unique_name
publish_message = '{"index" : "%s"}'%(self.alarm_index)
self.mqtt_publish_and_wait_response(publish_topic, publish_message, object, 1000)
#action 处理虚函数, 只适用于故障查询页面
def virtual_widget_action_process(self, widget : QWidget, action : str) :
PageTemplate.virtual_widget_action_process(self, widget, action)
alarm_adjust = 0
if "CmdAlarmNext" in action :
alarm_adjust = 1
elif "CmdAlarmPrev" in action :
alarm_adjust = -1
if alarm_adjust != 0 :
self.alarm_index = self.alarm_index + alarm_adjust
if self.alarm_index < 0 :
self.alarm_index = 0
self.query_alarm_index()
# P17照明系统参数
class QLightSystemSet(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P17LightSystemSet)
# P18现场试验页面
class QLightFieldTestAction(PageTemplate):
def __init__(self, parent_window):
PageTemplate.__init__(self, parent_window)
self.load_window_ui(uiFile_P18LightFieldTestAction)
class APPWindow(QMainWindow):
camera_signal = pyqtSignal(int)
def __init__(self):
super().__init__()
# 获取屏幕分辨率
screen = QDesktopWidget().screenGeometry()
screen_width = screen.width()
screen_height = screen.height()
self.stack = QStackedWidget(self)
self.setGeometry(0, 0, screen_width, screen_height) # 设置窗口大小为屏幕分辨率
self.stack.setGeometry(0, 0, screen_width, screen_height) # 设置堆叠窗口大小为屏幕分辨率
#调试的时候用下面两行,全屏就注释
# self.setGeometry(0, 0, 1024, 768)
# self.stack.setGeometry(0, 0, 1024, 768)
self.showFullScreen()
self.menu_sequence_list : PageTemplate = []
self.camera_thread_list : CameraThread = [None, None, None, None, None, None, None, None, None]
self.allpages_list : PageTemplate = []
self.P00_DeviceList : PageTemplate = QDeviceListPage(parent_window = self)
self.P01_DeviceMenu : PageTemplate = QDeviceMenuPage(parent_window = self)
self.P02_DataView : PageTemplate = QDataViewPage(parent_window = self)
self.P03_SwitchAction : PageTemplate = QSwitchActionPage(parent_window = self)
self.P04_ParamSet : PageTemplate = QParamSetPage(parent_window = self)
self.P05_CameraView : PageTemplate = QCameraViewPage(parent_window = self)
self.P05_01_FaceCameraView : PageTemplate = QFaceCameraViewPage(parent_window = self)
self.P06_FaultQuery : PageTemplate = QFaultQueryPage(parent_window = self)
self.P07_SystemSet : PageTemplate = QSystemSetPage(parent_window = self)
self.P08_FieldTestAction : PageTemplate = QFieldTestAction(parent_window = self)
self.P11_DeviceMenu : PageTemplate = QLightMenuPage(parent_window = self)
self.P12_DateView : PageTemplate = QRunDataPage(parent_window = self)
self.P13_SwitchAction : PageTemplate = QLightSwitchActionPage(parent_window = self)
self.P14_ParamSet : PageTemplate = QLightParamSetPage(parent_window = self)
self.P16_LightFaultQuery : PageTemplate = QLightFaultQuery(parent_window = self)
self.P17_LightSystemSet : PageTemplate = QLightSystemSet(parent_window = self)
self.P18_LightFieldTestAction : PageTemplate = QLightFieldTestAction(parent_window = self)
self.allpages_list.append(self.P00_DeviceList)
self.allpages_list.append(self.P01_DeviceMenu)
self.allpages_list.append(self.P02_DataView)
self.allpages_list.append(self.P03_SwitchAction)
self.allpages_list.append(self.P04_ParamSet)
self.allpages_list.append(self.P05_CameraView)
self.allpages_list.append(self.P05_01_FaceCameraView)
self.allpages_list.append(self.P06_FaultQuery)
self.allpages_list.append(self.P07_SystemSet)
self.allpages_list.append(self.P08_FieldTestAction)
self.allpages_list.append(self.P11_DeviceMenu)
self.allpages_list.append(self.P12_DateView)
self.allpages_list.append(self.P13_SwitchAction)
self.allpages_list.append(self.P14_ParamSet)
self.allpages_list.append(self.P16_LightFaultQuery)
self.allpages_list.append(self.P17_LightSystemSet)
self.allpages_list.append(self.P18_LightFieldTestAction)
self.stack.addWidget(self.P00_DeviceList)
self.stack.addWidget(self.P01_DeviceMenu)
self.stack.addWidget(self.P02_DataView)
self.stack.addWidget(self.P03_SwitchAction)
self.stack.addWidget(self.P04_ParamSet)
self.stack.addWidget(self.P05_CameraView)
self.stack.addWidget(self.P05_01_FaceCameraView)
self.stack.addWidget(self.P06_FaultQuery)
self.stack.addWidget(self.P07_SystemSet)
self.stack.addWidget(self.P08_FieldTestAction)
self.stack.addWidget(self.P11_DeviceMenu)
self.stack.addWidget(self.P12_DateView)
self.stack.addWidget(self.P13_SwitchAction)
self.stack.addWidget(self.P14_ParamSet)
self.stack.addWidget(self.P16_LightFaultQuery)
self.stack.addWidget(self.P17_LightSystemSet)
self.stack.addWidget(self.P18_LightFieldTestAction)
test_init = system_parameter()
set_screen_blanking_time(test_init.get_screen_blanking_time())
def search_page_widget(self, page) :
for list_item in self.allpages_list:
window_page : UIFrameWork = list_item
if window_page.page == page :
return window_page
return None
def connect_camera_to_canvas(self, page_widget : UIFrameWork, camera_id: int , canvas_id : int, face_detect : int = 0) :
if camera_id >= 0 and canvas_id >= 0 and canvas_id < len(self.camera_thread_list) :
camera_thread : CameraThread = self.camera_thread_list[camera_id]
if camera_thread != None :
page_widget.connect_camera_thread(camera_thread, canvas_id)
camera_thread.face_detection = face_detect
def create_all_camera_thread(self) :
for camera_id in range(len(self.camera_thread_list)) :
_camera_url = search_camera_url(camera_id)
if _camera_url != None :
camera_thread = CameraThread(_camera_url, camera_id)
camera_thread.set_video_cycle_ms(10)
self.camera_thread_list[camera_id] = camera_thread
self.camera_signal.connect(camera_thread.change_camera_url)
#摄像头与 界面进行绑定
for index in range(self.stack.count()) :
page_widget : UIFrameWork = self.stack.widget(index)
page_widget.connect_matched_camera_canvas()
time.sleep(0.1)
#开启多个摄像头线程
for camera_thread in self.camera_thread_list:
thread_to_start : CameraThread = camera_thread
if thread_to_start != None :
thread_to_start.start()
time.sleep(0.01)
def get_page_currentwidget(self) :
return self.stack.currentWidget().sort_menu_list[self.stack.currentWidget().menu_key_index][1]
def closeEvent(self, event):
reply = QMessageBox.question(self, '确认', '确定要退出吗?',
QMessageBox.Yes | QMessageBox.No)
if reply == QMessageBox.Yes:
for camera_thread in self.camera_thread_list:
thread_to_stop : CameraThread = camera_thread
if self.video_worker and self.video_worker.isRunning():
self.video_worker.stop()
self.video_worker.wait(300)
if self.ser and getattr(self.ser,"is_open",False):
self.close_serial()
if thread_to_stop != None :
thread_to_stop.close()
for camera_thread in self.camera_thread_list:
thread_to_stop : CameraThread = camera_thread
if thread_to_stop != None :
thread_to_stop.wait()
event.accept() # 接受关闭事件
else:
event.ignore() # 忽略关闭事件
if __name__ == '__main__':
#创建mqtt线程
fvalue = float('06.00')
value = round(fvalue)
_user_name = utils.dict_or_object_get_attr(group_config.mqtt_server, "user_name", "admin")
_password = utils.dict_or_object_get_attr(group_config.mqtt_server, "password", "admin")
_server = utils.dict_or_object_get_attr(group_config.mqtt_server, "remote", "127.0.0.1")
_port = utils.dict_or_object_get_attr(group_config.mqtt_server, "port", 1883)
global_mqtt_thread = class_comm_mqtt_thread()
global_mqtt_thread.set_mqtt_server(server = _server, port = _port, keep_alive = 60, user_name=_user_name, password=_password)
app = QApplication([])
app_main_window = APPWindow()
app_main_window.show()
app_main_window.create_all_camera_thread()
for config_dict in group_config.comm_thread_config :
device_list = utils.dict_or_object_get_attr(config_dict, "device_list", None)
if device_list != None :
for item_dict in device_list :
circuit_id = utils.dict_or_object_get_attr(item_dict, "circuit_id", -1)
circuit_unique_name = utils.dict_or_object_get_attr(item_dict, "unique_name", None)
if circuit_unique_name != None :
global_mqtt_thread.add_unique_object(circuit_unique_name, app_main_window.allpages_list)
global_mqtt_thread.start()
app.exec_()
global_mqtt_thread.close()
global_mqtt_thread.join()
sys.exit(0)

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,339 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P01DeviceMenu</class>
<widget class="QMainWindow" name="P01DeviceMenu">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=1</string>
</property>
<property name="whatsThis">
<string/>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="P01BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/DeviceMenu.png</pixmap>
</property>
</widget>
<widget class="QGroupBox" name="Btns">
<property name="geometry">
<rect>
<x>234</x>
<y>179</y>
<width>771</width>
<height>701</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn07">
<property name="geometry">
<rect>
<x>400</x>
<y>229</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=7, Action=SetPage0,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>返回主页</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn01">
<property name="geometry">
<rect>
<x>18</x>
<y>114</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=1,Action=SetPage2+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>运行数据</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn02">
<property name="geometry">
<rect>
<x>18</x>
<y>229</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=2, Action=SetPage3+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>开关操作</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn03">
<property name="geometry">
<rect>
<x>18</x>
<y>345</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=3, Action=SetPage4+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string> 保护参数设置</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn04">
<property name="geometry">
<rect>
<x>20</x>
<y>460</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=4, Action=SetPage7+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string> 系统参数设置</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="geometry">
<rect>
<x>90</x>
<y>10</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>设备</string>
</property>
</widget>
<widget class="QPushButton" name="Btn05">
<property name="geometry">
<rect>
<x>18</x>
<y>575</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=5, Action=SetPage6+SetBinding+CmdAlarmNext,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>故障查询</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn06">
<property name="geometry">
<rect>
<x>400</x>
<y>114</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=6, Action=SetPage8+SetBinding ,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>现场试验</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,468 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P03SwitchAction</class>
<widget class="QMainWindow" name="P03SwitchAction">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=3</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="P03BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/SwitchAction.png</pixmap>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>295</x>
<y>190</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>374</x>
<y>189</y>
<width>1141</width>
<height>811</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="SwitchOn">
<property name="geometry">
<rect>
<x>60</x>
<y>484</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>SwitchOn,Index=2,Action=CmdExecute, SelectImag=SR_001.png, groupstart=6</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="SwitchOff">
<property name="geometry">
<rect>
<x>60</x>
<y>582</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>SwitchOff,Index=3,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="CarBackward">
<property name="geometry">
<rect>
<x>487</x>
<y>583</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>CarRetreat,Index=6,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="CarForward">
<property name="geometry">
<rect>
<x>487</x>
<y>483</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>CarForward,Index=5,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLabel" name="m01_SwitchStatus_0">
<property name="geometry">
<rect>
<x>77</x>
<y>150</y>
<width>310</width>
<height>170</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchStatus, ImageValue=IM03_SwitchStatus_%d.png, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QPushButton" name="SwitchRecover">
<property name="geometry">
<rect>
<x>60</x>
<y>681</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>SwitchOff,Index=4,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="m03_AlarmMessage_0">
<property name="geometry">
<rect>
<x>150</x>
<y>114</y>
<width>281</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string>AlarmMessage,Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="TestCameraView">
<property name="geometry">
<rect>
<x>650</x>
<y>150</y>
<width>441</width>
<height>241</height>
</rect>
</property>
<property name="statusTip">
<string>canvas1=camera0, Timeout=3000</string>
</property>
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QPushButton" name="quit">
<property name="geometry">
<rect>
<x>856</x>
<y>485</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>Index=7, Action=SetPage1,SelectImag=SR_001.png, groupend=6</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="m03_CarMessage_14">
<property name="geometry">
<rect>
<x>690</x>
<y>114</y>
<width>291</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string>CarPositionMsg,Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 255, 255,0);
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="SwitchType">
<property name="geometry">
<rect>
<x>144</x>
<y>320</y>
<width>173</width>
<height>69</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchType, ImageValue=SwitchType_%d.png, Timeout=10000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(30, 14, 255);</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>8</x>
<y>151</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage1,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>5</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,656 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P05CameraView</class>
<widget class="QMainWindow" name="P05CameraView">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=5</string>
</property>
<property name="whatsThis">
<string/>
</property>
<widget class="QWidget" name="centralwidget">
<property name="statusTip">
<string/>
</property>
<widget class="QLabel" name="P05BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/CameraView.png</pixmap>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn_Home">
<property name="geometry">
<rect>
<x>8</x>
<y>2</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=9, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QLabel" name="Canvas00">
<property name="geometry">
<rect>
<x>380</x>
<y>124</y>
<width>1165</width>
<height>720</height>
</rect>
</property>
<property name="statusTip">
<string>canvas0=camera0, Timeout=15000</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
<widget class="QLabel" name="CameraChioceLabel">
<property name="geometry">
<rect>
<x>200</x>
<y>120</y>
<width>111</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>-1</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252); font-size: 35px;</string>
</property>
<property name="text">
<string>回路1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>90</x>
<y>890</y>
<width>1821</width>
<height>171</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn02">
<property name="geometry">
<rect>
<x>236</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=2, Action=canvas0_camera1, SelectImag=IM05_A2.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn01">
<property name="geometry">
<rect>
<x>10</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=canvas0_camera0, SelectImag=IM05_A1.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn03">
<property name="geometry">
<rect>
<x>462</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=3, Action=canvas0_camera2, SelectImag=IM05_A3.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn04">
<property name="geometry">
<rect>
<x>688</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=4, Action=canvas0_camera3, SelectImag=IM05_A4.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn05">
<property name="geometry">
<rect>
<x>914</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=5, Action=canvas0_camera4, SelectImag=IM05_A5.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn06">
<property name="geometry">
<rect>
<x>1140</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=6, Action=canvas0_camera5, SelectImag=IM05_A6.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn07">
<property name="geometry">
<rect>
<x>1366</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=7, Action=canvas0_camera6, SelectImag=IM05_A7.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn08">
<property name="geometry">
<rect>
<x>1592</x>
<y>5</y>
<width>220</width>
<height>159</height>
</rect>
</property>
<property name="statusTip">
<string>Index=8, Action=canvas0_camera7, SelectImag=IM05_A8.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QLabel" name="Canvas01">
<property name="geometry">
<rect>
<x>12</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas1=camera0, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="text">
<string/>
</property>
<property name="textFormat">
<enum>Qt::AutoText</enum>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="Canvas02">
<property name="geometry">
<rect>
<x>238</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas2=camera1, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="Canvas03">
<property name="geometry">
<rect>
<x>464</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas3=camera2, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="Canvas04">
<property name="geometry">
<rect>
<x>690</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas4=camera3, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="Canvas05">
<property name="geometry">
<rect>
<x>916</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas5=camera4, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="Canvas06">
<property name="geometry">
<rect>
<x>1142</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas6=camera5, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="Canvas07">
<property name="geometry">
<rect>
<x>1368</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas7=camera6, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="Canvas08">
<property name="geometry">
<rect>
<x>1594</x>
<y>23</y>
<width>216</width>
<height>139</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>135</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>400</width>
<height>300</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
<property name="statusTip">
<string>canvas8=camera7, Timeout=15000</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>background/IM05_002.png</pixmap>
</property>
</widget>
<zorder>Canvas08</zorder>
<zorder>Canvas07</zorder>
<zorder>Canvas06</zorder>
<zorder>Canvas05</zorder>
<zorder>Canvas04</zorder>
<zorder>Canvas03</zorder>
<zorder>Canvas02</zorder>
<zorder>Canvas01</zorder>
<zorder>Btn02</zorder>
<zorder>Btn01</zorder>
<zorder>Btn03</zorder>
<zorder>Btn04</zorder>
<zorder>Btn05</zorder>
<zorder>Btn06</zorder>
<zorder>Btn07</zorder>
<zorder>Btn08</zorder>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,363 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P05CameraView</class>
<widget class="QMainWindow" name="P05CameraView">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=5_1</string>
</property>
<property name="whatsThis">
<string/>
</property>
<widget class="QWidget" name="centralwidget">
<property name="statusTip">
<string/>
</property>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn_Home">
<property name="geometry">
<rect>
<x>8</x>
<y>2</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="group_log">
<property name="geometry">
<rect>
<x>340</x>
<y>670</y>
<width>701</width>
<height>381</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<property name="flat">
<bool>false</bool>
</property>
<widget class="QPushButton" name="btn_save">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>211</width>
<height>41</height>
</rect>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(0, 0, 0);
color: rgb(170, 0, 0);</string>
</property>
<property name="text">
<string>日志</string>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QTextEdit" name="txt_log">
<property name="geometry">
<rect>
<x>-20</x>
<y>60</y>
<width>701</width>
<height>301</height>
</rect>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="group_video">
<property name="geometry">
<rect>
<x>450</x>
<y>110</y>
<width>481</width>
<height>551</height>
</rect>
</property>
<property name="statusTip">
<string/>
</property>
<property name="title">
<string>USB 视频流</string>
</property>
<widget class="QLabel" name="video_label">
<property name="geometry">
<rect>
<x>60</x>
<y>50</y>
<width>360</width>
<height>480</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>360</width>
<height>480</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string>未打开</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="group_cmd">
<property name="geometry">
<rect>
<x>340</x>
<y>110</y>
<width>109</width>
<height>551</height>
</rect>
</property>
<property name="statusTip">
<string/>
</property>
<property name="title">
<string>命令</string>
</property>
<widget class="QPushButton" name="btn_reset">
<property name="geometry">
<rect>
<x>12</x>
<y>30</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=Reset,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>复位</string>
</property>
</widget>
<widget class="QPushButton" name="btn_video_mode">
<property name="geometry">
<rect>
<x>12</x>
<y>59</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=VideoMode,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>视频模式</string>
</property>
</widget>
<widget class="QPushButton" name="btn_verify">
<property name="geometry">
<rect>
<x>12</x>
<y>115</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=Verify,password,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>识别</string>
</property>
</widget>
<widget class="QPushButton" name="btn_enroll">
<property name="geometry">
<rect>
<x>12</x>
<y>144</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=EnrollItgSingle,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>ITG注册</string>
</property>
</widget>
<widget class="QPushButton" name="btn_users">
<property name="geometry">
<rect>
<x>12</x>
<y>173</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=Users,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>用户管理</string>
</property>
</widget>
<widget class="QLineEdit" name="FaceRecogTimeoutEdit">
<property name="geometry">
<rect>
<x>0</x>
<y>310</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>System=FaceRecogTimeout, Action=ModifySystem, Index=13,SelectImag=P4_ParaSelect.png, password</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="btn_video">
<property name="geometry">
<rect>
<x>10</x>
<y>210</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=ConnectCamera,password,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>打开视频</string>
</property>
</widget>
<widget class="QPushButton" name="btn_face_mode">
<property name="geometry">
<rect>
<x>10</x>
<y>90</y>
<width>80</width>
<height>23</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=FaceBox,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string>人脸框</string>
</property>
</widget>
</widget>
<widget class="QLabel" name="P05_01BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/FaceCameraView.png</pixmap>
</property>
</widget>
<zorder>P05_01BG</zorder>
<zorder>groupBox_sys</zorder>
<zorder>group_log</zorder>
<zorder>group_video</zorder>
<zorder>group_cmd</zorder>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,708 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P06FaultQuery</class>
<widget class="QMainWindow" name="P06FaultQuery">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1076</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=6</string>
</property>
<property name="whatsThis">
<string/>
</property>
<widget class="QWidget" name="centralwidget">
<property name="statusTip">
<string/>
</property>
<widget class="QLabel" name="P06BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/FaultQuery.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>640</x>
<y>310</y>
<width>641</width>
<height>581</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=2</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn_Pre">
<property name="geometry">
<rect>
<x>48</x>
<y>412</y>
<width>85</width>
<height>169</height>
</rect>
</property>
<property name="statusTip">
<string>Index=2,Action=CmdAlarmPrev, SelectImag=IM03_001.png, groupstart=3</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn_Next">
<property name="geometry">
<rect>
<x>267</x>
<y>412</y>
<width>85</width>
<height>169</height>
</rect>
</property>
<property name="statusTip">
<string>Index=3,Action=CmdAlarmNext, SelectImag=IM03_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="alarmTitle">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>75</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(160, 206, 226);</string>
</property>
<property name="text">
<string>..</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="alarmTime">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>35</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(160, 206, 226);</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="alarmMsg">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>118</y>
<width>491</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(255, 126, 21);</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="sys_menu_2">
<property name="geometry">
<rect>
<x>485</x>
<y>412</y>
<width>85</width>
<height>169</height>
</rect>
</property>
<property name="statusTip">
<string>Index=4, Action=SetPage1, SelectImag=IM03_001.png, groupend=3</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>650</x>
<y>485</y>
<width>671</width>
<height>291</height>
</rect>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(255, 255, 255,0);</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_15">
<property name="geometry">
<rect>
<x>260</x>
<y>27</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmUb, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_13">
<property name="geometry">
<rect>
<x>40</x>
<y>27</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmUa, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_14">
<property name="geometry">
<rect>
<x>40</x>
<y>82</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIa, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_16">
<property name="geometry">
<rect>
<x>40</x>
<y>137</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIc, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_18">
<property name="geometry">
<rect>
<x>260</x>
<y>82</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIb, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_19">
<property name="geometry">
<rect>
<x>260</x>
<y>137</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIo, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_21">
<property name="geometry">
<rect>
<x>480</x>
<y>27</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmUc, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_22">
<property name="geometry">
<rect>
<x>480</x>
<y>81</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIc, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_23">
<property name="geometry">
<rect>
<x>480</x>
<y>137</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmRo, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>8</x>
<y>152</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage1,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>1</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>330</x>
<y>160</y>
<width>361</width>
<height>91</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(255, 255, 255,0);</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="BindNum_Title">
<property name="geometry">
<rect>
<x>10</x>
<y>30</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,932 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P07SystemSet</class>
<widget class="QMainWindow" name="P07SystemSet">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=7</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>91</x>
<y>187</y>
<width>450</width>
<height>874</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=14</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_28">
<property name="geometry">
<rect>
<x>270</x>
<y>84</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>SwitchType, Action=Modify, Index=1, Alias=alias_switch_type, Caption=开关类型,Timeout=15000,SelectImag=P4_ParaSelect.png,groupstart=14</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_29">
<property name="geometry">
<rect>
<x>270</x>
<y>144</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Gas, Action=Modify, Index=2, Alias=alias_input, Caption=瓦斯触点,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_30">
<property name="geometry">
<rect>
<x>270</x>
<y>198</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>GasDelay, Action=Modify, Index=3, Format=%06.2f, Caption=瓦斯延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_31">
<property name="geometry">
<rect>
<x>270</x>
<y>253</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>GasConcentration, Action=Modify, Index=4, Format=%05.2f, Caption=瓦斯浓度, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_32">
<property name="geometry">
<rect>
<x>270</x>
<y>308</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Fan, Action=Modify, Index=5, Alias=alias_input, Caption=风电触点,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_36">
<property name="geometry">
<rect>
<x>270</x>
<y>364</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>FanDelay, Action=Modify, Index=6, Format=%06.2f, Caption=风电延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_37">
<property name="geometry">
<rect>
<x>270</x>
<y>418</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>FarAndNearMode, Action=Modify, Index=7, Alias=alias_remote, Caption=远近控模式,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_38">
<property name="geometry">
<rect>
<x>270</x>
<y>475</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>MaintenanceMode, Action=Modify, Index=8, Alias=alias_bool, Caption=维修模式,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_39">
<property name="geometry">
<rect>
<x>270</x>
<y>530</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>CarAlarmDelay, Action=Modify, Index=9, Format=%05.1f, Caption=小车报警延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_40">
<property name="geometry">
<rect>
<x>270</x>
<y>583</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>OffVoltageDelay, Action=Modify, Index=10, Format=%06.1f, Caption=断电延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_41">
<property name="geometry">
<rect>
<x>270</x>
<y>640</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>TubeDelay, Action=Modify, Index=11, Format=%06.2f, Caption=真空管粘连延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="BlankTimelineEdit">
<property name="geometry">
<rect>
<x>270</x>
<y>750</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>System=ScreenBlankingTime, Action=ModifySystem, Index=13,SelectImag=P4_ParaSelect.png, password</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_44">
<property name="geometry">
<rect>
<x>270</x>
<y>805</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>System=SystemPassWord, Action=ModifySystem, Index=14,SelectImag=P4_ParaSelect.png, password,groupend=14</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>****</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_42">
<property name="geometry">
<rect>
<x>270</x>
<y>695</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>LoadSelect, Action=Modify, Index=12, Alias=alias_select, Caption=负载选择,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>545</x>
<y>186</y>
<width>450</width>
<height>874</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=15</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_26">
<property name="geometry">
<rect>
<x>270</x>
<y>85</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>485Address, Action=Modify, Index=1, Format=%03.0f, Caption=485地址, Timeout=15000,SelectImag=P4_ParaSelect.png, groupstart=5</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_27">
<property name="geometry">
<rect>
<x>270</x>
<y>145</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>485Baud, Action=Modify, Index=2, Alias=alias_baud, Caption=485波特率,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_33">
<property name="geometry">
<rect>
<x>270</x>
<y>200</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>485Parity, Action=Modify, Index=3, Alias=alias_parity, Caption=485校验,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_34">
<property name="geometry">
<rect>
<x>270</x>
<y>255</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>CANAddress, Action=Modify, Index=4, Format=%03.0f, Caption=CAN地址, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_35">
<property name="geometry">
<rect>
<x>270</x>
<y>310</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>CANBaud, Action=Modify, Index=5, Alias=alias_can_baud, Caption=CAN波特率,Timeout=15000,SelectImag=P4_ParaSelect.png, groupend=5</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>0</x>
<y>80</y>
<width>1920</width>
<height>970</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_P00_3">
<property name="geometry">
<rect>
<x>547</x>
<y>90</y>
<width>450</width>
<height>877</height>
</rect>
</property>
<property name="statusTip">
<string>groupend=2,Index=3, Action=SetMain15,SelectImag=IM04_00.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="geometry">
<rect>
<x>180</x>
<y>36</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="sys_P00_2">
<property name="geometry">
<rect>
<x>92</x>
<y>90</y>
<width>450</width>
<height>877</height>
</rect>
</property>
<property name="statusTip">
<string>groupstart=2,Index=2, Action=SetMain14,SelectImag=IM04_00.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>9</x>
<y>25</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>9</x>
<y>173</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage1,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<zorder>sys_P00_2</zorder>
<zorder>sys_P00_3</zorder>
<zorder>BindNum_Title</zorder>
<zorder>sys_home</zorder>
<zorder>sys_menu</zorder>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="P07BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/SystemSet.png</pixmap>
</property>
</widget>
<zorder>P07BG</zorder>
<zorder>groupBox_2</zorder>
<zorder>groupBox_sys_2</zorder>
<zorder>indicator_Label</zorder>
<zorder>groupBox</zorder>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,391 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P08FieldTestAction</class>
<widget class="QMainWindow" name="P08FieldTestAction">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=8</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="P08BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../image/FieldTestAction.png</pixmap>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>300</x>
<y>170</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>600</x>
<y>260</y>
<width>681</width>
<height>511</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Test01">
<property name="geometry">
<rect>
<x>45</x>
<y>215</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>TestShort,Index=2,Action=CmdExecute, SelectImag=SR_001.png, groupstart=4</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Test02">
<property name="geometry">
<rect>
<x>46</x>
<y>330</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>TestIsolation,Index=3,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Reset">
<property name="geometry">
<rect>
<x>393</x>
<y>220</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>TestRecover,Index=4,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="quit">
<property name="geometry">
<rect>
<x>392</x>
<y>330</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>Index=5, Action=SetPage1,SelectImag=SR_001.png, groupend=4</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QLabel" name="SwitchType">
<property name="geometry">
<rect>
<x>422</x>
<y>95</y>
<width>173</width>
<height>69</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchType, ImageValue=SwitchType_%d.png, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(30, 14, 255);</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLineEdit" name="AlarmMessage_0">
<property name="geometry">
<rect>
<x>365</x>
<y>60</y>
<width>291</width>
<height>41</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="mouseTracking">
<bool>true</bool>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>AlarmMessage,Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>8</x>
<y>154</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage1,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>5</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QLabel" name="SwitchStatus">
<property name="geometry">
<rect>
<x>678</x>
<y>319</y>
<width>245</width>
<height>111</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchStatus, ImageValue=SwitchStatus_%d.png, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,339 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P11DeviceMenu</class>
<widget class="QMainWindow" name="P11DeviceMenu">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=11</string>
</property>
<property name="whatsThis">
<string/>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="P01BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../Light_image/Light_DeviceMenu.png</pixmap>
</property>
</widget>
<widget class="QGroupBox" name="Btns">
<property name="geometry">
<rect>
<x>234</x>
<y>179</y>
<width>771</width>
<height>701</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn07">
<property name="geometry">
<rect>
<x>400</x>
<y>229</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=7, Action=SetPage0,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>返回主页</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn01">
<property name="geometry">
<rect>
<x>18</x>
<y>114</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=1,Action=SetPage12+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>运行数据</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn02">
<property name="geometry">
<rect>
<x>18</x>
<y>229</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=2, Action=SetPage13+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>开关操作</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn03">
<property name="geometry">
<rect>
<x>18</x>
<y>345</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=3, Action=SetPage14+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string> 保护参数设置</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn04">
<property name="geometry">
<rect>
<x>20</x>
<y>460</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=4, Action=SetPage17+SetBinding,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string> 系统参数设置</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="geometry">
<rect>
<x>90</x>
<y>10</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>设备</string>
</property>
</widget>
<widget class="QPushButton" name="Btn05">
<property name="geometry">
<rect>
<x>18</x>
<y>575</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=5, Action=SetPage16+SetBinding+CmdAlarmNext,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>故障查询</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn06">
<property name="geometry">
<rect>
<x>400</x>
<y>114</y>
<width>364</width>
<height>85</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>29</pointsize>
</font>
</property>
<property name="statusTip">
<string>Index=6, Action=SetPage18+SetBinding ,SelectImag=IM01_01.png</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(249, 136, 50);</string>
</property>
<property name="text">
<string>现场试验</string>
</property>
<property name="iconSize">
<size>
<width>364</width>
<height>85</height>
</size>
</property>
</widget>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,573 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P12DataView</class>
<widget class="QMainWindow" name="P12DataView">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=12</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="TestCameraView">
<property name="geometry">
<rect>
<x>810</x>
<y>120</y>
<width>1071</width>
<height>841</height>
</rect>
</property>
<property name="statusTip">
<string>canvas1=camera0, Timeout=3000</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="CameralUrlLabel">
<property name="geometry">
<rect>
<x>340</x>
<y>10</y>
<width>391</width>
<height>16</height>
</rect>
</property>
<property name="statusTip">
<string>cameral_url=canvas1</string>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="CameralUrlLabel_2">
<property name="geometry">
<rect>
<x>750</x>
<y>10</y>
<width>411</width>
<height>16</height>
</rect>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="P02BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="styleSheet">
<string>background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../Light_image/Light_DataView.png</pixmap>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>170</x>
<y>130</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>100</x>
<y>240</y>
<width>671</width>
<height>781</height>
</rect>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(255, 255, 255,0);</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_15">
<property name="geometry">
<rect>
<x>304</x>
<y>500</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Uab, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_13">
<property name="geometry">
<rect>
<x>70</x>
<y>500</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Ia, Timeout=15000,</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_14">
<property name="geometry">
<rect>
<x>70</x>
<y>575</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Ib, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_16">
<property name="geometry">
<rect>
<x>70</x>
<y>650</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Ic, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_18">
<property name="geometry">
<rect>
<x>305</x>
<y>574</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Ubc, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_19">
<property name="geometry">
<rect>
<x>305</x>
<y>650</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Uca, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_25">
<property name="geometry">
<rect>
<x>520</x>
<y>570</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Ro, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_27">
<property name="geometry">
<rect>
<x>531</x>
<y>494</y>
<width>71</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>OnCount, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLabel" name="m01_SwitchStatus_0">
<property name="geometry">
<rect>
<x>90</x>
<y>120</y>
<width>310</width>
<height>170</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchStatus, ImageValue=IM03_SwitchStatus_%d.png, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>8</x>
<y>151</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage11,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>3</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<zorder>P02BG</zorder>
<zorder>TestCameraView</zorder>
<zorder>CameralUrlLabel</zorder>
<zorder>CameralUrlLabel_2</zorder>
<zorder>BindNum_Title</zorder>
<zorder>groupBox</zorder>
<zorder>indicator_Label</zorder>
<zorder>groupBox_sys</zorder>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,345 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P13SwitchAction</class>
<widget class="QMainWindow" name="P13SwitchAction">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=13</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="P03BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../Light_image/Ligth_SwitchAction.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>8</x>
<y>150</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage11,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>3</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>290</x>
<y>180</y>
<width>1300</width>
<height>781</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="SwitchOn">
<property name="geometry">
<rect>
<x>147</x>
<y>490</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>SwitchOn,Index=2,Action=CmdExecute, SelectImag=SR_001.png, groupstart=6</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="SwitchOff">
<property name="geometry">
<rect>
<x>411</x>
<y>493</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>SwitchOff,Index=3,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLabel" name="m01_SwitchStatus_0">
<property name="geometry">
<rect>
<x>500</x>
<y>170</y>
<width>310</width>
<height>170</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchStatus, ImageValue=IM03_SwitchStatus_%d.png, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QPushButton" name="SwitchRecover">
<property name="geometry">
<rect>
<x>674</x>
<y>493</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>SwitchOff,Index=4,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="m03_AlarmMessage_0">
<property name="geometry">
<rect>
<x>581</x>
<y>98</y>
<width>281</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string>AlarmMessage,Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QPushButton" name="quit">
<property name="geometry">
<rect>
<x>940</x>
<y>490</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>Index=7, Action=SetPage11,SelectImag=SR_001.png, groupend=6</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>10</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备照明</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,637 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P16FaultQuery</class>
<widget class="QMainWindow" name="P16FaultQuery">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=16</string>
</property>
<property name="whatsThis">
<string/>
</property>
<widget class="QWidget" name="centralwidget">
<property name="statusTip">
<string/>
</property>
<widget class="QLabel" name="P06BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../Light_image/Ligth_FaultQuery.png</pixmap>
</property>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>640</x>
<y>310</y>
<width>641</width>
<height>581</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=2</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Btn_Pre">
<property name="geometry">
<rect>
<x>51</x>
<y>410</y>
<width>85</width>
<height>169</height>
</rect>
</property>
<property name="statusTip">
<string>Index=2,Action=CmdAlarmPrev, SelectImag=IM03_001.png, groupstart=3</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Btn_Next">
<property name="geometry">
<rect>
<x>270</x>
<y>410</y>
<width>85</width>
<height>169</height>
</rect>
</property>
<property name="statusTip">
<string>Index=3,Action=CmdAlarmNext, SelectImag=IM03_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="alarmTitle">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>75</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(160, 206, 226);</string>
</property>
<property name="text">
<string>..</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="alarmTime">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>35</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(160, 206, 226);</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="alarmMsg">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>120</x>
<y>118</y>
<width>491</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(255, 126, 21);</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="sys_menu_2">
<property name="geometry">
<rect>
<x>488</x>
<y>410</y>
<width>85</width>
<height>169</height>
</rect>
</property>
<property name="statusTip">
<string>Index=4, Action=SetPage11, SelectImag=IM03_001.png, groupend=3</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>650</x>
<y>485</y>
<width>671</width>
<height>291</height>
</rect>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(255, 255, 255,0);</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_15">
<property name="geometry">
<rect>
<x>260</x>
<y>27</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmUb, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_13">
<property name="geometry">
<rect>
<x>40</x>
<y>27</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmUa, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_14">
<property name="geometry">
<rect>
<x>40</x>
<y>82</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIa, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_18">
<property name="geometry">
<rect>
<x>260</x>
<y>82</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIb, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_21">
<property name="geometry">
<rect>
<x>480</x>
<y>27</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmUc, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_22">
<property name="geometry">
<rect>
<x>480</x>
<y>81</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmIc, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_23">
<property name="geometry">
<rect>
<x>480</x>
<y>137</y>
<width>81</width>
<height>23</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>14</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>AlarmRo, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>.</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>7</x>
<y>149</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage11,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>1</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>320</x>
<y>170</y>
<width>421</width>
<height>91</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(255, 255, 255,0);</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="BindNum_Title">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,792 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P17SystemSet</class>
<widget class="QMainWindow" name="P17SystemSet">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=17</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>91</x>
<y>187</y>
<width>450</width>
<height>874</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=14</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_28">
<property name="geometry">
<rect>
<x>270</x>
<y>100</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Temperature, Action=Modify, Index=1, Format=%03.0f, Caption=温度设定,Timeout=15000,SelectImag=P4_ParaSelect.png,groupstart=10</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_29">
<property name="geometry">
<rect>
<x>270</x>
<y>155</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Gas, Action=Modify, Index=2, Alias=alias_input, Caption=瓦斯触点,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_30">
<property name="geometry">
<rect>
<x>270</x>
<y>210</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>GasDelay, Action=Modify, Index=3, Format=%06.2f, Caption=瓦斯延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_31">
<property name="geometry">
<rect>
<x>270</x>
<y>265</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>GasConcentration, Action=Modify, Index=4, Format=%05.2f, Caption=瓦斯浓度, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_32">
<property name="geometry">
<rect>
<x>270</x>
<y>320</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>Fan, Action=Modify, Index=5, Alias=alias_input, Caption=风电触点,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_36">
<property name="geometry">
<rect>
<x>270</x>
<y>375</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>FanDelay, Action=Modify, Index=6, Format=%06.2f, Caption=风电延时, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_37">
<property name="geometry">
<rect>
<x>270</x>
<y>430</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>FarAndNearMode, Action=Modify, Index=7, Alias=alias_remote, Caption=远近控模式,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_38">
<property name="geometry">
<rect>
<x>270</x>
<y>485</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>MaintenanceMode, Action=Modify, Index=8, Alias=alias_bool, Caption=维修模式,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="BlankTimelineEdit">
<property name="geometry">
<rect>
<x>270</x>
<y>540</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>System=ScreenBlankingTime, Action=ModifySystem, Index=9,SelectImag=P4_ParaSelect.png, password</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_44">
<property name="geometry">
<rect>
<x>270</x>
<y>595</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>System=SystemPassWord, Action=ModifySystem, Index=10,SelectImag=P4_ParaSelect.png, password,groupend=10</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>****</string>
</property>
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>545</x>
<y>186</y>
<width>450</width>
<height>874</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=15</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QLineEdit" name="lineEdit_26">
<property name="geometry">
<rect>
<x>270</x>
<y>85</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>485Address, Action=Modify, Index=1, Format=%03.0f, Caption=485地址, Timeout=15000,SelectImag=P4_ParaSelect.png, groupstart=5</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_27">
<property name="geometry">
<rect>
<x>270</x>
<y>145</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>485Baud, Action=Modify, Index=2, Alias=alias_baud, Caption=485波特率,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_33">
<property name="geometry">
<rect>
<x>270</x>
<y>200</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>485Parity, Action=Modify, Index=3, Alias=alias_parity, Caption=485校验,Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_34">
<property name="geometry">
<rect>
<x>270</x>
<y>255</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>CANAddress, Action=Modify, Index=4, Format=%03.0f, Caption=CAN地址, Timeout=15000,SelectImag=P4_ParaSelect.png</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_35">
<property name="geometry">
<rect>
<x>270</x>
<y>310</y>
<width>120</width>
<height>25</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="statusTip">
<string>CANBaud, Action=Modify, Index=5, Alias=alias_can_baud, Caption=CAN波特率,Timeout=15000,SelectImag=P4_ParaSelect.png, groupend=5</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(177, 229, 252);</string>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>0</x>
<y>80</y>
<width>1920</width>
<height>970</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_P00_3">
<property name="geometry">
<rect>
<x>547</x>
<y>90</y>
<width>450</width>
<height>877</height>
</rect>
</property>
<property name="statusTip">
<string>groupend=2,Index=3, Action=SetMain15,SelectImag=IM04_00.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="geometry">
<rect>
<x>180</x>
<y>36</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="sys_P00_2">
<property name="geometry">
<rect>
<x>92</x>
<y>90</y>
<width>450</width>
<height>877</height>
</rect>
</property>
<property name="statusTip">
<string>groupstart=2,Index=2, Action=SetMain14,SelectImag=IM04_00.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>450</width>
<height>876</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>9</x>
<y>24</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>9</x>
<y>173</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage11,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<zorder>sys_P00_2</zorder>
<zorder>sys_P00_3</zorder>
<zorder>BindNum_Title</zorder>
<zorder>sys_home</zorder>
<zorder>sys_menu</zorder>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QLabel" name="P07BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string notr="true"/>
</property>
<property name="pixmap">
<pixmap>../Light_image/Light_SystemSet.png</pixmap>
</property>
</widget>
<zorder>P07BG</zorder>
<zorder>groupBox</zorder>
<zorder>groupBox_2</zorder>
<zorder>groupBox_sys_2</zorder>
<zorder>indicator_Label</zorder>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,345 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>P18FieldTestAction</class>
<widget class="QMainWindow" name="P18FieldTestAction">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="statusTip">
<string>Page=18</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLabel" name="P08BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1920</width>
<height>1080</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>../Light_image/Light_FieldTestAction.png</pixmap>
</property>
</widget>
<widget class="QLineEdit" name="BindNum_Title">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>290</x>
<y>174</y>
<width>331</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>20</pointsize>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string>当前设备</string>
</property>
<property name="frame">
<bool>false</bool>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys_2">
<property name="geometry">
<rect>
<x>600</x>
<y>280</y>
<width>691</width>
<height>511</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="Test01">
<property name="geometry">
<rect>
<x>53</x>
<y>243</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>TestShort,Index=2,Action=CmdExecute, SelectImag=SR_001.png, groupstart=4</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Test02">
<property name="geometry">
<rect>
<x>53</x>
<y>357</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>TestIsolation,Index=3,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="Reset">
<property name="geometry">
<rect>
<x>400</x>
<y>248</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>TestRecover,Index=4,Action=CmdExecute, SelectImag=SR_001.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>72</height>
</size>
</property>
</widget>
<widget class="QLineEdit" name="m03_AlarmMessage_0">
<property name="geometry">
<rect>
<x>365</x>
<y>135</y>
<width>291</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<family>黑体</family>
<pointsize>16</pointsize>
</font>
</property>
<property name="statusTip">
<string>AlarmMessage,Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 238, 254,0);
color: rgb(207, 0, 13);</string>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="m01_SwitchStatus_0">
<property name="geometry">
<rect>
<x>79</x>
<y>93</y>
<width>245</width>
<height>111</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>SwitchStatus, ImageValue=SwitchStatus_%d.png, Timeout=15000</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QPushButton" name="quit">
<property name="geometry">
<rect>
<x>400</x>
<y>357</y>
<width>246</width>
<height>84</height>
</rect>
</property>
<property name="statusTip">
<string>Index=5, Action=SetPage11,SelectImag=SR_001.png, groupend=4</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
<widget class="QLabel" name="indicator_Label">
<property name="geometry">
<rect>
<x>1</x>
<y>412</y>
<width>88</width>
<height>636</height>
</rect>
</property>
<property name="font">
<font>
<family>Arial</family>
<pointsize>12</pointsize>
</font>
</property>
<property name="statusTip">
<string>ImageValue=IMxx_A_%d.png</string>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="lineWidth">
<number>0</number>
</property>
<property name="text">
<string/>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_sys">
<property name="geometry">
<rect>
<x>0</x>
<y>100</y>
<width>85</width>
<height>960</height>
</rect>
</property>
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string>main=1</string>
</property>
<property name="styleSheet">
<string notr="true">border:none;</string>
</property>
<property name="title">
<string/>
</property>
<widget class="QPushButton" name="sys_menu">
<property name="geometry">
<rect>
<x>8</x>
<y>153</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=1, Action=SetPage11,SelectImag=IMxx_00E.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
<widget class="QPushButton" name="sys_home">
<property name="geometry">
<rect>
<x>8</x>
<y>4</y>
<width>72</width>
<height>144</height>
</rect>
</property>
<property name="statusTip">
<string>Index=0, Action=SetPage0,SelectImag=IMxx_00F.png</string>
</property>
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>72</width>
<height>144</height>
</size>
</property>
</widget>
</widget>
</widget>
</widget>
<resources/>
<connections/>
</ui>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
import sys
sys_path = sys.path[0].replace("\\", "/")
sys_path_linux = sys_path + "/../.."
if sys_path_linux not in sys.path :
sys.path.append(sys_path_linux)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

View File

@ -1,281 +1,31 @@
# import sys
# import cv2
# import os
# import time
# from PyQt5.QtCore import QThread, pyqtSignal, QObject
# import face_recognition
# current_dir = os.path.dirname(__file__)
# share_code_dir = os.path.abspath(os.path.join(current_dir, '..', '..'))
# sys.path.append(share_code_dir)
# from print_color import *
# DEFAULT_VIDEO_SLEEP_MS = 20
# # 图像处理线程
# class ImageProcessingThread(QThread):
# processed_image_signal = pyqtSignal(object)
# def __init__(self):
# super().__init__()
# def run(self):
# while True:
# # 在这里添加图像处理代码
# # 这里暂时只是将图像传递给下一个线程
# time.sleep(0.01)
# self.processed_image_signal.emit(None)
# # 摄像头采集线程
# class CameraThread(QThread):
# image_signal = pyqtSignal(object)
# def __init__(self, camera_url, circuit_id: int = 0):
# super().__init__()
# self.camera_url = camera_url # 摄像头url地址, 整数 或者 字符串
# self.face_detection: bool = False
# if isinstance(camera_url, int):
# self.camera_url_str = str(camera_url)
# else:
# self.camera_url_str = camera_url
# self.cap: cv2.VideoCapture = None
# self.running: bool = True
# self.fps = 0
# self.cycle_limit = DEFAULT_VIDEO_SLEEP_MS
# self.cycle_ms = 0
# self.circuit_id = circuit_id # 摄像头对应的回路, 组合开关每一个回路都有对应的摄像头
# self.is_signal_connect = False
# self.is_emit = False
# self.set_video_cycle_ms(2000)
# def signal_connect(self, slot_func):
# self.image_signal.connect(slot_func)
# self.is_signal_connect = True
# def signal_disconnect(self):
# # 判断信号是否已连接
# if self.is_signal_connect:
# self.image_signal.disconnect()
# self.is_signal_connect = False
# def set_video_cycle_ms(self, cycle_ms: int = 10):
# if self.cycle_limit != cycle_ms:
# if cycle_ms <= DEFAULT_VIDEO_SLEEP_MS:
# self.cycle_limit = DEFAULT_VIDEO_SLEEP_MS
# else:
# self.cycle_limit = cycle_ms
# # 新建函数,改变函数延时方法
# def change_camera_url(self, camera_url: str):
# if self.circuit_id == camera_url:
# self.set_video_cycle_ms(DEFAULT_VIDEO_SLEEP_MS)
# else:
# self.set_video_cycle_ms(1000)
# def close(self):
# if self.cap == None: # 初始化一直未完成
# self.terminate()
# self.running = False
# def run(self):
# process_count = 0
# fps_time = 0
# while self.running == True:
# inform_msg = "cameral init start, url = " + self.camera_url_str
# print_inform_msg(inform_msg)
# try:
# if isinstance(self.camera_url, int):
# # 在 Windows 平台下,使用默认的 cv2.VideoCapture 接口
# self.cap = cv2.VideoCapture(self.camera_url, cv2.CAP_DSHOW)
# else:
# # 在 Linux 平台下,使用默认的 cv2.VideoCapture 接口
# self.cap = cv2.VideoCapture(self.camera_url)
# if self.cap != None:
# inform_msg = "cameral Init Success, url = " + self.camera_url_str
# self.is_emit = True
# print_inform_msg(inform_msg)
# else:
# inform_msg = "cameral connection timeout, url = " + self.camera_url_str
# print_inform_msg(inform_msg)
# except Exception as e:
# self.cap = None
# inform_msg = "cameral camera Init Fail, url = " + self.camera_url_str
# print_error_msg(inform_msg)
# base_time = time.time()
# while self.running and self.cap != None:
# # 延时20ms
# time.sleep(DEFAULT_VIDEO_SLEEP_MS / 1000)
# if self.cycle_ms + DEFAULT_VIDEO_SLEEP_MS < self.cycle_limit:
# self.cycle_ms += DEFAULT_VIDEO_SLEEP_MS
# self.cap.grab() # 抛弃多余的帧,保持最新帧
# continue
# else:
# self.cycle_ms = 0
# try:
# ret, frame = self.cap.read()
# cur_time = time.time()
# execution_time = cur_time - base_time
# base_time = cur_time
# process_count += 1
# fps_time += execution_time
# if fps_time >= 1:
# self.fps = process_count
# process_count = 0
# fps_time = 0
# if execution_time < 5:
# image_object: QObject = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# self.image_signal.emit(image_object)
# else: # 时间差大于5秒, 表示网络可能中断过, 退出并重新连接
# err_message = "cameral read timeout, url = " + self.camera_url_str
# print_error_msg(err_message)
# break
# except Exception as e:
# err_message = "cameral read timeout, url = " + self.camera_url_str
# self.is_emit = False
# print_error_msg(err_message)
# if self.running == True:
# time.sleep(2)
# break
# print_inform_msg("cameral connection End")
# time.sleep(0.01)
# if self.cap != None:
# self.cap.release()
# self.cap = None
# - * - coding:utf - 8 - * -
import sys import sys
import cv2 import cv2
import os import os
import time import time
import subprocess
import face_recognition
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from PyQt5.QtCore import QThread, pyqtSignal, QObject from PyQt5.QtCore import QThread, pyqtSignal, QObject
from print_color import * import face_recognition
current_dir = os.path.dirname(__file__) current_dir = os.path.dirname(__file__)
share_code_dir = os.path.abspath(os.path.join(current_dir, '..', '..')) share_code_dir = os.path.abspath(os.path.join(current_dir, '..', '..'))
sys.path.append(share_code_dir) sys.path.append(share_code_dir)
from print_color import *
DEFAULT_VIDEO_SLEEP_MS = 20 DEFAULT_VIDEO_SLEEP_MS = 20
# 定义路径常量 # 图像处理线程
npy_file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'face_data/face_data.npy'))
image_folder_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'face_data'))
font_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'font/hanzi.ttc'))
def load_face_data():
face_data = {}
try:
face_data = np.load(npy_file_path, allow_pickle=True).item()
print_debug_msg(f"Loaded {len(face_data)} face encodings from {npy_file_path}.")
except Exception as e:
print_error_msg(f"Error loading face encodings: {e}")
current_images = [f for f in os.listdir(image_folder_path) if f.endswith('.jpg')]
current_image_set = set(os.path.splitext(f)[0] for f in current_images)
known_image_set = set(face_data.keys())
added_images = current_image_set - known_image_set
removed_images = known_image_set - current_image_set
for image_name in added_images:
image_path = os.path.join(image_folder_path, f"{image_name}.jpg")
try:
image = face_recognition.load_image_file(image_path)
face_encodings = face_recognition.face_encodings(image)
if face_encodings:
face_data[image_name] = face_encodings[0].tolist()
print_debug_msg(f"Added encoding for {image_name}.")
else:
print_warning_msg(f"[WARNING] No face detected in {image_name}.jpg.")
except Exception as e:
print_error_msg(f"[ERROR] Error processing {image_name}.jpg: {e}")
for removed_image in removed_images:
del face_data[removed_image]
print_debug_msg(f"Removed encoding for {removed_image}.")
np.save(npy_file_path, face_data)
print_debug_msg(f"Updated face data saved with {len(face_data)} entries.")
return face_data
class ImageProcessingThread(QThread): class ImageProcessingThread(QThread):
processed_image_signal = pyqtSignal(object) processed_image_signal = pyqtSignal(object)
def __init__(self, frame=None): def __init__(self):
super().__init__() super().__init__()
self.frame = frame # 添加 frame 参数
self.face_encodings = []
self.face_names = []
self.face_locations = []
self.face_data = load_face_data()
self.total_image_name = list(self.face_data.keys())
self.total_face_encoding = [np.array(self.face_data[name]) for name in self.total_image_name]
def process_frame(self, frame):
"""实时处理帧,匹配已知人脸"""
self.face_locations = face_recognition.face_locations(frame)
face_encodings = face_recognition.face_encodings(frame, self.face_locations)
names = []
for face_encoding in face_encodings:
name = "Unknown"
face_distances = face_recognition.face_distance(self.total_face_encoding, face_encoding)
if face_distances.size > 0:
min_distance = np.min(face_distances)
best_match_index = np.argmin(face_distances)
if min_distance < self.dynamic_tolerance(): # 使用动态容忍度
name = self.total_image_name[best_match_index]
names.append(name)
self.face_names = names
return frame
def dynamic_tolerance(self):
# 动态调整容忍度,可以基于一些规则来调整,如帧内错误率、识别准确率等
error_rate = self.calculate_error_rate()
if error_rate > 0.1:
return 0.5 # 高容忍度以减少错误
else:
return 0.4 # 适中容忍度
def calculate_error_rate(self):
# 计算识别错误率,作为动态调整容忍度的依据
total_faces = len(self.total_face_encoding)
unmatched_faces = sum(1 for name in self.face_names if name == "Unknown")
return unmatched_faces / total_faces if total_faces > 0 else 0
def set_frame(self, frame):
self.frame = frame
def run(self): def run(self):
while True: while True:
if self.frame is not None: # 在这里添加图像处理代码
self.process_frame(self.frame) # 这里暂时只是将图像传递给下一个线程
self.processed_image_signal.emit(self.frame) time.sleep(0.01)
time.sleep(0.01) # 控制帧率 self.processed_image_signal.emit(None)
# 摄像头采集线程 # 摄像头采集线程
class CameraThread(QThread): class CameraThread(QThread):
@ -283,8 +33,9 @@ class CameraThread(QThread):
def __init__(self, camera_url, circuit_id: int = 0): def __init__(self, camera_url, circuit_id: int = 0):
super().__init__() super().__init__()
self.camera_url = camera_url
self.face_detection: bool = True self.camera_url = camera_url # 摄像头url地址, 整数 或者 字符串
self.face_detection: bool = False
if isinstance(camera_url, int): if isinstance(camera_url, int):
self.camera_url_str = str(camera_url) self.camera_url_str = str(camera_url)
@ -295,12 +46,10 @@ class CameraThread(QThread):
self.running: bool = True self.running: bool = True
self.fps = 0 self.fps = 0
self.frame_count = 0
self.fps_time = 0
self.cycle_limit = DEFAULT_VIDEO_SLEEP_MS self.cycle_limit = DEFAULT_VIDEO_SLEEP_MS
self.cycle_ms = 0 self.cycle_ms = 0
self.circuit_id = circuit_id self.circuit_id = circuit_id # 摄像头对应的回路, 组合开关每一个回路都有对应的摄像头
self.is_signal_connect = False self.is_signal_connect = False
self.is_emit = False self.is_emit = False
@ -311,6 +60,7 @@ class CameraThread(QThread):
self.is_signal_connect = True self.is_signal_connect = True
def signal_disconnect(self): def signal_disconnect(self):
# 判断信号是否已连接
if self.is_signal_connect: if self.is_signal_connect:
self.image_signal.disconnect() self.image_signal.disconnect()
self.is_signal_connect = False self.is_signal_connect = False
@ -322,6 +72,7 @@ class CameraThread(QThread):
else: else:
self.cycle_limit = cycle_ms self.cycle_limit = cycle_ms
# 新建函数,改变函数延时方法
def change_camera_url(self, camera_url: str): def change_camera_url(self, camera_url: str):
if self.circuit_id == camera_url: if self.circuit_id == camera_url:
self.set_video_cycle_ms(DEFAULT_VIDEO_SLEEP_MS) self.set_video_cycle_ms(DEFAULT_VIDEO_SLEEP_MS)
@ -329,115 +80,364 @@ class CameraThread(QThread):
self.set_video_cycle_ms(1000) self.set_video_cycle_ms(1000)
def close(self): def close(self):
if self.cap is None: if self.cap == None: # 初始化一直未完成
self.terminate() self.terminate()
self.running = False self.running = False
def run(self): def run(self):
process_count = 0 process_count = 0
fps_time = 0 fps_time = 0
face_thread = ImageProcessingThread()
face_thread.start()
self.match_count = 0 # 初始化匹配帧数计数器 while self.running == True:
inform_msg = "cameral init start, url = " + self.camera_url_str
while self.running:
inform_msg = "Camera init start, URL = " + self.camera_url_str
print_inform_msg(inform_msg) print_inform_msg(inform_msg)
try: try:
self.cap = cv2.VideoCapture(self.camera_url) # 强制使用 BGR 格式 if isinstance(self.camera_url, int):
if self.cap.isOpened(): # 在 Windows 平台下,使用默认的 cv2.VideoCapture 接口
inform_msg = "Camera Init Success, URL = " + self.camera_url_str self.cap = cv2.VideoCapture(self.camera_url, cv2.CAP_DSHOW)
else:
# 在 Linux 平台下,使用默认的 cv2.VideoCapture 接口
self.cap = cv2.VideoCapture(self.camera_url)
if self.cap != None:
inform_msg = "cameral Init Success, url = " + self.camera_url_str
self.is_emit = True self.is_emit = True
print_inform_msg(inform_msg) print_inform_msg(inform_msg)
else: else:
inform_msg = "Camera connection timeout, URL = " + self.camera_url_str inform_msg = "cameral connection timeout, url = " + self.camera_url_str
print_error_msg(inform_msg) print_inform_msg(inform_msg)
except Exception as e: except Exception as e:
self.cap = None self.cap = None
inform_msg = "Camera Init Fail, URL = " + self.camera_url_str inform_msg = "cameral camera Init Fail, url = " + self.camera_url_str
print_error_msg(inform_msg) print_error_msg(inform_msg)
base_time = time.time() base_time = time.time()
while self.running and self.cap: while self.running and self.cap != None:
# 延时20ms
time.sleep(DEFAULT_VIDEO_SLEEP_MS / 1000) time.sleep(DEFAULT_VIDEO_SLEEP_MS / 1000)
if self.cycle_ms + DEFAULT_VIDEO_SLEEP_MS < self.cycle_limit: if self.cycle_ms + DEFAULT_VIDEO_SLEEP_MS < self.cycle_limit:
self.cycle_ms += DEFAULT_VIDEO_SLEEP_MS self.cycle_ms += DEFAULT_VIDEO_SLEEP_MS
self.cap.grab() self.cap.grab() # 抛弃多余的帧,保持最新帧
continue continue
else: else:
self.cycle_ms = 0 self.cycle_ms = 0
try: try:
ret, frame = self.cap.read() ret, frame = self.cap.read()
if not ret:
break
face_thread.set_frame(frame)
cur_time = time.time() cur_time = time.time()
execution_time = cur_time - base_time execution_time = cur_time - base_time
base_time = cur_time base_time = cur_time
process_count += 1 process_count += 1
fps_time += execution_time fps_time += execution_time
if fps_time >= 1: # 每隔1秒重新计算 FPS
if fps_time >= 1:
self.fps = process_count self.fps = process_count
process_count = 0 process_count = 0
fps_time = 0 fps_time = 0
if execution_time < 5: if execution_time < 5:
frame: QObject = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) image_object: QObject = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
for (top, right, bottom, left), name in zip(face_thread.face_locations, face_thread.face_names): self.image_signal.emit(image_object)
if name != "Unknown": # 只绘制已匹配的结果 else: # 时间差大于5秒, 表示网络可能中断过, 退出并重新连接
self.match_count += 1 # 计数成功匹配的帧 err_message = "cameral read timeout, url = " + self.camera_url_str
# cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
# cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_DUPLEX, 1.0, (255, 255, 255), 1)
# 将OpenCV图像转换为PIL图像格式注意要转换色彩空间OpenCV是BGRPIL是RGB
pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(pil_image)
# 这里选择合适的中文字体文件路径,比如系统自带的宋体(不同系统路径可能有差异),并设置字体大小
font = ImageFont.truetype(font_path, 15)
# 在指定位置绘制中文
draw.text((left + 12, bottom + 12), name, font=font, fill=(255, 255, 255))
# 再将PIL图像转换回OpenCV图像格式
frame = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
else:
name = "未在人脸库中,无操作权限"
pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(pil_image)
#设置字体大小
font = ImageFont.truetype(font_path, 15)
# 在指定位置绘制中文
draw.text((left + 12, bottom + 12), name, font=font, fill=(255, 255, 255))
# 再将PIL图像转换回OpenCV图像格式
frame = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
cv2.rectangle(frame, (left, top), (right, bottom), (255, 0, 0), 2)
self.image_signal.emit(frame)
else:
err_message = "Camera read timeout, URL = " + self.camera_url_str
print_error_msg(err_message) print_error_msg(err_message)
break break
except Exception as e: except Exception as e:
err_message = "Camera read exception, URL = " + self.camera_url_str err_message = "cameral read timeout, url = " + self.camera_url_str
self.is_emit = False
print_error_msg(err_message) print_error_msg(err_message)
if self.running: if self.running == True:
time.sleep(2) time.sleep(2)
break break
if self.cap: print_inform_msg("cameral connection End")
self.cap.release()
self.cap = None
print_inform_msg("Camera connection ended")
time.sleep(0.01) time.sleep(0.01)
if self.cap != None:
self.cap.release()
self.cap = None
# - * - coding:utf - 8 - * -
# import sys
# import cv2
# import os
# import time
# import subprocess
# import face_recognition
# import numpy as np
# from PIL import Image, ImageDraw, ImageFont
# from PyQt5.QtCore import QThread, pyqtSignal, QObject
# from print_color import *
# current_dir = os.path.dirname(__file__)
# share_code_dir = os.path.abspath(os.path.join(current_dir, '..', '..'))
# sys.path.append(share_code_dir)
# DEFAULT_VIDEO_SLEEP_MS = 20
# # 定义路径常量
# npy_file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'face_data/face_data.npy'))
# image_folder_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'face_data'))
# font_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'font/hanzi.ttc'))
# def load_face_data():
# face_data = {}
# try:
# face_data = np.load(npy_file_path, allow_pickle=True).item()
# print_debug_msg(f"Loaded {len(face_data)} face encodings from {npy_file_path}.")
# except Exception as e:
# print_error_msg(f"Error loading face encodings: {e}")
# current_images = [f for f in os.listdir(image_folder_path) if f.endswith('.jpg')]
# current_image_set = set(os.path.splitext(f)[0] for f in current_images)
# known_image_set = set(face_data.keys())
# added_images = current_image_set - known_image_set
# removed_images = known_image_set - current_image_set
# for image_name in added_images:
# image_path = os.path.join(image_folder_path, f"{image_name}.jpg")
# try:
# image = face_recognition.load_image_file(image_path)
# face_encodings = face_recognition.face_encodings(image)
# if face_encodings:
# face_data[image_name] = face_encodings[0].tolist()
# print_debug_msg(f"Added encoding for {image_name}.")
# else:
# print_warning_msg(f"[WARNING] No face detected in {image_name}.jpg.")
# except Exception as e:
# print_error_msg(f"[ERROR] Error processing {image_name}.jpg: {e}")
# for removed_image in removed_images:
# del face_data[removed_image]
# print_debug_msg(f"Removed encoding for {removed_image}.")
# np.save(npy_file_path, face_data)
# print_debug_msg(f"Updated face data saved with {len(face_data)} entries.")
# return face_data
# class ImageProcessingThread(QThread):
# processed_image_signal = pyqtSignal(object)
# def __init__(self, frame=None):
# super().__init__()
# self.frame = frame # 添加 frame 参数
# self.face_encodings = []
# self.face_names = []
# self.face_locations = []
# self.face_data = load_face_data()
# self.total_image_name = list(self.face_data.keys())
# self.total_face_encoding = [np.array(self.face_data[name]) for name in self.total_image_name]
# def process_frame(self, frame):
# """实时处理帧,匹配已知人脸"""
# self.face_locations = face_recognition.face_locations(frame)
# face_encodings = face_recognition.face_encodings(frame, self.face_locations)
# names = []
# for face_encoding in face_encodings:
# name = "Unknown"
# face_distances = face_recognition.face_distance(self.total_face_encoding, face_encoding)
# if face_distances.size > 0:
# min_distance = np.min(face_distances)
# best_match_index = np.argmin(face_distances)
# if min_distance < self.dynamic_tolerance(): # 使用动态容忍度
# name = self.total_image_name[best_match_index]
# names.append(name)
# self.face_names = names
# return frame
# def dynamic_tolerance(self):
# # 动态调整容忍度,可以基于一些规则来调整,如帧内错误率、识别准确率等
# error_rate = self.calculate_error_rate()
# if error_rate > 0.1:
# return 0.5 # 高容忍度以减少错误
# else:
# return 0.4 # 适中容忍度
# def calculate_error_rate(self):
# # 计算识别错误率,作为动态调整容忍度的依据
# total_faces = len(self.total_face_encoding)
# unmatched_faces = sum(1 for name in self.face_names if name == "Unknown")
# return unmatched_faces / total_faces if total_faces > 0 else 0
# def set_frame(self, frame):
# self.frame = frame
# def run(self):
# while True:
# if self.frame is not None:
# self.process_frame(self.frame)
# self.processed_image_signal.emit(self.frame)
# time.sleep(0.01) # 控制帧率
# # 摄像头采集线程
# class CameraThread(QThread):
# image_signal = pyqtSignal(object)
# def __init__(self, camera_url, circuit_id: int = 0):
# super().__init__()
# self.camera_url = camera_url
# self.face_detection: bool = True
# if isinstance(camera_url, int):
# self.camera_url_str = str(camera_url)
# else:
# self.camera_url_str = camera_url
# self.cap: cv2.VideoCapture = None
# self.running: bool = True
# self.fps = 0
# self.frame_count = 0
# self.fps_time = 0
# self.cycle_limit = DEFAULT_VIDEO_SLEEP_MS
# self.cycle_ms = 0
# self.circuit_id = circuit_id
# self.is_signal_connect = False
# self.is_emit = False
# self.set_video_cycle_ms(2000)
# def signal_connect(self, slot_func):
# self.image_signal.connect(slot_func)
# self.is_signal_connect = True
# def signal_disconnect(self):
# if self.is_signal_connect:
# self.image_signal.disconnect()
# self.is_signal_connect = False
# def set_video_cycle_ms(self, cycle_ms: int = 10):
# if self.cycle_limit != cycle_ms:
# if cycle_ms <= DEFAULT_VIDEO_SLEEP_MS:
# self.cycle_limit = DEFAULT_VIDEO_SLEEP_MS
# else:
# self.cycle_limit = cycle_ms
# def change_camera_url(self, camera_url: str):
# if self.circuit_id == camera_url:
# self.set_video_cycle_ms(DEFAULT_VIDEO_SLEEP_MS)
# else:
# self.set_video_cycle_ms(1000)
# def close(self):
# if self.cap is None:
# self.terminate()
# self.running = False
# def run(self):
# process_count = 0
# fps_time = 0
# face_thread = ImageProcessingThread()
# face_thread.start()
# self.match_count = 0 # 初始化匹配帧数计数器
# while self.running:
# inform_msg = "Camera init start, URL = " + self.camera_url_str
# print_inform_msg(inform_msg)
# try:
# self.cap = cv2.VideoCapture(self.camera_url) # 强制使用 BGR 格式
# if self.cap.isOpened():
# inform_msg = "Camera Init Success, URL = " + self.camera_url_str
# self.is_emit = True
# print_inform_msg(inform_msg)
# else:
# inform_msg = "Camera connection timeout, URL = " + self.camera_url_str
# print_error_msg(inform_msg)
# except Exception as e:
# self.cap = None
# inform_msg = "Camera Init Fail, URL = " + self.camera_url_str
# print_error_msg(inform_msg)
# base_time = time.time()
# while self.running and self.cap:
# time.sleep(DEFAULT_VIDEO_SLEEP_MS / 1000)
# if self.cycle_ms + DEFAULT_VIDEO_SLEEP_MS < self.cycle_limit:
# self.cycle_ms += DEFAULT_VIDEO_SLEEP_MS
# self.cap.grab()
# continue
# else:
# self.cycle_ms = 0
# try:
# ret, frame = self.cap.read()
# if not ret:
# break
# face_thread.set_frame(frame)
# cur_time = time.time()
# execution_time = cur_time - base_time
# base_time = cur_time
# process_count += 1
# fps_time += execution_time
# if fps_time >= 1: # 每隔1秒重新计算 FPS
# self.fps = process_count
# process_count = 0
# fps_time = 0
# if execution_time < 5:
# frame: QObject = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# for (top, right, bottom, left), name in zip(face_thread.face_locations, face_thread.face_names):
# if name != "Unknown": # 只绘制已匹配的结果
# self.match_count += 1 # 计数成功匹配的帧
# # cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
# # cv2.putText(frame, name, (left + 6, bottom - 6), cv2.FONT_HERSHEY_DUPLEX, 1.0, (255, 255, 255), 1)
# # 将OpenCV图像转换为PIL图像格式注意要转换色彩空间OpenCV是BGRPIL是RGB
# pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
# draw = ImageDraw.Draw(pil_image)
# # 这里选择合适的中文字体文件路径,比如系统自带的宋体(不同系统路径可能有差异),并设置字体大小
# font = ImageFont.truetype(font_path, 15)
# # 在指定位置绘制中文
# draw.text((left + 12, bottom + 12), name, font=font, fill=(255, 255, 255))
# # 再将PIL图像转换回OpenCV图像格式
# frame = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
# cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
# else:
# name = "未在人脸库中,无操作权限"
# pil_image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
# draw = ImageDraw.Draw(pil_image)
# #设置字体大小
# font = ImageFont.truetype(font_path, 15)
# # 在指定位置绘制中文
# draw.text((left + 12, bottom + 12), name, font=font, fill=(255, 255, 255))
# # 再将PIL图像转换回OpenCV图像格式
# frame = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)
# cv2.rectangle(frame, (left, top), (right, bottom), (255, 0, 0), 2)
# self.image_signal.emit(frame)
# else:
# err_message = "Camera read timeout, URL = " + self.camera_url_str
# print_error_msg(err_message)
# break
# except Exception as e:
# err_message = "Camera read exception, URL = " + self.camera_url_str
# print_error_msg(err_message)
# if self.running:
# time.sleep(2)
# break
# if self.cap:
# self.cap.release()
# self.cap = None
# print_inform_msg("Camera connection ended")
# time.sleep(0.01)

View File

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
from __future__ import annotations
import sys, os, io, csv, time, datetime
from typing import Callable, Optional
# PyQt5
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer, QSize
from PyQt5.QtGui import QImage, QPixmap, QKeySequence
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QPushButton, QComboBox, QTextEdit, QFileDialog, QMessageBox,
QGroupBox, QGridLayout, QDialog, QFormLayout, QSpinBox, QCheckBox,
QLineEdit, QTableWidget, QTableWidgetItem,QDialogButtonBox,QShortcut
)
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import cv2
from PIL import Image
import serial
import serial.tools.list_ports
# ---------- 协议导入----------
from Shared_CODE.FaceRecognitionProtocol import (
build_reset, build_uvc_view, build_face_view, build_verify,
build_enroll_itg_single, build_delete_all, build_get_all_userid,build_delete_user,
MID_REPLY, MID_NOTE, CMD_ENROLL, CMD_ENROLL_ITG,
parse_reply, parse_note
)
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
ui_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../Shared_UI'))
enrill_ui_file_path = os.path.join(ui_path, "enroll.ui")
class EnrollItgSingleDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi(enrill_ui_file_path, self)
self.cb_admin.setCurrentIndex(0)
self.btn_ok.clicked.connect(self.accept)
def values(self):
admin_val = self.cb_admin.currentIndex()
uname = self.le_name.text().strip()[:32]
face_dir = 0
if self.chk_mid.isChecked(): face_dir |= 0x01
if self.chk_right.isChecked(): face_dir |= 0x02
if self.chk_left.isChecked(): face_dir |= 0x04
if self.chk_down.isChecked(): face_dir |= 0x08
if self.chk_up.isChecked(): face_dir |= 0x10
if face_dir == 0: face_dir = 0x01
timeout_val = self.sb_timeout.value()
try:
itg_val = int(self.le_itg.text().strip(), 0)
except ValueError:
itg_val = 0
return admin_val, uname, face_dir, timeout_val, itg_val
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = EnrollItgSingleDialog()
dialog.exec()
sys.exit(0)

View File

@ -0,0 +1,163 @@
# -*- coding: utf-8 -*-
from __future__ import annotations
import sys, os, io, csv, time, datetime
from typing import Callable, Optional
# PyQt5
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer, QSize
from PyQt5.QtGui import QImage, QPixmap, QKeySequence
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QPushButton, QComboBox, QTextEdit, QFileDialog, QMessageBox,
QGroupBox, QGridLayout, QDialog, QFormLayout, QSpinBox, QCheckBox,
QLineEdit, QTableWidget, QTableWidgetItem,QDialogButtonBox,QShortcut, QHeaderView
)
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import cv2
from PIL import Image
import serial
import serial.tools.list_ports
# ---------- 协议导入----------
from Shared_CODE.FaceRecognitionProtocol import (
build_reset, build_uvc_view, build_face_view, build_verify,
build_enroll_itg_single, build_delete_all, build_get_all_userid,build_delete_user,
MID_REPLY, MID_NOTE, CMD_ENROLL, CMD_ENROLL_ITG,
parse_reply, parse_note
)
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
ui_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../Shared_UI'))
users_ui_file_path = os.path.join(ui_path, "DialogUsers.ui")
CSV_FILE = os.path.join(ui_path, "users.csv")
# -------------------- CSV 工具 --------------------"
def load_users():
users = []
try:
with open(CSV_FILE, "r", encoding="utf-8") as f:
reader = csv.reader(f)
for row in reader:
if len(row) >= 2:
user = {"user_id": row[0], "user_name": row[1]}
user["created_at"] = row[2] if len(row) >= 3 else ""
users.append(user)
except FileNotFoundError:
pass
return users
def save_users_list(users):
with open(CSV_FILE, "w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
for u in users:
w.writerow([u.get("user_id", ""), u.get("user_name", ""), u.get("created_at", "")])
def save_user(user_id: int, user_name: str) -> bool:
users = load_users()
for u in users:
if str(u["user_id"]) == str(user_id):
return False
created_at = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
users.append({"user_id": str(user_id), "user_name": user_name, "created_at": created_at})
save_users_list(users)
return True
class UserManageDialog(QDialog):
def __init__(self, parent=None, send_func=None):
super().__init__(parent)
self.send_func = send_func
uic.loadUi(users_ui_file_path, self)
self.btn_delete.clicked.connect(self.delete_selected)
self.btn_refresh.clicked.connect(self.refresh)
self.btn_get.clicked.connect(self.get_from_device)
self.btn_del_all.clicked.connect(self.delete_all_users)
self.refresh()
header = self.table.horizontalHeader()
# 用户ID列固定宽度
self.table.setColumnWidth(0, 100)
# 用户名列自适应内容
header.setSectionResizeMode(1, QHeaderView.ResizeToContents)
# 注册时间列填充剩余空间
header.setSectionResizeMode(2, QHeaderView.Stretch)
self.message_timer = QTimer()
self.message_timer.timeout.connect(self.close_dialog_timeout)
self.setWindowTitle("消息提示")
self.setWindowFlag(Qt.FramelessWindowHint)
button_box : QDialogButtonBox = self.buttonBox
ok_button = button_box.button(QDialogButtonBox.Ok)
if ok_button:
ok_button.setText('确定')
else:
button_box.addButton(QDialogButtonBox.Ok)
#定义4个快捷键, Key_Enter, Key_Escape经常被各类程序模块使用, 用Key_End, 与Key_Home来代替
QShortcut(QKeySequence(Qt.Key_PageDown), self, activated=self.key_enter_process)
QShortcut(QKeySequence(Qt.Key_PageUp), self, activated=self.key_escape_process)
QShortcut(QKeySequence(Qt.Key_End), self, activated=self.key_enter_process)
QShortcut(QKeySequence(Qt.Key_Home), self, activated=self.key_escape_process)
QShortcut(QKeySequence(Qt.Key_Return), self, activated=self.key_enter_process) # 普通回车
def refresh(self):
users = load_users()
self.table.setRowCount(len(users))
for r, u in enumerate(users):
self.table.setItem(r, 0, QTableWidgetItem(str(u.get("user_id", ""))))
self.table.setItem(r, 1, QTableWidgetItem(u.get("user_name", "")))
self.table.setItem(r, 2, QTableWidgetItem(u.get("created_at", "")))
def delete_selected(self):
row = self.table.currentRow()
if row < 0:
QMessageBox.warning(self, "提示", "删除选择用户")
return
uid = self.table.item(row, 0).text()
uname = self.table.item(row, 1).text()
try:
uid_int = int(uid)
self.send_func(build_delete_user(uid_int))
except:
pass
users = [u for u in load_users() if str(u["user_id"]) != uid]
save_users_list(users)
self.refresh()
QMessageBox.information(self, "提示", f"用户 {uname}(ID={uid}) 已删除")
def get_from_device(self):
self.send_func(build_get_all_userid())
def delete_all_users(self):
self.send_func(build_delete_all())
save_users_list([])
self.refresh()
QMessageBox.information(self, "提示", "已请求删除所有用户并清空本地记录")
def key_enter_process(self):
button_box : QDialogButtonBox = self.buttonBox
select_button = button_box.button(QDialogButtonBox.Ok)
if select_button:
select_button.click()
def key_escape_process(self):
button_box : QDialogButtonBox = self.buttonBox
select_button = button_box.button(QDialogButtonBox.Cancel)
if select_button:
select_button.click()
#消息超时
def close_dialog_timeout(self):
self.key_enter_process()
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = UserManageDialog()
dialog.exec()
sys.exit(0)

View File

@ -0,0 +1,54 @@
# -*- coding: utf-8 -*-
from __future__ import annotations
import sys, os, io, csv, time, datetime
from typing import Callable, Optional
# PyQt5
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer, QSize
from PyQt5.QtGui import QImage, QPixmap, QKeySequence
from PyQt5.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QPushButton, QComboBox, QTextEdit, QFileDialog, QMessageBox,
QGroupBox, QGridLayout, QDialog, QFormLayout, QSpinBox, QCheckBox,
QLineEdit, QTableWidget, QTableWidgetItem,QDialogButtonBox,QShortcut
)
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import cv2
from PIL import Image
import serial
import serial.tools.list_ports
# ---------- 协议导入----------
from Shared_CODE.FaceRecognitionProtocol import (
build_reset, build_uvc_view, build_face_view, build_verify,
build_enroll_itg_single, build_delete_all, build_get_all_userid,build_delete_user,
MID_REPLY, MID_NOTE, CMD_ENROLL, CMD_ENROLL_ITG,
parse_reply, parse_note
)
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))
ui_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../Shared_UI'))
verify_ui_file_path = os.path.join(ui_path, "verify.ui")
class VerifyDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
uic.loadUi(verify_ui_file_path, self)
self.cb_rightaway.setCurrentIndex(0)
self.sb_timeout.setValue(10)
self.btn_ok.clicked.connect(self.accept)
def values(self):
pd_val = self.cb_rightaway.currentIndex()
timeout_val = self.sb_timeout.value()
return pd_val, timeout_val
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = VerifyDialog()
dialog.exec()
sys.exit(0)

View File

@ -0,0 +1,405 @@
# -*- coding: utf-8 -*-
from __future__ import annotations
import struct
from dataclasses import dataclass
from typing import Optional, Tuple, List
from QT5_Project.Shared_CODE.DialogInform import DialogInform
SYNC = b"\xEF\xAA"
# Msg IDs
MID_REPLY = 0x00
MID_NOTE = 0x01
MID_IMAGE = 0x02
# Host->Module (Command) IDs (subset used by the tool)
CMD_RESET = 0x10
CMD_GET_STATUS = 0x11
CMD_VERIFY = 0x12
CMD_ENROLL = 0x13
CMD_DELETE_USER = 0x20
CMD_DELETE_ALL = 0x21
CMD_GET_USER_INFO = 0x22
CMD_FACE_RESET = 0x23
CMD_GET_ALL_USERID = 0x24
CMD_ENROLL_ITG = 0x26
CMD_GET_VERSION = 0x30
CMD_INIT_ENCRYPTION = 0x50
CMD_SET_RELEASE_KEY = 0x52
CMD_SET_DEBUG_KEY = 0x53
CMD_GET_SN = 0x93
CMD_READ_USB_UVC = 0xB0
CMD_SET_USB_UVC = 0xB1
CMD_FACE_VIEW = 0xB5
CMD_UVC_VIEW = 0xC0
CMD_UPGRADE_FW = 0xF6
CMD_ENROLL_WITH_PHOTO = 0xF7
CMD_LED_CONTROL = 0xF9
CMD_ENROLL_SINGLE = 0x1D
CMD_DEMO_MODE = 0xFE
# NOTE nids
NID_READY = 0x00
NID_FACE_STATE = 0x01
NID_UNKNOWNERROR = 0x02
NID_OTA_DONE = 0x03
NID_EYE_STATE = 0x04
# REPLY result codes (partial)
MR_SUCCESS = 0x00
MR_REJECTED = 0x01
MR_ABORTED = 0x02
MR_FAILED4_CAMERA = 0x04
MR_FAILED4_UNKNOWNREASON = 0x05
MR_FAILED4_INVALIDPARAM = 0x06
MR_FAILED4_NOMEMORY = 0x07
MR_FAILED4_UNKNOWNUSER = 0x08
MR_FAILED4_MAXUSER = 0x09
MR_FAILED4_FACEENROLLED = 0x0A
MR_FAILED4_LIVENESSCHECK = 0x0C
MR_FAILED4_TIMEOUT = 0x0D
MR_FAILED4_AUTHORIZATION = 0x0E
MR_FAILED4_READ_FILE = 0x13
MR_FAILED4_WRITE_FILE = 0x14
MR_FAILED4_NO_ENCRYPT = 0x15
MR_FAILED4_NO_RGBIMAGE = 0x17
MR_FAILED4_JPGPHOTO_LARGE = 0x18
MR_FAILED4_JPGPHOTO_SMALL = 0x19
# ---- 映射表 ----
# 指令名称映射指令ID -> 中文名称)
CMD_NAMES = {
CMD_RESET: "复位",
CMD_GET_STATUS: "获取状态",
CMD_VERIFY: "人脸验证",
CMD_LED_CONTROL: "LED控制",
CMD_ENROLL: "人脸录入(多帧)",
CMD_ENROLL_SINGLE: "人脸录入(单帧)",
CMD_ENROLL_ITG: "人脸录入(集成式)",
CMD_DELETE_USER: "删除单个用户",
CMD_DELETE_ALL: "删除所有用户",
CMD_GET_USER_INFO: "获取用户信息",
CMD_GET_ALL_USERID: "获取所有用户ID",
CMD_GET_VERSION: "获取版本信息",
CMD_INIT_ENCRYPTION: "初始化加密",
CMD_ENROLL_WITH_PHOTO: "照片录入注册",
CMD_FACE_VIEW: "人脸框显示切换",
CMD_UVC_VIEW: "视频模式切换",
}
# 结果码名称映射(结果码 -> 中文名称)
RESULT_NAMES = {
0x00: "成功",
0x01: "被拒绝",
0x02: "已中止",
0x04: "失败:相机异常",
0x05: "失败:未知错误",
0x06: "失败:参数无效",
0x07: "失败:内存不足",
0x08: "失败:用户不存在",
0x09: "失败:超过最大用户数",
0x0A: "失败:已录入该用户",
0x0C: "失败:活体检测未通过",
0x0D: "失败:超时",
0x0E: "失败:认证失败",
0x13: "失败:文件读取错误",
0x14: "失败:文件写入错误",
0x15: "失败:未启用加密",
0x17: "失败:无RGB图像",
0x18: "失败:JPG文件过大",
0x19: "失败:JPG文件过小",
}
# 通知状态名称映射(状态码 -> 中文名称)
NOTE_NAMES = {
0x00: "就绪",
0x01: "人脸状态",
0x02: "未知错误",
0x03: "OTA升级完成",
0x04: "眼睛状态",
}
# 帧头同步字
SYNC = b"\xEF\xAA"
#########################################################################################
#########################################################################################
def xor_checksum(data: bytes) -> int:
"""
计算异或校验 (XOR),范围为整个帧的 MsgID + Size + Data 部分,
不包括 SYNC(2字节) 和最后的校验字节本身。
"""
chk = 0
for b in data:
chk ^= b
return chk & 0xFF
def pack_frame(msg_id: int, data: bytes = b"") -> bytes:
"""
封装一帧数据
格式: SYNC(2) + MsgID(1) + Size(2) + Data(N) + Chk(1)
- MsgID: 命令字
- Size : Data 长度 (big endian, 2字节)
- Data : 负载
- Chk : 校验 = MsgID..Data 的所有字节异或
"""
size = struct.pack(">H", len(data)) # 大端编码
head = bytes([msg_id]) + size + data # MsgID + Size + Data
chk = xor_checksum(head) # 计算校验
return SYNC + head + bytes([chk]) # 拼装完整帧
def unpack_frame(buf: bytes) -> Tuple[Optional[dict], int]:
"""
尝试从缓冲区中解析出一帧。
返回: (frame_dict, consumed_bytes)
- 如果没有完整帧: (None, 0)
- 如果解析成功: ({"msg_id":..,"size":..,"data":..,"raw":..}, 已消耗字节数)
- 如果校验失败: ({"error":"checksum","raw":..}, 已消耗字节数)
buf: 原始接收缓冲区
"""
if len(buf) < 6: # 最小帧长: SYNC(2) + MsgID(1) + Size(2) + Chk(1)
return None, 0
# 查找 SYNC
idx = buf.find(SYNC)
if idx == -1:
# 没找到帧头,整个缓冲区丢弃
return None, len(buf)
# 余下字节不足以解析长度字段,继续等待
if len(buf) - idx < 6:
return None, 0
msg_id = buf[idx+2]
size = struct.unpack(">H", buf[idx+3:idx+5])[0]
total = 2 + 1 + 2 + size + 1 # 整个帧长度
# 数据不完整,继续等待
if len(buf) - idx < total:
return None, 0
# 截取一帧
frame = buf[idx: idx+total]
content = frame[2:-1] # 不包括 SYNC 和最后的校验字节
chk = frame[-1]
# 校验
if xor_checksum(content) != chk:
return {"error": "checksum", "raw": frame}, total
# 提取有效载荷
data = frame[5:-1]
return {
"msg_id": msg_id,
"size": size,
"data": data,
"raw": frame
}, total
# ------ Builders for key commands ------
def build_reset() -> bytes:
return pack_frame(CMD_RESET)
def build_get_status() -> bytes:
return pack_frame(CMD_GET_STATUS)
def build_led_control(state: int) -> bytes:
"""
构建LED控制指令帧(0xF9指令),符合校验位逻辑
:param state: LED状态值,0=灭,1=亮
"""
# 数据部分1字节状态值根据模组要求定义如0x00=灭0x01=亮)
data = struct.pack("B", state & 0xFF) # 确保是单字节
return pack_frame(CMD_LED_CONTROL, data) # CMD_LED_CONTROL = 0xF9
#pd_rightaway: int验证成功后是否立即断电0=不立即断电1=立即断电仅保留低8位有效通过&0xFF确保
#timeout: int验证超时时间单位范围通常为1-255秒仅保留低8位有效通过&0xFF确保
def build_verify(pd_rightaway, timeout: int = 10) -> bytes:
data = struct.pack("BB", pd_rightaway & 0xFF, timeout & 0xFF)
return pack_frame(CMD_VERIFY, data)
def build_enroll(admin: int, user_name: str, face_dir: int, timeout: int = 10) -> bytes:
name_bytes = user_name.encode("utf-8")[:32]
name_bytes = name_bytes + bytes(32 - len(name_bytes))
data = struct.pack("B", admin & 0xFF) + name_bytes + struct.pack("BB", face_dir & 0xFF, timeout & 0xFF)
return pack_frame(CMD_ENROLL, data)
def build_enroll_single(admin: int, user_name: str, timeout: int = 10) -> bytes:
name_bytes = user_name.encode("utf-8")[:32]
name_bytes = name_bytes + bytes(32 - len(name_bytes))
# face_dir not used per manual for ENROLL_SINGLE
data = struct.pack("B", admin & 0xFF) + name_bytes + struct.pack("BB", 0x00, timeout & 0xFF)
return pack_frame(0x1D, data)
def build_enroll_itg_single(admin: int, user_name: str, face_dir: int, timeout: int, itg_param: int) -> bytes:
"""
构造 ENROLL_ITG_SINGLE 命令帧
admin: 0=普通用户, 1=管理员
user_name: 最多 32 字节
face_dir: 人脸方向 bitmask
timeout: 超时时间 (秒)
itg_param: ITG 参数 (4 字节)
"""
# user_name 补齐到 32 字节
name_bytes = user_name.encode("utf-8")[:32]
name_bytes = name_bytes.ljust(32, b"\x00")
payload = struct.pack(
">B32sBBI",
admin & 0xFF,
name_bytes,
face_dir & 0xFF,
timeout & 0xFF,
itg_param & 0xFFFFFFFF,
)
return pack_frame(CMD_ENROLL_ITG, payload)
def build_delete_user(user_id: int) -> bytes:
return pack_frame(CMD_DELETE_USER, struct.pack("BB", (user_id>>8)&0xFF, user_id&0xFF))
def build_delete_all() -> bytes:
return pack_frame(CMD_DELETE_ALL)
def build_get_user_info(user_id: int) -> bytes:
return pack_frame(CMD_GET_USER_INFO, struct.pack("BB", (user_id>>8)&0xFF, user_id&0xFF))
def build_get_all_userid() -> bytes:
return pack_frame(CMD_GET_ALL_USERID)
def build_get_version() -> bytes:
return pack_frame(CMD_GET_VERSION)
def build_uvc_view(state: int) -> bytes:
return pack_frame(CMD_UVC_VIEW, struct.pack("B", state & 0xFF))
def build_face_view(state: int) -> bytes:
return pack_frame(CMD_FACE_VIEW, struct.pack("B", state & 0xFF))
def build_init_encryption(seed4: bytes, mode: int = 0) -> bytes:
if len(seed4) != 4:
raise ValueError("seed must be 4 bytes")
return pack_frame(CMD_INIT_ENCRYPTION, seed4 + bytes([mode & 0xFF]))
def build_enroll_with_photo_begin(photo_size: int) -> bytes:
# According to manual: Seq=0, Photo data=4-byte big-endian size
data = b"\x00\x00" + struct.pack(">I", photo_size)
return pack_frame(CMD_ENROLL_WITH_PHOTO, data)
def build_enroll_with_photo_chunk(seq: int, chunk: bytes) -> bytes:
# Seq starts from 1 and increases; MTU=246
data = struct.pack(">H", seq & 0xFFFF) + chunk
return pack_frame(CMD_ENROLL_WITH_PHOTO, data)
# ---- Parsers (Reply / Note / Image) ----
def parse_reply(data: bytes) -> dict:
if len(data) < 2:
return {"type": "REPLY", "error": "short"}
mid = data[0]
result = data[1]
rest = data[2:]
# 通用字段
info = {
"type": "REPLY",
"mid": mid,
"mid_name": CMD_NAMES.get(mid, f"0x{mid:02X}"),
"result": result,
"result_name": RESULT_NAMES.get(result, f"0x{result:02X}"),
"ok": (result == 0), # 成功标志
}
# ========== 分支解析 ==========
if mid == CMD_VERIFY and len(rest) >= 36:
uid = (rest[0] << 8) | rest[1]
name = rest[2:34].rstrip(b"\x00").decode("utf-8", errors="ignore")
admin = rest[34]
unlock = rest[35]
info.update({
"user_id": uid,
"user_name": name,
"admin": admin,
"unlock_status": unlock,
})
elif mid in (CMD_ENROLL, 0x1D, CMD_ENROLL_ITG) and len(rest) >= 3:
uid = (rest[0] << 8) | rest[1]
face_dir = rest[2]
info.update({"user_id": uid, "face_direction": face_dir})
elif mid == CMD_GET_STATUS and len(rest) >= 1:
status = rest[0]
status_map = {0: "空闲", 1: "录入中", 2: "验证中"}
info.update({"status": status, "status_name": status_map.get(status, f"0x{status:02X}")})
elif mid == CMD_GET_USER_INFO and len(rest) >= 35:
uid = (rest[0] << 8) | rest[1]
name = rest[2:34].decode("ascii", errors="ignore")
admin = rest[34]
info.update({"user_id": uid, "user_name": name, "admin": admin})
elif mid == CMD_GET_ALL_USERID and len(rest) >= 1:
n = rest[0]
ids = [(rest[i] << 8) | rest[i + 1] for i in range(1, 1 + 2 * n, 2) if i + 1 < len(rest)]
info.update({"count": n, "user_ids": ids})
elif mid == CMD_GET_VERSION:
info["version_str"] = rest.decode("ascii", errors="ignore")
elif mid == CMD_LED_CONTROL and len(rest) >= 1:
led_state = rest[0]
led_map = {0: "", 1: ""}
info.update({"led_state": led_state, "led_state_name": led_map.get(led_state, f"0x{led_state:02X}")})
elif mid == CMD_ENROLL_WITH_PHOTO:
if len(rest) >= 2:
seq = (rest[0] << 8) | rest[1]
info["seq"] = seq
if len(rest) >= 6:
uid = (rest[2] << 8) | rest[3]
info["user_id"] = uid
# 自动生成提示消息
if info["ok"]:
if mid == CMD_VERIFY and "user_id" in info:
info["message"] = (
f"{info['mid_name']} 成功 - 用户ID: {info['user_id']}"
)
else:
info["message"] = f"{info['mid_name']} 成功"
else:
info["message"] = f"{info['mid_name']} 失败: {info['result_name']}"
return info
def parse_note(data: bytes) -> dict:
if len(data) < 1:
return {"type":"NOTE","error":"short"}
nid = data[0]
rest = data[1:]
info = {"type":"NOTE","nid": nid, "nid_name": NOTE_NAMES.get(nid, f"0x{nid:02X}")}
if nid == NID_FACE_STATE and len(rest) >= 16:
vals = struct.unpack(">hhhhhhhh", rest[:16])
info.update({
"state": vals[0],
"left": vals[1], "top": vals[2], "right": vals[3], "bottom": vals[4],
"yaw": vals[5], "pitch": vals[6], "roll": vals[7]
})
return info
def parse_image(data: bytes) -> dict:
return {"type":"IMAGE","jpeg":data}

View File

@ -149,7 +149,8 @@ class system_parameter :
default_config = { default_config = {
'screen_blanking_time': '360', 'screen_blanking_time': '360',
'system_password': '2008', 'system_password': '2008',
'language': 'zh_CN' 'language': 'zh_CN',
"facerecognition_timeout": '10',
} }
# 如果配置文件存在,加载配置 # 如果配置文件存在,加载配置
@ -161,6 +162,7 @@ class system_parameter :
self.screen_blanking_time = system_param.get('blanking_time', default_config['screen_blanking_time']) self.screen_blanking_time = system_param.get('blanking_time', default_config['screen_blanking_time'])
self.system_password = system_param.get('password', default_config['system_password']) self.system_password = system_param.get('password', default_config['system_password'])
self.language = system_param.get('language', default_config['language']) self.language = system_param.get('language', default_config['language'])
self.facerecognition_timeout = system_param.get('facerecognition_timeout', default_config['facerecognition_timeout'])
except (configparser.Error, KeyError) as e: except (configparser.Error, KeyError) as e:
# 处理读取配置文件时的错误 # 处理读取配置文件时的错误
print(f"读取配置错误: {e}。使用默认设置。") print(f"读取配置错误: {e}。使用默认设置。")
@ -174,6 +176,7 @@ class system_parameter :
self.screen_blanking_time = default_config['screen_blanking_time'] self.screen_blanking_time = default_config['screen_blanking_time']
self.system_password = default_config['system_password'] self.system_password = default_config['system_password']
self.language = default_config['language'] self.language = default_config['language']
self.facerecognition_timeout = default_config['facerecognition_timeout']
def write_to_ini(self): def write_to_ini(self):
"""将默认配置写入ini文件。""" """将默认配置写入ini文件。"""
@ -181,7 +184,8 @@ class system_parameter :
config['SystemParam'] = { config['SystemParam'] = {
'blanking_time': self.screen_blanking_time, 'blanking_time': self.screen_blanking_time,
'password': self.system_password, 'password': self.system_password,
'language': self.language 'language': self.language,
'facerecognition_timeout': self.facerecognition_timeout
} }
with open("system_parameter.ini", 'w') as configfile: with open("system_parameter.ini", 'w') as configfile:
config.write(configfile) config.write(configfile)
@ -208,12 +212,21 @@ class system_parameter :
def get_system_language(self): def get_system_language(self):
return self.language return self.language
def set_verify_timeout(self, timeout):
self.facerecognition_timeout = timeout
self.write_to_ini()
def get_verify_timeout(self):
return int(self.facerecognition_timeout)
# 向文件存储系统信息 # 向文件存储系统信息
def write_to_ini(self): def write_to_ini(self):
system_param = configparser.ConfigParser() system_param = configparser.ConfigParser()
system_param['SystemParam'] = {'language': self.language, system_param['SystemParam'] = {'language': self.language,
'blanking_time': self.screen_blanking_time, 'blanking_time': self.screen_blanking_time,
'password': self.system_password} 'password': self.system_password,
'facerecognition_timeout': self.facerecognition_timeout}
with open('system_parameter.ini', 'w') as f: with open('system_parameter.ini', 'w') as f:
system_param.write(f) system_param.write(f)

View File

@ -0,0 +1,187 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogInform</class>
<widget class="QDialog" name="DialogInform">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>632</width>
<height>483</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(0, 0, 0, 0);</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>200</x>
<y>270</y>
<width>381</width>
<height>31</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::NoButton</set>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>90</x>
<y>0</y>
<width>411</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<family>Microsoft YaHei UI</family>
<pointsize>16</pointsize>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(255, 170, 0);
font: 16pt &quot;Microsoft YaHei UI&quot;;</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QTableWidget" name="table">
<property name="geometry">
<rect>
<x>60</x>
<y>70</y>
<width>521</width>
<height>295</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<column>
<property name="text">
<string>用户ID</string>
</property>
</column>
<column>
<property name="text">
<string>用户名</string>
</property>
</column>
<column>
<property name="text">
<string>注册时间</string>
</property>
</column>
</widget>
<widget class="QPushButton" name="btn_del_all">
<property name="geometry">
<rect>
<x>388</x>
<y>430</y>
<width>106</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>删除所有用户</string>
</property>
</widget>
<widget class="QPushButton" name="btn_delete">
<property name="geometry">
<rect>
<x>50</x>
<y>430</y>
<width>107</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>删除选中用户</string>
</property>
</widget>
<widget class="QPushButton" name="btn_refresh">
<property name="geometry">
<rect>
<x>163</x>
<y>430</y>
<width>106</width>
<height>23</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(0, 0, 0);</string>
</property>
<property name="text">
<string>刷新</string>
</property>
</widget>
<widget class="QPushButton" name="btn_get">
<property name="geometry">
<rect>
<x>275</x>
<y>430</y>
<width>107</width>
<height>23</height>
</rect>
</property>
<property name="text">
<string>获取设备用户列表</string>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DialogInform</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DialogInform</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogInform</class>
<widget class="QDialog" name="DialogInform">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>587</width>
<height>290</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">border:none;
background-color: rgba(0, 0, 0, 0);</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="geometry">
<rect>
<x>110</x>
<y>160</y>
<width>381</width>
<height>32</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::NoButton</set>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>75</x>
<y>97</y>
<width>411</width>
<height>51</height>
</rect>
</property>
<property name="font">
<font>
<family>Microsoft YaHei UI</family>
<pointsize>16</pointsize>
<italic>false</italic>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(85, 170, 127,0);
color: rgb(255, 170, 0);
font: 16pt &quot;Microsoft YaHei UI&quot;;</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
<widget class="QLabel" name="BG">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>731</width>
<height>291</height>
</rect>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap>img/infrom.png</pixmap>
</property>
</widget>
<zorder>BG</zorder>
<zorder>buttonBox</zorder>
<zorder>label</zorder>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>DialogInform</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>DialogInform</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>EnrollDialog</class>
<widget class="QDialog" name="EnrollDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>480</width>
<height>254</height>
</rect>
</property>
<property name="windowTitle">
<string>ENROLL_ITG_SINGLE</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="lbl_admin">
<property name="text">
<string>是否管理员:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="cb_admin">
<item>
<property name="text">
<string>0 - 普通用户</string>
</property>
</item>
<item>
<property name="text">
<string>1 - 管理员</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="lbl_name">
<property name="text">
<string>用户名:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="le_name"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="lbl_dir">
<property name="text">
<string>人脸方向:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QGroupBox" name="group_dir">
<property name="title">
<string>人脸方向</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="chk_mid">
<property name="text">
<string>MID</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="chk_right">
<property name="text">
<string>RIGHT</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QCheckBox" name="chk_left">
<property name="text">
<string>LEFT</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="chk_down">
<property name="text">
<string>DOWN</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="chk_up">
<property name="text">
<string>UP</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="lbl_timeout">
<property name="text">
<string>超时时间(秒):</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="sb_timeout">
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>300</number>
</property>
<property name="value">
<number>10</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="lbl_itg">
<property name="text">
<string>ITG 参数:</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="le_itg">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QPushButton" name="btn_ok">
<property name="text">
<string>发送</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1 @@
1,1,2025-09-13 10:06:01
1 1 1 2025-09-13 10:06:01

Some files were not shown because too many files have changed in this diff Show More