diff --git a/COM/COM_Robot.py b/COM/COM_Robot.py index eb63de6..9ee31e2 100644 --- a/COM/COM_Robot.py +++ b/COM/COM_Robot.py @@ -1,9 +1,6 @@ import logging from enum import Enum from turtle import Turtle - -from numpy.array_api import trunc - import Constant from COM.COM_TCP import TCPClient import queue @@ -11,6 +8,7 @@ import json from Model.RobotModel import DataAddress, DATARequest, DATAReply, CMDInstructRequest, Instruction from Util.util_log import log from Util.util_math import is_bit_set +#from numpy.array_api import trunc class DetectType(Enum): @@ -45,9 +43,9 @@ class RobotClient(TCPClient): def send_Command(self): try: if self.command_quene.qsize()!=0: - log.log_message(logging.INFO, f'robot-command:从队列获取命令') + # log.log_message(logging.INFO, f'robot-command:从队列获取命令') command = self.command_quene.get() - log.log_message(logging.INFO, f'robot-command:{command}') + #log.log_message(logging.INFO, f'robot-command:{command}') self.client_socket.send(command.encode()) if True: response = self.client_socket.recv(1024).decode('utf-8') diff --git a/CU/Feed_save.py b/CU/Feed_save.py deleted file mode 100644 index f7adaf7..0000000 --- a/CU/Feed_save.py +++ /dev/null @@ -1,829 +0,0 @@ -import copy -import logging -import random -import threading -import time - -import cv2 -import numpy as np -from PyQt5.QtWidgets import QMessageBox -from PySide6.QtCore import Signal, QObject -from PySide6.QtGui import QPixmap - -import Constant -import Expection -from CU.Catch import Catch, CatchStatus -from CU.Detect import Detect, DetectStatus -from Model.FeedModel import PositionModel -from Model.Position import Real_Position, Detection_Position -from enum import Enum, IntEnum -from COM.COM_Robot import RobotClient, DetectType -from Model.RobotModel import CMDInstructRequest, MoveType -from Trace.handeye_calibration import getPosition -from Trace.handeye_calibration import getxyz,getxyz1 -from Util.util_math import get_distance -from Util.util_time import CRisOrFall -#from Vision.camera_coordinate_dete import Detection -from Util.util_log import log -from Model.RobotModel import Instruction -from EMV.EMV import RelayController -from CU.drop import DropPositionManager -class ResetStatus(Enum): - RNone = 0 - RStart = 1 - RRunging = 2 - ROk =3 - -class FeedStatus(IntEnum): - FNone = 0 - FStart = 1 - FCheck = 2 - FMid = 3 - FPhoto = 4 - FTake = 5 - FBroken1 = 6 - FBroken2 =7 - FShake = 8 - FDropBag = 9 - FFinished = 10 - FReverse = 11 - FStartReverse = 12 - -class LineType(Enum): - Straight = 0 - CureMid = 2 - CureEnd = 3 - WORLD = 4 - - -class FeedMidStatus(Enum): - FMid_Start = 1 - FMid_Take = 2 - FMid_Feed= 3 - -class FeedPosition: - def __init__(self,status:FeedStatus,position:Real_Position): - self.status = status - self.position = position - -class FeedLine: - def __init__(self, id, name, feed_positions:list): - self.feed_positions = copy.deepcopy(feed_positions) - self.feeding2end_pos_index = 0 - self.origin2start_pos_index = 0 - self.start2take_pos_index = 0 - self.name = name - self.id = id - - # --- 新增:用于存储从 ini 文件读取的多个投料点坐标 --- - # 这个列表将在加载 ini 时填充 [[x1,y1,z1,u1,v1,w1], [x2,y2,z2,u2,v2,w2], ...] - self.drop_point_list = [] - - def get_current_feed_position(self,is_reverse): - pos = self.feeding_to_end[ (self.feeding2end_pos_index+1)%len(self.feeding_to_end) if is_reverse else self.feeding2end_pos_index-1] - return pos - def get_current_take_position(self,is_reverse): - pos = self.start_to_take[ (self.start2take_pos_index+1)%len(self.start_to_take) if is_reverse else self.start2take_pos_index-1] - return pos - def get_current_start_position(self,is_reverse): - pos = self.origin_to_start[(self.origin2start_pos_index+1)%len(self.origin_to_start) if is_reverse else self.origin2start_pos_index-1] - return pos - - def get_next_feed_position(self,reverse:bool=False): - pos = self.feeding_to_end[self.feeding2end_pos_index] - if reverse: - self.feeding2end_pos_index -= 1 - if self.feeding2end_pos_index < 0: - self.feeding2end_pos_index = len(self.feeding_to_end) - 1 - else: - self.feeding2end_pos_index += 1 - if self.feeding2end_pos_index >= len(self.feeding_to_end): - self.feeding2end_pos_index = 0 - return pos - - def get_next_start_position(self,reverse:bool=False): - pos = self.origin_to_start[self.origin2start_pos_index] - if reverse: - self.origin2start_pos_index -= 1 - if self.origin2start_pos_index < 0: - self.origin2start_pos_index = len(self.origin_to_start) - 1 - else: - self.origin2start_pos_index += 1 - if self.origin2start_pos_index >= len(self.origin_to_start): - self.origin2start_pos_index = 0 - - return pos - - def get_next_take_position(self,reverse:bool=False): - pos = self.start_to_take[self.start2take_pos_index] - if reverse: - self.start2take_pos_index -= 1 - if self.start2take_pos_index < 0: - self.start2take_pos_index = len(self.start_to_take) - 1 - else: - self.start2take_pos_index += 1 - if self.start2take_pos_index >= len(self.start_to_take): - self.start2take_pos_index = 0 - return pos - def get_take_position(self): - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - return self.feeding_to_end[i] - - def set_take_position(self, position: Real_Position, dynamic_height=0): - """ - 设置 FTake 位置,并更新其前后动态点的位置。 - :param position: 新的抓取位置 - :param dynamic_height: 动态高度调整 (如果需要) - """ - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - # 计算 XYZ 坐标 - # xyz = getxyz(position.X, position.Y, position.Z, position.a, position.b, position.c) - xyz = getxyz1(position.X, position.Y, position.Z, position.a, position.b, position.c) - # 创建 before 和 after 位置 - befor_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - after_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - # 安全检查索引 - if i > 0: - self.feeding_to_end[i - 1].set_position(befor_take_position) - else: - print("Warning: No position before FTake to update.") - self.feeding_to_end[i].set_position(position) - if i + 1 < len(self.feeding_to_end): - self.feeding_to_end[i + 1].set_position(after_take_position) - else: - print("Warning: No position after FTake to update.") - break # 抓料点暂时就一个 - - def set_drop_position(self, position: Real_Position): - """ - 设置 FDropBag 位置,只设置当前点,不处理前后点。 - :param position: 新的丢包位置 - """ - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FDropBag.value: - # 直接设置当前点的位置 - self.feeding_to_end[i].set_position(position) - print( - f"✅ FDropBag 位置已更新: ({position.X}, {position.Y}, {position.Z}, {position.U}, {position.V}, {position.W})") - break # 假设只有一个丢包点 - - def get_position_list(self): - index_start = -1 - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FCheck.value: - index_start = i - break - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FPhoto.value: - index_take = i - - self.origin_to_start = self.feed_positions[: index_start+1] - self.start_to_take = self.feed_positions[index_start:index_take+1] - self.feeding_to_end = self.feed_positions[index_take:] - - for i in range(len(self.feeding_to_end)): #插入动态中间点 - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - befor_position_model = PositionModel() - befor_position_model.init_position(None) - after_position_model = PositionModel() - after_position_model.init_position(None) - - self.feeding_to_end.insert(i, befor_position_model) - self.feeding_to_end.insert(i+2, after_position_model) - break - -class FeedingConfig: - def __init__(self, num: int, feedLine: FeedLine, photo_locs): - self.num = num - self.feedLine = feedLine - self.photo_locs = [self.deal_photo_locs(p) for p in photo_locs] - - - def deal_photo_locs(self, photo_loc): - position_photo = Real_Position() - position_photo.init_position(photo_loc[0], photo_loc[1], photo_loc[2], photo_loc[3], photo_loc[4], photo_loc[5]) - return position_photo - - def get_line_info(self): - pass - - -class Feeding(QObject): - need_origin_signal = Signal(str) - take_no_photo_sigal = Signal() - update_detect_image = Signal(np.ndarray) - log_signal = Signal(int,str) - def __init__(self, robotClient: RobotClient): - super().__init__() - self.feedConfig = None - self.feedStatus = FeedStatus.FNone - self.robotClient = robotClient - # 添加 RelayController 实例 - self.relay_controller = RelayController() - self.sensor_thread = None - self.detection_image = None - self.init_detection_image() - self.pause = False - self.cRis_photo = CRisOrFall() - self.cRis_shake = CRisOrFall() - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.is_reverse = False - # 复位集合 - self.run_reverse = False - self.take_no_photo = False - self.reset_status = ResetStatus.RNone - self.reversed_positions = [] - self.current_position = None - self.index=1 - self.pos_index = -1 - self.pos_near_index = -1 - self.catch = Catch(self.robotClient) - self.detect = Detect() - self.is_detected = True - self.detect_thread = threading.Thread(target=self.run_detect) - self.detect_thread.start() - self.onekey = False - self.debug_run_count = 0 # 初始化计数器 - self.mid_take_count = 0 - #传感器判断抓包参数 - self.sensor2_ready = False # 传感器2是否检测到料包 - self.motor_stopped_by_sensor2 = False # 是否由传感器2触发停止电机 - self.sensor_thread = None - self.relay_controller = RelayController() - # 启动传感器2线程 - self.relay_controller._running = True - self.sensor2_thread = None - - # --- 新增: 用于码垛模式的投料点索引 --- - self.current_drop_index = 0 - self.drop_manager = DropPositionManager() - pass - - def close_feed(self): - self.is_detected = False - self.detect_thread.join() - self.detect.detection.release() - - def init_detection_image(self): - detection_image = cv2.imread(Constant.feed_sign_path) - self.update_detect_image.emit(detection_image) - - def run_detect(self): - while self.is_detected: - self.detect.run() - time.sleep(0.02) - - def run(self): - self.catch.run() - # 获取事件坐标 - real_position = Real_Position() - self.detect.position_index = 0 - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - # real_position.init_position(0, - # 0, - # 0, - # 0, - # 0, - # 0); - - # img_path = f'Image/{self.index}.png' - # img = cv2.imread(img_path) - # self.index += 1 - # self.index = self.index % 4 - # self.detection_image = img - - if self.feedConfig == None: - self.feedStatus = FeedStatus.FNone - - if self.feedConfig !=None and self.feedConfig.num == 0 and self.is_reverse and self.robotClient.origin_position.compare(real_position,is_action=True): - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - self.log_signal.emit(logging.INFO, Constant.str_feed_reverse) - - if self.feedStatus == FeedStatus.FNone or self.pause: - return - - elif self.feedStatus == FeedStatus.FCheck: - self.log_signal.emit(logging.INFO, Constant.str_feed_check) - # 1, 检查是否是三列 - # 2, 检查是否有人 - # if self.safe_check_columns() and self.safe_check_person(): - # pass - # else: - # if self.feedConfig.num != 0: - # self.next_target() - # if == 原点 继续判断 - # else: - # QMessageBox.information(None, "提示", Constant.str_feed_sae_error_msgbox) - - if self.is_reverse: - self.feed_Mid_Status = FeedMidStatus.FMid_Start - else: - self.feed_Mid_Status = FeedMidStatus.FMid_Take - - if self.feedConfig.feedLine.start_to_take[0].get_position().compare(real_position): - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FStart: - self.log_signal.emit(logging.INFO, Constant.str_feed_start) - self.relay_controller.open(conveyor2=True)#开电机 - #self.sensor2_thread = threading.Thread(target=self.relay_controller.handle_sensor2, daemon=True)#线程2的开始,但是在那里设置结束呢 - #self.sensor2_thread.start() - if not self.robotClient.origin_position.compare(real_position,is_action=True) and not self.is_reverse: - # QMessageBox.information(None, "提示", Constant.str_feed_start_error) # Fuck 引起异常 - self.log_signal.emit(logging.ERROR, Constant.str_feed_start_error) - self.need_origin_signal.emit(Constant.str_feed_start_error) - self.feedStatus = FeedStatus.FNone - return - if self.is_reverse: - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - return - - self.feedConfig.feedLine.get_position_list() - self.detect.detect_status = DetectStatus.DNone - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FMid: - feed_pos = self.get_current_position(self.is_reverse) - if feed_pos.get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_mid) - self.next_position(self.is_reverse) - # 增加计数器逻辑 - self.mid_take_count += 1 - # 可选:在 Debug1 模式下输出日志 - if Constant.Debug1: - self.log_signal.emit( - logging.INFO, - f"[调试计数] 已进入 FMid 分支 {self.mid_take_count} 次" - ) - #if self.feedStatus == FeedStatus.FTake: - #self.catch.catch_status = CatchStatus.CTake - - elif self.feedStatus == FeedStatus.FPhoto: - if self.feedConfig.num == 0: - self.log_signal.emit(logging.INFO, Constant.str_feed_finish) - self.is_reverse = True - self.feed_Mid_Status = FeedMidStatus.FMid_Take - self.feedConfig.feedLine.start2take_pos_index = len(self.feedConfig.feedLine.start_to_take) - 2 - self.feedConfig.feedLine.origin2start_pos_index = len(self.feedConfig.feedLine.origin_to_start) - 2 - self.next_position(self.is_reverse) - self.log_signal.emit(logging.INFO, Constant.str_feed_photo) - self.init_detection_image() - return - - if not Constant.Debug: - self.log_signal.emit(logging.INFO, Constant.str_feed_takePhoto) - self.feed_Mid_Status = FeedMidStatus.FMid_Feed - self.log_signal.emit(logging.INFO, Constant.str_feed_takePhoto_success) - self.feedConfig.feedLine.set_take_position(self.detect.detect_position, 0) - #self.feedConfig.feedLine.set_take_position(real_position, 0)#必须设置 - '''real_position''' - # 一直等待传感器2信号,永不超时 - while True: - sensors = self.relay_controller.get_all_device_status('sensors') - sensor2_value = sensors.get(self.relay_controller.SENSOR2, False) - if sensor2_value: - self.log_signal.emit(logging.INFO, "✅ 传感器2检测到料包到位,开始执行抓取") - break # ✅ 条件满足,跳出循环,继续执行下面的代码 - else: - self.log_signal.emit(logging.INFO, "⏳ 等待传感器2料包信号...") - time.sleep(1) # 每秒检查一次 - self.next_position() - self.log_signal.emit(logging.INFO, Constant.str_sys_runing2) - - #self.feedStatus = FeedStatus.FTake - - elif self.feedStatus == FeedStatus.FTake: - self.log_signal.emit(logging.INFO, Constant.str_feed_take) - take_position = self.feedConfig.feedLine.get_take_position() - if not take_position or not take_position.get_position(): - self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - return - if not take_position.get_position().compare(real_position, is_action=True): - self.log_signal.emit(logging.INFO, "🟡 机器人尚未到达抓料点位") - return - self.log_signal.emit(logging.INFO, "🟢 机器人已到达抓料点位") - # 执行抓取动作 - #self.catch.catch_status = CatchStatus.CTake - #if self.catch.catch_status == CatchStatus.CNone: - #self.catch.catch_status = CatchStatus.CTake - #if self.catch.catch_status == CatchStatus.CTake: - #self.log_signal.emit(logging.INFO, "正在执行抓料动作...") - #self.catch.catch_status = CatchStatus.COk - #if self.catch.catch_status == CatchStatus.COk: - #self.log_signal.emit(logging.INFO, Constant.str_feed_take_success) - #self.catch.catch_status = CatchStatus.CNone - # 移动到下一个抓取点 - # 更新丢包点: 如果需要根据放置情况调整下次抓取 - #next_drop_pos = self.drop_manager.get_next_drop_position(lineid=1) - #if next_drop_pos: - #self.feedConfig.feedLine.set_drop_position(next_drop_pos) - #self.log_signal.emit(logging.INFO, f"已设置放置点: X={next_drop_pos.X:.2f}") - #else: - #self.log_signal.emit(logging.ERROR, "获取放置点失败") - #return - self.feedConfig.feedLine.set_drop_position(real_position)#我想在这里读取我的一个ini文件值里面有很多个drop点,每一次索引递增的点 - self.relay_controller.open(clamp=True) - self.next_position() - #return - #else: - #self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - - elif self.feedStatus == FeedStatus.FBroken1: - - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - - elif self.feedStatus == FeedStatus.FBroken2: - - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - elif self.feedStatus == FeedStatus.FShake: - if self.get_current_position().get_position().compare(real_position,is_action=True): - # TODO 震动方案 - self.log_signal.emit(logging.INFO, Constant.str_feed_shake) - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CShake - return - if self.catch.catch_status == CatchStatus.CShake: - # if self.feedConfig.feedLine.feeding_to_end[ - # self.feedConfig.feedLine.feeding2end_pos_index + 1].status != FeedStatus.FShake: - # self.catch.catch_status = CatchStatus.COk - # else: - self.catch.shake_continue.SetReset() - self.next_position() - if self.feedStatus!=FeedStatus.FShake: - self.catch.catch_status = CatchStatus.CNone - return - - elif self.feedStatus == FeedStatus.FDropBag: - #"""*** 处理投料点 (FDropBag) 的核心逻辑 ***""" - # 1. 确认机械臂是否已精确到达当前目标投料点 - # get_current_position() 会根据 self.feed_Mid_Status (应为 FMid_Feed) - # 调用 feedLine.get_current_feed_position(),从 feeding_to_end 列表获取 - # 由 feeding2end_pos_index 指向的点。 - if self.get_current_position().get_position().compare(real_position, is_action=True): - # 2. 记录日志:已到达投料点 - if not self.sensor2_ready: - self.log_signal.emit(logging.INFO, "抓取完成,重新启动 conveyor2") - self.relay_controller.open(conveyor2=True) - - self.log_signal.emit(logging.INFO, Constant.str_feed_drop) - # 3. 与 Catch 模块进行状态交互来驱动投料动作 - # a. 初始状态 (CNone): 触发投料动作 - - if self.catch.catch_status == CatchStatus.CNone: - # 将 Catch 状态设置为 CDrop,通知 Catch 模块开始执行物理投料动作 - self.catch.catch_status = CatchStatus.CDrop - # 立即返回,等待 Catch 模块处理 - return - - # b. 投料进行中 (CDrop): 等待完成 - - if self.catch.catch_status == CatchStatus.CDrop: - # 什么都不做,等待 Catch 模块完成动作并更新状态 - return - # c. 投料完成 (COk): 处理后续逻辑并移动到下一个点 - if self.catch.catch_status == CatchStatus.COk: - # 重置 Catch 状态,为下一次操作做准备 - self.catch.catch_status = CatchStatus.CNone - # (后续增加) 延时: 让物料稳定 - # time.sleep(self.robotClient.time_delay_put) - # (后续增加) 视觉确认: 拍照确认袋子已放置 - # self.detection.get_position(...) - # self.feedConfig.feedLine.set_take_position(...) - # 4. 更新业务逻辑:减少剩余袋数 - self.feedConfig.num = self.feedConfig.num - 1 - self.log_signal.emit(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') - # 5. *** 关键步骤 ***: 移动到路径中的下一个点 - # next_position() 会根据当前的 feed_Mid_Status (FMid_Feed) - # 调用 next_Feed()。 - self.next_position() - - def run_reset(self): - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.reset_status == ResetStatus.RNone: - return - - if self.reset_status == ResetStatus.RStart: - if self.feedConfig == None: return - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - self.pos_index = -1 - self.pos_near_index = -1 - self.reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position,is_action=True): - self.pos_index = index - break - - if self.pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position) < min_distance: - min_distance = get_distance(pos_model.get_position(), real_position) - self.pos_near_index = index - if self.pos_near_index != -1: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_near_index + 1] - else: - return False - else: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_index+1] - self.reversed_positions = list(reversed(self.reversed_positions)) - self.reverse_index = 0 - self.send_emergency_sound() - self.current_position = PositionModel() - self.current_position.init_position(real_position) - self.reset_status = ResetStatus.RRunging - - if self.reset_status == ResetStatus.RRunging: - if not real_position.compare(self.current_position.get_position(),is_action=True): - return - pos_model = self.reversed_positions[self.reverse_index] - if pos_model.status == FeedStatus.FTake.value: # 跳过取袋节点 - pos_model = self.reversed_positions[self.reverse_index + 1] - self.reverse_index = self.reverse_index+1 - - if pos_model.lineType == LineType.CureMid.value: - pos_model1 = self.reversed_positions[self.reverse_index + 1] - self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure, - real_position1=pos_model1.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model1 - self.reverse_index = self.reverse_index + 2 - else: - self.sendTargPosition(real_position=pos_model.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model - self.reverse_index = self.reverse_index + 1 - - if self.reverse_index == len(self.reversed_positions): - self.reset_status = ResetStatus.ROk - if self.reset_status == ResetStatus.ROk: - self.reset_status = ResetStatus.RNone - self.send_emergency_stop() - - def return_original_position(self): - - self.run_reverse = True - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.feedConfig == None: return - start_index = -1 - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - pos_index = -1 - pos_near_index = -1 - reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position): - pos_index = index - break - - if pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position)0.5: + #35KG是80 + _center_point=0 + if self.relay_controller.is_drop_35: + print("检测到35KG料带") + _center_point=80 loc_offsetX=loc_model_result['dx_mm'] - if abs(loc_model_result['dx_mm'])<200: + loc_offsetX=loc_offsetX-_center_point + if abs(loc_model_result['dx_mm'])<200+_center_point: loc_is_next=True print(f'{loc_image_path}:料带偏移{loc_offsetX}mm') else: @@ -590,12 +599,12 @@ class Feeding(QObject): self.log_signal.emit(logging.ERROR, f"视频模型异常:{e}") finally: if loc_is_next or Constant.DebugPosition: - self.feedConfig.feedLine.set_feeding_to_end(loc_offsetX) - self.next_position() - self.log_signal.emit(logging.INFO, Constant.str_sys_runing2) + self.feedConfig.feedLine.set_feeding_to_end(loc_offsetX) + self.next_position() + self.log_signal.emit(logging.INFO, Constant.str_sys_runing2) elif self.feedStatus == FeedStatus.FTake: - self.log_signal.emit(logging.INFO, Constant.str_feed_take) + #self.log_signal.emit(logging.INFO, Constant.str_feed_take) take_position = self.feedConfig.feedLine.get_take_position() if not take_position or not take_position.get_position(): self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) @@ -705,7 +714,7 @@ class Feeding(QObject): self.next_position() elif self.feedStatus == FeedStatus.FDropReset: if real_position.compare(self.get_current_position().get_position()): - self.log_signal.emit(logging.INFO, Constant.str_feed_drop_reset) + self.log_signal.emit(logging.INFO, "码垛后点") self.next_position() diff --git a/CU/Feeding_C.py b/CU/Feeding_C.py deleted file mode 100644 index 72ffb0a..0000000 --- a/CU/Feeding_C.py +++ /dev/null @@ -1,474 +0,0 @@ -# import logging -# import time -# -# import cv2 -# from PyQt5.QtWidgets import QMessageBox -# -# import Constant -# import Expection -# from Model.Position import Real_Position, Detection_Position -# from enum import Enum, IntEnum -# from COM.COM_Robot import RobotClient, DetectType -# from Model.RobotModel import CMDInstructRequest, MoveType -# from Util.util_time import CRisOrFall -# from Vision.camera_coordinate_dete import Detection -# from Util.util_log import log -# from Model.RobotModel import Instruction -# -# -# -# -# class FeedStatus(IntEnum): -# FNone = 0 -# FStart = 1 -# FCheck = 2 -# FMid = 3 -# FPhoto = 4 -# FTake = 5 -# FBroken1 = 6 -# FBroken2 =7 -# FShake = 8 -# FDropBag = 9 -# FFinished = 10 -# FReverse = 11 -# FStartReverse = 12 -# -# class LineType(Enum): -# Straight = 0 -# CureStart = 1 -# CureMid = 2 -# CureEnd = 3 -# -# -# class FeedMidStatus(Enum): -# FMid_Start = 1 -# FMid_Take = 2 -# FMid_Feed= 3 -# -# class FeedPosition: -# def __init__(self,status:FeedStatus,position:Real_Position): -# self.status = status -# self.position = position -# -# class FeedLine: -# def __init__(self, id, name, feed_positions:list): -# self.feed_positions = feed_positions -# self.feeding2end_pos_index = 0 -# self.origin2start_pos_index = 0 -# self.start2take_pos_index = 0 -# self.name = name -# self.id = id -# self.get_position_list() -# -# def get_current_feed_position(self): -# pos = self.feeding_to_end[self.feeding2end_pos_index] -# return pos -# def get_current_take_position(self): -# pos = self.start2take_pos_index[self.start2take_pos_index] -# return pos -# def get_current_start_position(self): -# pos = self.origin2start_pos_index[self.origin2start_pos_index] -# return pos -# -# def get_next_feed_position(self,reverse:bool=False): -# pos = self.feeding_to_end[self.feeding2end_pos_index] -# if reverse: -# self.feeding2end_pos_index -= 1 -# if self.feeding2end_pos_index < 0: -# self.feeding2end_pos_index = len(self.feeding_to_end) - 1 -# else: -# self.feeding2end_pos_index += 1 -# if self.feeding2end_pos_index >= len(self.feeding_to_end): -# self.feeding2end_pos_index = 0 -# return pos -# -# -# def get_next_start_position(self,reverse:bool=False): -# pos = self.origin2start_pos_index[self.origin2start_pos_index] -# if reverse: -# self.origin2start_pos_index -= 1 -# if self.origin2start_pos_index < 0: -# self.origin2start_pos_index = len(self.origin2start_pos) - 1 -# else: -# self.origin2start_pos_index += 1 -# if self.origin2start_pos_index >= len(self.origin2start_pos): -# self.origin2start_pos_index = 0 -# -# return pos -# -# def get_next_take_position(self,reverse:bool=False): -# pos = self.start2take_pos_index[self.start2take_pos_index] -# if reverse: -# self.start2take_pos_index -= 1 -# if self.start2take_pos_index < 0: -# self.start2take_pos_index = len(self.start2take_pos) - 1 -# else: -# self.start2take_pos_index += 1 -# if self.start2take_pos_index >= len(self.start2take_pos): -# self.start2take_pos_index = 0 -# return pos -# -# def get_take_position(self): -# for i in range(len(self.feeding_to_end)): -# if self.feeding_to_end[i].status == FeedStatus.FTake: -# return self.feeding_to_end[i] -# -# def set_take_position(self,position:Real_Position): -# for i in range(len(self.feeding_to_end)): -# if self.feeding_to_end[i].status == FeedStatus.FTake: -# self.feeding_to_end[i].position = position -# -# def get_position_list(self): -# index_start = -1 -# for i in range(len(self.feed_positions)): -# if self.feed_positions[i].status == FeedStatus.FStart: -# index_start = i -# break -# for i in range(len(self.feed_positions)): -# if self.feed_positions[i].status == FeedStatus.FPhoto: -# index_take = i -# -# self.origin_to_start = self.feed_positions[: index_start+1] -# self.start_to_take = self.feed_positions[index_start:index_take+1] -# self.feeding_to_end = self.feed_positions[index_take:] -# -# -# -# -# class FeedingConfig: -# def __init__(self, num: int, feedLine: FeedLine, photo_locs): -# self.num = num -# self.feedLine = feedLine -# self.photo_locs = [self.deal_photo_locs(p) for p in photo_locs] -# -# def deal_photo_locs(self, photo_loc): -# position_photo = Real_Position() -# position_photo.init_position(photo_loc[0], photo_loc[1], photo_loc[2], photo_loc[3], photo_loc[4], photo_loc[5]) -# return position_photo -# -# def get_line_info(self): -# pass -# -# -# class Feeding: -# def __init__(self, robotClient: RobotClient, detection: Detection): -# self.feedConfig = None -# self.feedStatus = FeedStatus.FNone -# self.robotClient = robotClient -# self.detection = detection -# self.detection_image = None -# self.init_detection_image() -# self.pause = False -# self.cRis_photo = CRisOrFall() -# self.feed_Mid_Status = FeedMidStatus.FMid_Start -# self.is_reverse = False -# pass -# -# def init_detection_image(self): -# self.detection_image = cv2.imread(Constant.feed_sign_path) -# -# def run(self): -# # 获取事件坐标 -# real_position = Real_Position() -# real_position.init_position(self.robotClient.status_model.world_0, -# self.robotClient.status_model.world_1, -# self.robotClient.status_model.world_2, -# self.robotClient.status_model.world_3, -# self.robotClient.status_model.world_4, -# self.robotClient.status_model.world_5) -# # real_position.init_position(0, -# # 0, -# # 0, -# # 0, -# # 0, -# # 0); -# -# if self.feedConfig == None: -# self.feedStatus = FeedStatus.FNone -# elif self.feedConfig.num == 0 and self.feedStatus!=FeedStatus.FReverse: -# self.feedStatus = FeedStatus.FNone -# -# if self.feedStatus == FeedStatus.FNone or self.pause: -# return -# elif self.feedStatus == FeedStatus.FCheck: -# log.log_message(logging.INFO, Constant.str_feed_check) -# # 1, 检查是否是三列 -# # 2, 检查是否有人 -# # if self.safe_check_columns() and self.safe_check_person(): -# # pass -# # else: -# # if self.feedConfig.num != 0: -# # self.next_target() -# # if == 原点 继续判断 -# # else: -# # QMessageBox.information(None, "提示", Constant.str_feed_safe_error_msgbox) -# if self.is_reverse: -# self.feed_Mid_Status = FeedMidStatus.FMid_Start -# else: -# self.feed_Mid_Status = FeedMidStatus.FMid_Take -# self.next_position(self.is_reverse) -# -# elif self.feedStatus == FeedStatus.FStart: -# log.log_message(logging.INFO, Constant.str_feed_start) -# if not self.robotClient.get_origin_position().compare(real_position) and not self.is_reverse: -# QMessageBox.information(None, "提示", Constant.str_feed_start_error) -# self.feedStatus = FeedStatus.FNone -# if self.is_reverse and self.robotClient.get_origin_position().compare(real_position): -# self.feedStatus = FeedStatus.FNone -# self.is_reverse = False -# -# self.feed_Mid_Status = FeedMidStatus.FMid_Start -# self.next_position(self.is_reverse) -# -# -# elif self.feedStatus == FeedStatus.FMid: -# log.log_message(logging.INFO, Constant.str_feed_mid) -# feed_pos = self.get_current_position() -# if feed_pos.position.compare(real_position): -# self.next_position(self.is_reverse) -# -# -# -# elif self.feedStatus == FeedStatus.FPhoto: -# log.log_message(logging.INFO, Constant.str_feed_photo) -# if self.feedConfig.num == 0: -# log.log_message(logging.INFO, Constant.str_feed_finish) -# self.is_reverse = True -# self.FeedMid_Status = FeedMidStatus.FMid_Take -# self.next_position(self.is_reverse) -# return -# -# if self.robotClient.type_detection == DetectType.EyeOutHand: -# self.feed_Mid_Status = FeedMidStatus.FMid_Feed -# self.next_position() -# return -# detect_pos_list = [] -# if not Constant.Debug: -# try: -# from Util.util_time import CRisOrFall -# if self.cRis_photo.Q(self.error_photo_count >= 5, True): -# QMessageBox.information(None, "提示", Constant.str_feed_photo_error_msgbox) -# self.error_photo_count = 0 -# log.log_message(logging.INFO, Constant.str_feed_photo_confirm) -# -# # TODO 返回初始状态 -# for pos in self.feedConfig.photo_locs: -# self.sendTargPosition(pos) -# while not pos.compare(real_position): # 可以优化 TODO -# if self.feedStatus == FeedStatus.FNone or not self.pause: -# return -# time.sleep(0.1) -# code, img, xyz, uvw, mng = self.detection.get_position() # 检测结果 -# self.detection_image = img -# if xyz != None: -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_success) -# # dp = Detection_Position().init_position(*xyz, *uvw) -# from Trace.handeye_calibration import R_matrix, getPosition -# rotation = R_matrix(self.robotClient.status_model.world_0, -# self.robotClient.status_model.world_1, -# self.robotClient.status_model.world_2, -# self.robotClient.status_model.world_3, -# self.robotClient.status_model.world_4, -# self.robotClient.status_model.world_5) -# -# # 黄老师给我的xyz和法向量 -# target_position, noraml_base = getPosition(*xyz, *uvw, rotation, *mng) -# detect_pos_list.append(Real_Position().init_position(*target_position[:3], *noraml_base)) -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_success) -# else: -# log.log_message(logging.ERROR, Constanstr_feed_takePhoto_fail + real_position.to_string()) -# z_diff, max_z_index = (lambda pts: ( -# max(pts, key=lambda p: p.Z).Z - min(pts, key=lambda p: p.Z).Z, -# pts.index(max(pts, key=lambda p: p.Z)) -# ))(detect_pos_list) -# if len(self.feedConfig.photo_locs) == 5: -# if z_diff < Constant.bag_height and len( -# detect_pos_list) == 3: # 第一次检测到没有高度差距开始三列拍照 TODO 保留全部的开关 -# # 拍照位置从五个变为三个 -# self.feedConfig.photo_locs = [detect_pos_list[0], detect_pos_list[2], detect_pos_list[4]] -# take_position = detect_pos_list[0] -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_front_finish) -# else: -# take_position = detect_pos_list[max_z_index] -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_front) -# else: -# if z_diff < Constant.bag_height: -# take_position = detect_pos_list[0] -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_new_line) -# else: -# take_position = detect_pos_list[max_z_index] -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_line) -# -# self.feedConfig.feedLine.set_take_position(take_position) ##TODO 检查有没有异常 -# self.next_position() -# except: -# log.log_message(logging.ERROR, Constant.str_feed_takePhoto_fail) -# self.error_photo_count += 1 -# else: -# self.feedConfig.feedLine.set_take_position(real_position) ##TODO 检查有没有异常 -# self.next_position() -# log.log_message(logging.INFO, Constant.str_feed_takePhoto_move) -# -# elif self.feedStatus == FeedStatus.FTake: -# log.log_message(logging.INFO, Constant.str_feed_take) -# if self.feedConfig.feedLine.get_take_position() != None: -# if self.feedConfig.feedLine.get_take_position().compare(real_position): -# # 打开吸嘴并返回 -# self.sendIOControl(self.robotClient.con_ios[0], 1) -# self.sendIOControl(self.robotClient.con_ios[1], 1) -# self.sendIOControl(self.robotClient.con_ios[2], 1) -# -# # TODO 检测是否通 不然报警 -# self.feedConfig.feedLine.set_take_position(None) -# time.sleep(self.robotClient.time_delay_take) -# log.log_message(logging.INFO, Constant.str_feed_take_success) -# -# -# -# elif self.feedStatus == FeedStatus.FBroken1: -# log.log_message(logging.INFO, Constant.str_feed_broken) -# if self.get_current_position().compare(real_position): -# self.next_position() -# -# -# elif self.feedStatus == FeedStatus.FBroken2: -# log.log_message(logging.INFO, Constant.str_feed_broken) -# if self.get_current_position().compare(real_position): -# self.next_position() -# -# elif self.feedStatus == FeedStatus.FShake: -# log.log_message(logging.INFO, Constant.str_feed_shake) -# if self.get_current_position().compare(real_position): -# # TODO 震动方案 -# time.sleep(self.robotClient.time_delay_shake) -# self.next_position() -# -# elif self.feedStatus == FeedStatus.FDropBag: -# log.log_message(logging.INFO, Constant.str_feed_drop) -# -# if self.get_current_position().compare(real_position): -# self.sendIOControl(self.robotClient.con_ios[0], 0) -# self.sendIOControl(self.robotClient.con_ios[1], 0) -# self.sendIOControl(self.robotClient.con_ios[2], 0) -# # TODO 检测是否断 不然报警 -# time.sleep(self.robotClient.time_delay_put) -# # TODO 获取目标位置 -# self.detection.get_position(Point_isVision=False, Box_isPoint=True, First_Depth=True, Iter_Max_Pixel=30, save_img_point=0, Height_reduce=30, width_reduce=30) -# -# self.feedConfig.num = self.feedConfig.num - 1 -# log.log_message(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') -# self.next_position() -# -# -# -# -# def send_emergency_sound(self): -# self.sendIOControl(Constant.IO_EmergencyPoint, 1) -# -# def send_emergency_stop(self): -# self.sendIOControl(Constant.IO_EmergencyPoint, 0) -# -# def sendIOControl(self, IO_bit, IO_Status: int): -# -# IO_command = CMDInstructRequest() -# io_instruction = Instruction() -# io_instruction.IO = True -# io_instruction.io_status = IO_Status -# io_instruction.point = IO_bit # {"dsID":"HCRemoteCommand","reqType":"AddRCC","emptyList":"1","instructions":[{"oneshot":"1","action":"200","type":"0","io_status":"1","point":"15","delay":"0"}]} -# IO_command.dsID = 'HCRemoteCommand' -# IO_command.instructions.append(io_instruction) -# self.robotClient.add_sendQuene(IO_command.toString()) -# log.log_message(logging.INFO, f'{Constant.str_feed_io_control}{IO_bit},{IO_Status}') -# pass -# -# def sendTargPosition(self, real_position, move_type: MoveType = MoveType.WORLD, speed=Constant.speed,real_position1=None): -# position_instruction = Instruction() -# position_instruction.speed = speed -# position_instruction.m0 = real_position.X -# position_instruction.m1 = real_position.Y -# position_instruction.m2 = real_position.Z -# position_instruction.m3 = real_position.U -# position_instruction.m4 = real_position.V -# position_instruction.m5 = real_position.W -# -# position_instruction.action = move_type.value -# if position_instruction.action == 17: -# position_instruction.m0_p = real_position1.X -# position_instruction.m1_p = real_position1.Y -# position_instruction.m2_p = real_position1.Z -# position_instruction.m3_p = real_position1.U -# position_instruction.m4_p = real_position1.V -# position_instruction.m5_p = real_position1.W -# instruction_command = CMDInstructRequest() -# instruction_command.instructions.append(position_instruction) -# request_command = instruction_command.toString() -# -# log_str = f'移动到位置:{"姿势直线"}:' \ -# f'X:{position_instruction.m0}-' \ -# f'Y:{position_instruction.m1}-' \ -# f'Z:{position_instruction.m2}-' \ -# f'U:{position_instruction.m3}-' \ -# f'V:{position_instruction.m4}-' \ -# f'W:{position_instruction.m5}' -# -# try: -# log.log_message(logging.INFO, log_str) -# except: -# print("error") -# -# self.robotClient.add_sendQuene(request_command) -# pass -# -# -# def next_start(self,reverse=False): -# start_pos = self.feedConfig.feedLine.get_next_start_position(reverse) -# self.feedStatus = start_pos.status if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone -# if start_pos.lineType == LineType.CureMid: -# start_pos1 = self.feedConfig.feedLine.get_next_start_position(reverse) -# self.sendTargPosition(real_position=start_pos.position, move_type=MoveType.Cure, real_position1=start_pos1.position) -# else: -# self.sendTargPosition(start_pos.position) -# pass -# -# def next_take(self,reverse=False): -# take_pos = self.feedConfig.feedLine.get_next_take_position(reverse) -# self.feedStatus = take_pos.status if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone -# if take_pos.lineType == LineType.CureMid: -# take_pos1 = self.feedConfig.feedLine.get_next_take_position(reverse) -# self.sendTargPosition(real_position=take_pos.position, move_type=MoveType.Cure, real_position1=take_pos1.position) -# else: -# self.sendTargPosition(take_pos.position) -# pass -# -# def next_Feed(self,reverse=False): -# feed_pos = self.feedConfig.feedLine.get_next_feed_position(reverse) -# self.feedStatus = feed_pos.status if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone -# if feed_pos.lineType == LineType.CureMid: -# feed_pos1 = self.feedConfig.feedLine.get_next_feed_position(reverse) -# self.sendTargPosition(real_position=feed_pos.position, move_type=MoveType.Cure, real_position1=feed_pos1.position) -# else: -# self.sendTargPosition(feed_pos.position) -# -# def get_current_position(self): -# if self.feed_Mid_Status == FeedMidStatus.FMid_Start: -# return self.feedConfig.feedLine.get_current_start_position() -# elif self.feed_Mid_Status == FeedMidStatus.FMid_Take: -# return self.feedConfig.feedLine.get_current_take_position() -# elif self.feed_Mid_Status == FeedMidStatus.FMid_Feed: -# return self.feedConfig.feedLine.get_current_feed_position() -# def next_position(self,reverse=False): -# if self.feed_Mid_Status == FeedMidStatus.FMid_Start: -# self.next_start(reverse) -# elif self.feed_Mid_Status == FeedMidStatus.FMid_Take: -# self.next_take(reverse) -# elif self.feed_Mid_Status == FeedMidStatus.FMid_Feed: -# self.next_Feed(reverse) -# -# def safe_check_columns(self): -# return True -# pass -# -# def safe_check_person(self): -# return True -# pass -# diff --git a/CU/Feeding_old.py b/CU/Feeding_old.py deleted file mode 100644 index e6bcd2f..0000000 --- a/CU/Feeding_old.py +++ /dev/null @@ -1,809 +0,0 @@ -import copy -import logging -import random -import threading -import time - -import cv2 -import numpy as np -from PyQt5.QtWidgets import QMessageBox -from PySide6.QtCore import Signal, QObject -from PySide6.QtGui import QPixmap - -import Constant -import Expection -from CU.Catch import Catch, CatchStatus -from CU.Detect import Detect, DetectStatus -from Model.FeedModel import PositionModel -from Model.Position import Real_Position, Detection_Position -from enum import Enum, IntEnum -from COM.COM_Robot import RobotClient, DetectType -from Model.RobotModel import CMDInstructRequest, MoveType -from Trace.handeye_calibration import getPosition -from Trace.handeye_calibration import getxyz,getxyz1 -from Util.util_math import get_distance -from Util.util_time import CRisOrFall -#from Vision.camera_coordinate_dete import Detection -from Util.util_log import log -from Model.RobotModel import Instruction -from EMV.EMV import RelayController -class ResetStatus(Enum): - RNone = 0 - RStart = 1 - RRunging = 2 - ROk =3 - -class FeedStatus(IntEnum): - FNone = 0 - FStart = 1 - FCheck = 2 - FMid = 3 - FPhoto = 4 - FTake = 5 - FBroken1 = 6 - FBroken2 =7 - FShake = 8 - FDropBag = 9 - FFinished = 10 - FReverse = 11 - FStartReverse = 12 - -class LineType(Enum): - Straight = 0 - CureMid = 2 - CureEnd = 3 - WORLD = 4 - - -class FeedMidStatus(Enum): - FMid_Start = 1 - FMid_Take = 2 - FMid_Feed= 3 - -class FeedPosition: - def __init__(self,status:FeedStatus,position:Real_Position): - self.status = status - self.position = position - -class FeedLine: - def __init__(self, id, name, feed_positions:list): - self.feed_positions = copy.deepcopy(feed_positions) - self.feeding2end_pos_index = 0 - self.origin2start_pos_index = 0 - self.start2take_pos_index = 0 - self.name = name - self.id = id - - def get_current_feed_position(self,is_reverse): - pos = self.feeding_to_end[ (self.feeding2end_pos_index+1)%len(self.feeding_to_end) if is_reverse else self.feeding2end_pos_index-1] - return pos - def get_current_take_position(self,is_reverse): - pos = self.start_to_take[ (self.start2take_pos_index+1)%len(self.start_to_take) if is_reverse else self.start2take_pos_index-1] - return pos - def get_current_start_position(self,is_reverse): - pos = self.origin_to_start[(self.origin2start_pos_index+1)%len(self.origin_to_start) if is_reverse else self.origin2start_pos_index-1] - return pos - - def get_next_feed_position(self,reverse:bool=False): - pos = self.feeding_to_end[self.feeding2end_pos_index] - if reverse: - self.feeding2end_pos_index -= 1 - if self.feeding2end_pos_index < 0: - self.feeding2end_pos_index = len(self.feeding_to_end) - 1 - else: - self.feeding2end_pos_index += 1 - if self.feeding2end_pos_index >= len(self.feeding_to_end): - self.feeding2end_pos_index = 0 - return pos - - def get_next_start_position(self,reverse:bool=False): - pos = self.origin_to_start[self.origin2start_pos_index] - if reverse: - self.origin2start_pos_index -= 1 - if self.origin2start_pos_index < 0: - self.origin2start_pos_index = len(self.origin_to_start) - 1 - else: - self.origin2start_pos_index += 1 - if self.origin2start_pos_index >= len(self.origin_to_start): - self.origin2start_pos_index = 0 - - return pos - - def get_next_take_position(self,reverse:bool=False): - pos = self.start_to_take[self.start2take_pos_index] - if reverse: - self.start2take_pos_index -= 1 - if self.start2take_pos_index < 0: - self.start2take_pos_index = len(self.start_to_take) - 1 - else: - self.start2take_pos_index += 1 - if self.start2take_pos_index >= len(self.start_to_take): - self.start2take_pos_index = 0 - return pos - def get_take_position(self): - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - return self.feeding_to_end[i] - - def set_take_position(self, position: Real_Position, dynamic_height=0): - print("[调试] 开始设置抓取位置") - print(f"传入的 position 坐标: X={position.X}, Y={position.Y}, Z={position.Z}, " - f"a={position.a}, b={position.b}, c={position.c}, " - f"U={position.U}, V={position.V}, W={position.W}") - - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - xyz = getxyz1(position.X, position.Y, position.Z, position.a, position.b, position.c) - - print(f"[调试] getxyz1 返回值: X={xyz[0]}, Y={xyz[1]}, Z={xyz[2]}") - - befor_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - print( - f"[调试] 抓取前位置: X={befor_take_position.X}, Y={befor_take_position.Y}, Z={befor_take_position.Z}, " - f"U={befor_take_position.U}, V={befor_take_position.V}, W={befor_take_position.W}") - - after_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - print( - f"[调试] 抓取后位置: X={after_take_position.X}, Y={after_take_position.Y}, Z={after_take_position.Z}, " - f"U={after_take_position.U}, V={after_take_position.V}, W={after_take_position.W}") - - self.feeding_to_end[i - 1].set_position(befor_take_position) - self.feeding_to_end[i + 1].set_position(after_take_position) - self.feeding_to_end[i].set_position(position) - - print(f"[调试] 当前抓取点已设置: X={position.X}, Y={position.Y}, Z={position.Z}, " - f"U={position.U}, V={position.V}, W={position.W}") - print("[调试] 抓取前后位置已设置完成") - - def set_drop_position(self, position: Real_Position): - """ - 设置 FDropBag 位置,只设置当前点,不处理前后点。 - :param position: 新的丢包位置 - """ - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FDropBag.value: - # 直接设置当前点的位置 - self.feeding_to_end[i].set_position(position) - print( - f"✅ FDropBag 位置已更新: ({position.X}, {position.Y}, {position.Z}, {position.U}, {position.V}, {position.W})") - break # 假设只有一个丢包点 - - def get_position_list(self): - index_start = -1 - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FCheck.value: - index_start = i - break - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FPhoto.value: - index_take = i - - self.origin_to_start = self.feed_positions[: index_start+1] - self.start_to_take = self.feed_positions[index_start:index_take+1] - self.feeding_to_end = self.feed_positions[index_take:] - - for i in range(len(self.feeding_to_end)): #插入动态中间点 - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - befor_position_model = PositionModel() - befor_position_model.init_position(None) - after_position_model = PositionModel() - after_position_model.init_position(None) - - self.feeding_to_end.insert(i, befor_position_model) - self.feeding_to_end.insert(i+2, after_position_model) - break - -class FeedingConfig: - def __init__(self, num: int, feedLine: FeedLine, photo_locs): - self.num = num - self.feedLine = feedLine - self.photo_locs = [self.deal_photo_locs(p) for p in photo_locs] - - def deal_photo_locs(self, photo_loc): - position_photo = Real_Position() - position_photo.init_position(photo_loc[0], photo_loc[1], photo_loc[2], photo_loc[3], photo_loc[4], photo_loc[5]) - return position_photo - - def get_line_info(self): - pass - - -class Feeding(QObject): - need_origin_signal = Signal(str) - take_no_photo_sigal = Signal() - update_detect_image = Signal(np.ndarray) - log_signal = Signal(int,str) - def __init__(self, robotClient: RobotClient): - super().__init__() - self.feedConfig = None - self.feedStatus = FeedStatus.FNone - self.robotClient = robotClient - # 添加 RelayController 实例 - self.relay_controller = RelayController() - self.sensor_thread = None - self.detection_image = None - self.init_detection_image() - self.pause = False - self.cRis_photo = CRisOrFall() - self.cRis_shake = CRisOrFall() - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.is_reverse = False - # 复位集合 - self.run_reverse = False - self.take_no_photo = False - self.reset_status = ResetStatus.RNone - self.reversed_positions = [] - self.current_position = None - self.index=1 - self.pos_index = -1 - self.pos_near_index = -1 - self.catch = Catch(self.robotClient) - self.detect = Detect() - self.is_detected = True - self.detect_thread = threading.Thread(target=self.run_detect) - self.detect_thread.start() - self.onekey = False - self.debug_run_count = 0 # 初始化计数器 - self.mid_take_count = 0 - #传感器判断抓包参数 - self.sensor2_ready = False # 传感器2是否检测到料包 - self.motor_stopped_by_sensor2 = False # 是否由传感器2触发停止电机 - self.sensor_thread = None - self.relay_controller = RelayController() - # 启动传感器2线程 - self.relay_controller._running = True - self.sensor2_thread = None - pass - - def close_feed(self): - self.is_detected = False - self.detect_thread.join() - self.detect.detection.release() - - def init_detection_image(self): - detection_image = cv2.imread(Constant.feed_sign_path) - self.update_detect_image.emit(detection_image) - - def run_detect(self): - while self.is_detected: - self.detect.run() - time.sleep(0.02) - - def run(self): - self.catch.run() - # 获取事件坐标 - real_position = Real_Position() - self.detect.position_index = 0 - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - # real_position.init_position(0, - # 0, - # 0, - # 0, - # 0, - # 0); - - # img_path = f'Image/{self.index}.png' - # img = cv2.imread(img_path) - # self.index += 1 - # self.index = self.index % 4 - # self.detection_image = img - - if self.feedConfig == None: - self.feedStatus = FeedStatus.FNone - - if self.feedConfig !=None and self.feedConfig.num == 0 and self.is_reverse and self.robotClient.origin_position.compare(real_position,is_action=True): - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - self.log_signal.emit(logging.INFO, Constant.str_feed_reverse) - - if self.feedStatus == FeedStatus.FNone or self.pause: - return - - elif self.feedStatus == FeedStatus.FCheck: - self.log_signal.emit(logging.INFO, Constant.str_feed_check) - # 1, 检查是否是三列 - # 2, 检查是否有人 - # if self.safe_check_columns() and self.safe_check_person(): - # pass - # else: - # if self.feedConfig.num != 0: - # self.next_target() - # if == 原点 继续判断 - # else: - # QMessageBox.information(None, "提示", Constant.str_feed_sae_error_msgbox) - - if self.is_reverse: - self.feed_Mid_Status = FeedMidStatus.FMid_Start - else: - self.feed_Mid_Status = FeedMidStatus.FMid_Take - - if self.feedConfig.feedLine.start_to_take[0].get_position().compare(real_position): - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FStart: - self.log_signal.emit(logging.INFO, Constant.str_feed_start) - self.relay_controller.open(conveyor2=True)#开电机 - #self.sensor2_thread = threading.Thread(target=self.relay_controller.handle_sensor2, daemon=True)#线程2的开始,但是在那里设置结束呢 - #self.sensor2_thread.start() - if not self.robotClient.origin_position.compare(real_position,is_action=True) and not self.is_reverse: - # QMessageBox.information(None, "提示", Constant.str_feed_start_error) # Fuck 引起异常 - self.log_signal.emit(logging.ERROR, Constant.str_feed_start_error) - self.need_origin_signal.emit(Constant.str_feed_start_error) - self.feedStatus = FeedStatus.FNone - return - if self.is_reverse: - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - return - - self.feedConfig.feedLine.get_position_list() - self.detect.detect_status = DetectStatus.DNone - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FMid: - feed_pos = self.get_current_position(self.is_reverse) - if feed_pos.get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_mid) - self.next_position(self.is_reverse) - # 增加计数器逻辑 - self.mid_take_count += 1 - # 可选:在 Debug1 模式下输出日志 - if Constant.Debug1: - self.log_signal.emit( - logging.INFO, - f"[调试计数] 已进入 FMid 分支 {self.mid_take_count} 次" - ) - if self.feedStatus == FeedStatus.FTake: - self.catch.catch_status = CatchStatus.CTake - - elif self.feedStatus == FeedStatus.FPhoto: - if self.feedConfig.num == 0: - self.log_signal.emit(logging.INFO, Constant.str_feed_finish) - self.is_reverse = True - self.feed_Mid_Status = FeedMidStatus.FMid_Take - self.feedConfig.feedLine.start2take_pos_index = len(self.feedConfig.feedLine.start_to_take) - 2 - self.feedConfig.feedLine.origin2start_pos_index = len(self.feedConfig.feedLine.origin_to_start) - 2 - self.next_position(self.is_reverse) - self.log_signal.emit(logging.INFO, Constant.str_feed_photo) - self.init_detection_image() - return - - if not Constant.Debug: - self.log_signal.emit(logging.INFO, Constant.str_feed_takePhoto) - self.feed_Mid_Status = FeedMidStatus.FMid_Feed - self.detect.detect_status = DetectStatus.DOk - self.log_signal.emit(logging.INFO, Constant.str_feed_takePhoto_success) - #self.feedConfig.feedLine.set_take_position(self.detect.detect_position, 0) - self.feedConfig.feedLine.set_take_position(real_position, 0) - self.next_position() - self.detect.detect_status = DetectStatus.DNone - self.log_signal.emit(logging.INFO, Constant.str_sys_runing2) - #self.feedStatus = FeedStatus.FTake - - elif self.feedStatus == FeedStatus.FTake: - self.log_signal.emit(logging.INFO, Constant.str_feed_take) - take_position = self.feedConfig.feedLine.get_take_position() - if not take_position or not take_position.get_position(): - self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - return - if not take_position.get_position().compare(real_position, is_action=True): - self.log_signal.emit(logging.INFO, "🟡 机器人尚未到达抓料点位") - return - self.log_signal.emit(logging.INFO, "🟢 机器人已到达抓料点位") - '''real_position''' - # 一直等待传感器2信号,永不超时 - while True: - sensors = self.relay_controller.get_all_device_status('sensors') - sensor2_value = sensors.get(self.relay_controller.SENSOR2, False) - if sensor2_value: - self.log_signal.emit(logging.INFO, "✅ 传感器2检测到料包到位,开始执行抓取") - break # ✅ 条件满足,跳出循环,继续执行下面的代码 - else: - self.log_signal.emit(logging.INFO, "⏳ 等待传感器2料包信号...") - time.sleep(1) # 每秒检查一次 - # 执行抓取动作 - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CTake - if self.catch.catch_status == CatchStatus.CTake: - self.log_signal.emit(logging.INFO, "正在执行抓料动作...") - self.catch.catch_status = CatchStatus.COk - if self.catch.catch_status == CatchStatus.COk: - self.log_signal.emit(logging.INFO, Constant.str_feed_take_success) - if not self.sensor2_ready: - self.log_signal.emit(logging.INFO, "抓取完成,重新启动 conveyor2") - self.relay_controller.open(conveyor2=True) - self.catch.catch_status = CatchStatus.CNone - self.detect.detect_status = DetectStatus.DOk - self.log_signal.emit(logging.INFO, "修改丢包点") - # 输出当前抓取的索引(当前使用的点) - print(f"[调试] 即将丢包点位索引: {self.detect.position_index}") - # ✅ 先递增索引(准备下一个点) - self.detect.position_index += 1 - # ✅ 输出下一个要加载的索引 - print(f"[调试] 下一个要加载的索引: {self.detect.position_index}") - # ✅ 重新加载下一个点位(基于更新后的 index) - if not self.detect.run(): - self.log_signal.emit(logging.ERROR, "❌ 加载新点位失败,停止流程") - return - # ✅ 设置丢包点为新加载的点位 - self.feedConfig.feedLine.set_drop_position(self.detect.detect_position) - # ✅ 成功加载新点,继续执行后续逻辑 - self.debug_run_count += 1 - self.next_position() - return - else: - self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - - elif self.feedStatus == FeedStatus.FBroken1: - - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - - elif self.feedStatus == FeedStatus.FBroken2: - - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - elif self.feedStatus == FeedStatus.FShake: - if self.get_current_position().get_position().compare(real_position,is_action=True): - # TODO 震动方案 - self.log_signal.emit(logging.INFO, Constant.str_feed_shake) - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CShake - return - if self.catch.catch_status == CatchStatus.CShake: - # if self.feedConfig.feedLine.feeding_to_end[ - # self.feedConfig.feedLine.feeding2end_pos_index + 1].status != FeedStatus.FShake: - # self.catch.catch_status = CatchStatus.COk - # else: - self.catch.shake_continue.SetReset() - self.next_position() - if self.feedStatus!=FeedStatus.FShake: - self.catch.catch_status = CatchStatus.CNone - return - - elif self.feedStatus == FeedStatus.FDropBag: - if self.get_current_position().get_position().compare(real_position,is_action=True): - # self.sendIOControl(self.robotClient.con_ios[0], 0) - # self.sendIOControl(self.robotClient.con_ios[1], 0) - # self.sendIOControl(self.robotClient.con_ios[2], 0) - self.log_signal.emit(logging.INFO, Constant.str_feed_drop) - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CDrop - return - if self.catch.catch_status == CatchStatus.CDrop: - return - if self.catch.catch_status == CatchStatus.COk: - self.catch.catch_status = CatchStatus.CNone - # time.sleep(self.robotClient.time_delay_put) - # self.detection.get_position(Point_isVision=False, Box_isPoint=True, First_Depth=True, Iter_Max_Pixel=30, save_img_point=0, Height_reduce=30, width_reduce=30) - # self.feedConfig.feedLine.set_take_position(self.get_take_position()) - if self.detect.detect_status == DetectStatus.DNone: - self.detect.detect_status = DetectStatus.DDetect - self.feedConfig.num = self.feedConfig.num - 1 - self.log_signal.emit(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') - self.next_position() - - def run_reset(self): - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.reset_status == ResetStatus.RNone: - return - - if self.reset_status == ResetStatus.RStart: - if self.feedConfig == None: return - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - self.pos_index = -1 - self.pos_near_index = -1 - self.reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position,is_action=True): - self.pos_index = index - break - - if self.pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position) < min_distance: - min_distance = get_distance(pos_model.get_position(), real_position) - self.pos_near_index = index - if self.pos_near_index != -1: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_near_index + 1] - else: - return False - else: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_index+1] - self.reversed_positions = list(reversed(self.reversed_positions)) - self.reverse_index = 0 - self.send_emergency_sound() - self.current_position = PositionModel() - self.current_position.init_position(real_position) - self.reset_status = ResetStatus.RRunging - - if self.reset_status == ResetStatus.RRunging: - if not real_position.compare(self.current_position.get_position(),is_action=True): - return - pos_model = self.reversed_positions[self.reverse_index] - if pos_model.status == FeedStatus.FTake.value: # 跳过取袋节点 - pos_model = self.reversed_positions[self.reverse_index + 1] - self.reverse_index = self.reverse_index+1 - - if pos_model.lineType == LineType.CureMid.value: - pos_model1 = self.reversed_positions[self.reverse_index + 1] - self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure, - real_position1=pos_model1.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model1 - self.reverse_index = self.reverse_index + 2 - else: - self.sendTargPosition(real_position=pos_model.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model - self.reverse_index = self.reverse_index + 1 - - if self.reverse_index == len(self.reversed_positions): - self.reset_status = ResetStatus.ROk - if self.reset_status == ResetStatus.ROk: - self.reset_status = ResetStatus.RNone - self.send_emergency_stop() - - def return_original_position(self): - - self.run_reverse = True - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.feedConfig == None: return - start_index = -1 - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - pos_index = -1 - pos_near_index = -1 - reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position): - pos_index = index - break - - if pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position)Optional[LineModel]: """根据lineid加载所有码垛的路径信息""" #默认码垛的lineid从10开始 - _lineid=lineid+10 + if self.config_path==Constant.dropLine_set_file_35: + _lineid=lineid+11 + else: + _lineid=lineid+10 + # _lineid=lineid+10 line_model = LineModel(_lineid) line_model.line_category = 2 line_model.id = _lineid @@ -255,10 +259,14 @@ class DropPositionManager: def save_path_points(self, line_model: LineModel): """根据lineid保存所有码垛的路径信息""" #默认码垛的lineid从10开始,保存的时候减一 - _lineid=line_model.id-10 + if self.config_path==Constant.dropLine_set_file_35: + _lineid=line_model.id-11 + else: + _lineid=line_model.id-10 + # _lineid=line_model.id-10 if _lineid<=0: return - self.config.read(Constant.dropLine_set_file, encoding='utf-8') + self.config.read(self.config_path, encoding='utf-8') # 查找主表 DropLineX main_section = f"{Constant.dropLine_set_section}{_lineid}" if not self.config.has_section(main_section): @@ -267,7 +275,7 @@ class DropPositionManager: self.config.set(main_section, "id", str(_lineid)) _current_reset_index=1 _current_mid_index=1 - _current_drop_section_val=self._current_drop_section[main_section] + _current_drop_section_val=self._get_max_drop_section() # 保存每个DropPoints for i, pos in enumerate(line_model.positions): if pos.lineId == _lineid or pos.lineId == line_model.id: @@ -300,48 +308,24 @@ class DropPositionManager: #保存数据 pos.save_position_model(self.config) - with open(Constant.dropLine_set_file, 'w', encoding='utf-8') as f: + with open(self.config_path, 'w', encoding='utf-8') as f: self.config.write(f) def del_drop_point(self,section): - self.config.read(Constant.dropLine_set_file, encoding = 'utf-8') + self.config.read(self.config_path, encoding = 'utf-8') self.config.remove_section(section) - with open(Constant.dropLine_set_file, 'w', encoding='utf-8') as f: + with open(self.config_path, 'w', encoding='utf-8') as f: self.config.write(f) -def _get_point_debug_info(manager, pos, model): - config = manager.config - for sec in config.sections(): - if sec.startswith("DropPoints"): - try: - x, y, z = config.getfloat(sec, "x"), config.getfloat(sec, "y"), config.getfloat(sec, "z") - if abs(x - pos.X) < 0.001 and abs(y - pos.Y) < 0.001 and abs(z - pos.Z) < 0.001: - point_id = config.getint(sec, "id") - return f"📌 DropPoints{point_id} | id={point_id}" - except: pass - - elif sec.startswith("DropMidPoint"): - try: - parts = sec.split('-') - if len(parts) != 2: continue - point_id = int(''.join(filter(str.isdigit, parts[0]))) - level = int(parts[1]) - x, y, z = config.getfloat(sec, "x"), config.getfloat(sec, "y"), config.getfloat(sec, "z") - if abs(x - pos.X) < 0.001 and abs(y - pos.Y) < 0.001 and abs(z - pos.Z) < 0.001: - return f"📍 DropMidPoint{point_id}-{level} | id={point_id}, level={level}" - except: pass - - elif sec.startswith("ResetPoint"): - try: - parts = sec.split('-') - if len(parts) != 2: continue - point_id = int(''.join(filter(str.isdigit, parts[0]))) - level = int(parts[1]) - x, y, z = config.getfloat(sec, "x"), config.getfloat(sec, "y"), config.getfloat(sec, "z") - if abs(x - pos.X) < 0.001 and abs(y - pos.Y) < 0.001 and abs(z - pos.Z) < 0.001: - return f"🔙 ResetPoint{point_id}-{level} | id={point_id}, level={level}" - except: pass - return "❓ 未知点位" + def _get_max_drop_section(self): + """获取最大的DropPoints序号""" + max_section = 1 + for section in self.config.sections(): + if section.startswith("DropPoints"): + num_part = int(section.replace("DropPoints", "0")) + if num_part > max_section: + max_section = num_part + return max_section # 测试 if __name__ == "__main__": diff --git a/CU/list.ini b/CU/list.ini deleted file mode 100644 index 117d65b..0000000 --- a/CU/list.ini +++ /dev/null @@ -1,5 +0,0 @@ -[positions] -0 = 1, 1, 1, 1, 0.258, 0.258 -1 = 1, 1, 1, 1, 0.258, 0.258 -2 = 1, 1, 1, 1, 0.258, 0.258 -3 = 1, 1, 1, 1, 0.258, 0.258 \ No newline at end of file diff --git a/CU/sae.py b/CU/sae.py deleted file mode 100644 index 2f2c2b2..0000000 --- a/CU/sae.py +++ /dev/null @@ -1,843 +0,0 @@ -import copy -import logging -import random -import threading -import time - -import cv2 -import numpy as np -from PyQt5.QtWidgets import QMessageBox -from PySide6.QtCore import Signal, QObject -from PySide6.QtGui import QPixmap - -import Constant -import Expection -from CU.Catch import Catch, CatchStatus -from CU.Detect import Detect, DetectStatus -from Model.FeedModel import PositionModel -from Model.Position import Real_Position, Detection_Position -from enum import Enum, IntEnum -from COM.COM_Robot import RobotClient, DetectType -from Model.RobotModel import CMDInstructRequest, MoveType -from Trace.handeye_calibration import getPosition -from Trace.handeye_calibration import getxyz,getxyz1 -from Util.util_math import get_distance -from Util.util_time import CRisOrFall -#from Vision.camera_coordinate_dete import Detection -from Util.util_log import log -from Model.RobotModel import Instruction -from EMV.EMV import RelayController -class ResetStatus(Enum): - RNone = 0 - RStart = 1 - RRunging = 2 - ROk =3 - -class FeedStatus(IntEnum): - FNone = 0 - FStart = 1 - FCheck = 2 - FMid = 3 - FPhoto = 4 - FTake = 5 - FBroken1 = 6 - FBroken2 =7 - FShake = 8 - FDropBag = 9 - FFinished = 10 - FReverse = 11 - FStartReverse = 12 - -class LineType(Enum): - Straight = 0 - CureMid = 2 - CureEnd = 3 - WORLD = 4 - - -class FeedMidStatus(Enum): - FMid_Start = 1 - FMid_Take = 2 - FMid_Feed= 3 - -class FeedPosition: - def __init__(self,status:FeedStatus,position:Real_Position): - self.status = status - self.position = position - -class FeedLine: - def __init__(self, id, name, feed_positions:list,drop_positons:list): - self.feed_positions = copy.deepcopy(feed_positions) - self.drop_positions = copy.deepcopy(drop_positons) - self.feeding2end_pos_index = 0 - self.origin2start_pos_index = 0 - self.start2take_pos_index = 0 - self.name = name - self.id = id - - # --- 新增:用于存储从 ini 文件读取的多个投料点坐标 --- - # 这个列表将在加载 ini 时填充 [[x1,y1,z1,u1,v1,w1], [x2,y2,z2,u2,v2,w2], ...] - self.drop_point_list = [] - - def get_current_feed_position(self,is_reverse): - pos = self.feeding_to_end[ (self.feeding2end_pos_index+1)%len(self.feeding_to_end) if is_reverse else self.feeding2end_pos_index-1] - return pos - def get_current_take_position(self,is_reverse): - pos = self.start_to_take[ (self.start2take_pos_index+1)%len(self.start_to_take) if is_reverse else self.start2take_pos_index-1] - return pos - def get_current_start_position(self,is_reverse): - pos = self.origin_to_start[(self.origin2start_pos_index+1)%len(self.origin_to_start) if is_reverse else self.origin2start_pos_index-1] - return pos - - def get_next_feed_position(self,reverse:bool=False): - pos = self.feeding_to_end[self.feeding2end_pos_index] - if reverse: - self.feeding2end_pos_index -= 1 - if self.feeding2end_pos_index < 0: - self.feeding2end_pos_index = len(self.feeding_to_end) - 1 - else: - self.feeding2end_pos_index += 1 - if self.feeding2end_pos_index >= len(self.feeding_to_end): - self.feeding2end_pos_index = 0 - return pos - - def get_next_start_position(self,reverse:bool=False): - pos = self.origin_to_start[self.origin2start_pos_index] - if reverse: - self.origin2start_pos_index -= 1 - if self.origin2start_pos_index < 0: - self.origin2start_pos_index = len(self.origin_to_start) - 1 - else: - self.origin2start_pos_index += 1 - if self.origin2start_pos_index >= len(self.origin_to_start): - self.origin2start_pos_index = 0 - - return pos - - def get_next_take_position(self,reverse:bool=False): - pos = self.start_to_take[self.start2take_pos_index] - if reverse: - self.start2take_pos_index -= 1 - if self.start2take_pos_index < 0: - self.start2take_pos_index = len(self.start_to_take) - 1 - else: - self.start2take_pos_index += 1 - if self.start2take_pos_index >= len(self.start_to_take): - self.start2take_pos_index = 0 - return pos - def get_take_position(self): - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - return self.feeding_to_end[i] - - def get_drop_position(self): - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - return self.feeding_to_end[i] - - def set_take_position(self, position: Real_Position, dynamic_height=0): - print("[调试] 开始设置抓取位置") - print(f"传入的 position 坐标: X={position.X}, Y={position.Y}, Z={position.Z}, " - f"a={position.a}, b={position.b}, c={position.c}, " - f"U={position.U}, V={position.V}, W={position.W}") - - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - xyz = getxyz1(position.X, position.Y, position.Z, position.a, position.b, position.c) - - print(f"[调试] getxyz1 返回值: X={xyz[0]}, Y={xyz[1]}, Z={xyz[2]}") - - befor_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - print( - f"[调试] 抓取前位置: X={befor_take_position.X}, Y={befor_take_position.Y}, Z={befor_take_position.Z}, " - f"U={befor_take_position.U}, V={befor_take_position.V}, W={befor_take_position.W}") - - after_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - print( - f"[调试] 抓取后位置: X={after_take_position.X}, Y={after_take_position.Y}, Z={after_take_position.Z}, " - f"U={after_take_position.U}, V={after_take_position.V}, W={after_take_position.W}") - - self.feeding_to_end[i - 1].set_position(befor_take_position) - self.feeding_to_end[i + 1].set_position(after_take_position) - self.feeding_to_end[i].set_position(position) - - print(f"[调试] 当前抓取点已设置: X={position.X}, Y={position.Y}, Z={position.Z}, " - f"U={position.U}, V={position.V}, W={position.W}") - print("[调试] 抓取前后位置已设置完成") - - def set_drop_position(self, position: Real_Position): - """ - 设置 FDropBag 位置,只设置当前点,不处理前后点。 - :param position: 新的丢包位置 - """ - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FDropBag.value: - # 直接设置当前点的位置 - self.feeding_to_end[i].set_position(position) - print( - f"✅ FDropBag 位置已更新: ({position.X}, {position.Y}, {position.Z}, {position.U}, {position.V}, {position.W})") - break # 假设只有一个丢包点 - - def get_position_list(self): - index_start = -1 - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FCheck.value: - index_start = i - break - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FPhoto.value: - index_take = i - - self.origin_to_start = self.feed_positions[: index_start+1] - self.start_to_take = self.feed_positions[index_start:index_take+1] - self.feeding_to_end = self.feed_positions[index_take:] - - for i in range(len(self.feeding_to_end)): #插入动态中间点 - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - befor_position_model = PositionModel() - befor_position_model.init_position(None) - after_position_model = PositionModel() - after_position_model.init_position(None) - - self.feeding_to_end.insert(i, befor_position_model) - self.feeding_to_end.insert(i+2, after_position_model) - break - -class FeedingConfig: - def __init__(self, num: int, feedLine: FeedLine, photo_locs, drop_positions=None): - self.num = num - self.feedLine = feedLine - self.photo_locs = [self.deal_photo_locs(p) for p in photo_locs] - - # --- 新增: 存储投料点列表 --- - # 从UI界面读取 or 从txt文本读取 - self.drop_positions = [self.deal_photo_locs(p) for p in drop_positions] if drop_positions else [] - - def deal_photo_locs(self, photo_loc): - position_photo = Real_Position() - position_photo.init_position(photo_loc[0], photo_loc[1], photo_loc[2], photo_loc[3], photo_loc[4], photo_loc[5]) - return position_photo - - def get_line_info(self): - pass - - -class Feeding(QObject): - need_origin_signal = Signal(str) - take_no_photo_sigal = Signal() - update_detect_image = Signal(np.ndarray) - log_signal = Signal(int,str) - def __init__(self, robotClient: RobotClient): - super().__init__() - self.feedConfig = None - self.feedStatus = FeedStatus.FNone - self.robotClient = robotClient - # 添加 RelayController 实例 - self.relay_controller = RelayController() - self.sensor_thread = None - self.detection_image = None - # self.init_detection_image() - self.pause = False - self.cRis_photo = CRisOrFall() - self.cRis_shake = CRisOrFall() - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.is_reverse = False - # 复位集合 - self.run_reverse = False - self.take_no_photo = False - self.reset_status = ResetStatus.RNone - self.reversed_positions = [] - self.current_position = None - self.index=1 - self.pos_index = -1 - self.pos_near_index = -1 - self.catch = Catch(self.robotClient) - # self.detect = Detect() - # self.is_detected = True - # self.detect_thread = threading.Thread(target=self.run_detect) - # self.detect_thread.start() - self.onekey = False - # self.debug_run_count = 0 # 初始化计数器 - self.mid_take_count = 0 - #传感器判断抓包参数 - self.sensor2_ready = False # 传感器2是否检测到料包 - self.motor_stopped_by_sensor2 = False # 是否由传感器2触发停止电机 - self.sensor_thread = None - self.relay_controller = RelayController() - # 启动传感器2线程 - self.relay_controller._running = True - self.sensor2_thread = None - - # --- 新增: 用于码垛模式的投料点索引 --- - self.current_drop_index = 0 - - - def close_feed(self): - pass - # self.is_detected = False - # self.detect_thread.join() - # self.detect.detection.release() - - # def init_detection_image(self): - # detection_image = cv2.imread(Constant.feed_sign_path) - # self.update_detect_image.emit(detection_image) - - # def run_detect(self): - # while self.is_detected: - # self.detect.run() - # time.sleep(0.02) - - def run(self): - self.catch.run() - # 获取事件坐标 - real_position = Real_Position() - # self.detect.position_index = 0 - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - # real_position.init_position(0, - # 0, - # 0, - # 0, - # 0, - # 0); - - # img_path = f'Image/{self.index}.png' - # img = cv2.imread(img_path) - # self.index += 1 - # self.index = self.index % 4 - # self.detection_image = img - - if self.feedConfig == None: - self.feedStatus = FeedStatus.FNone - - if self.feedConfig != None and self.feedConfig.num == 0 and self.is_reverse and self.robotClient.origin_position.compare( - real_position, is_action=True): - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - self.log_signal.emit(logging.INFO, Constant.str_feed_reverse) - - if self.feedStatus == FeedStatus.FNone or self.pause: - return - - elif self.feedStatus == FeedStatus.FCheck: - self.log_signal.emit(logging.INFO, Constant.str_feed_check) - - if self.is_reverse: - self.feed_Mid_Status = FeedMidStatus.FMid_Start - else: - self.feed_Mid_Status = FeedMidStatus.FMid_Take - - if self.feedConfig.feedLine.start_to_take[0].get_position().compare(real_position): - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FStart: - self.log_signal.emit(logging.INFO, Constant.str_feed_start) - self.relay_controller.open(conveyor2=True)#开电机 - #self.sensor2_thread = threading.Thread(target=self.relay_controller.handle_sensor2, daemon=True)#线程2的开始,但是在那里设置结束呢 - #self.sensor2_thread.start() - if not self.robotClient.origin_position.compare(real_position,is_action=True) and not self.is_reverse: - # QMessageBox.information(None, "提示", Constant.str_feed_start_error) # Fuck 引起异常 - self.log_signal.emit(logging.ERROR, Constant.str_feed_start_error) - self.need_origin_signal.emit(Constant.str_feed_start_error) - self.feedStatus = FeedStatus.FNone - return - if self.is_reverse: - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - return - - self.feedConfig.feedLine.get_position_list() - # self.detect.detect_status = DetectStatus.DNone - self.feed_Mid_Status = FeedMidStatus.FMid_Start - # --- 修改: 初始化投料点索引 --- - self.current_drop_index = 0 - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FMid: - feed_pos = self.get_current_position(self.is_reverse) - if feed_pos.get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_mid) - self.next_position(self.is_reverse) - # 增加计数器逻辑 - self.mid_take_count += 1 - # 可选:在 Debug1 模式下输出日志 - if Constant.Debug1: - self.log_signal.emit( - logging.INFO, - f"[调试计数] 已进入 FMid 分支 {self.mid_take_count} 次" - ) - if self.feedStatus == FeedStatus.FTake: - self.catch.catch_status = CatchStatus.CTake - - elif self.feedStatus == FeedStatus.FPhoto: - self.log_signal.emit(logging.INFO, "🟡 [码垛模式] 跳过拍照定位步骤") - # 直接进入抓取状态或准备投料 - # 所以在 FPhoto 后,应该移动到抓取点 - take_position_model = self.feedConfig.feedLine.get_take_position() - if take_position_model: - self.log_signal.emit(logging.INFO, "[码垛模式] 准备移动到抓取点") - self.sendTargPosition(take_position_model.get_position(), speed=self.robotClient.feed_speed) - self.feedStatus = FeedStatus.FTake - else: - self.log_signal.emit(logging.ERROR, "[码垛模式] 无法获取抓取点位置!") - self.feedStatus = FeedStatus.FNone - return # 退出当前循环 - - elif self.feedStatus == FeedStatus.FTake: - self.log_signal.emit(logging.INFO, Constant.str_feed_take) - take_position = self.feedConfig.feedLine.get_take_position() - if not take_position or not take_position.get_position(): - self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - return - if not take_position.get_position().compare(real_position, is_action=True): - self.log_signal.emit(logging.INFO, "🟡 机器人尚未到达抓料点位") - return - self.log_signal.emit(logging.INFO, "🟢 机器人已到达抓料点位") - '''real_position''' - # 一直等待传感器2信号,永不超时 - wait_start = time.time() - timeout = 30 # 30秒超时,可根据需要调整 - sensor2_detected = False - while not sensor2_detected: - if time.time() - wait_start > timeout: - self.log_signal.emit(logging.ERROR, "⏰ FTake: 等待传感器2超时!") - self.feedStatus = FeedStatus.FNone - return - sensors = self.relay_controller.get_all_device_status('sensors') - sensor2_value = sensors.get(self.relay_controller.SENSOR2, False) - if sensor2_value: - self.log_signal.emit(logging.INFO, "✅ 传感器2检测到料包到位,开始执行抓取") - sensor2_detected = True - else: - self.log_signal.emit(logging.INFO, "⏳ FTake: 等待传感器2料包信号...") - time.sleep(0.2) # 每0.5秒检查一次 - # 执行抓取动作 - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CTake - if self.catch.catch_status == CatchStatus.CTake: - self.log_signal.emit(logging.INFO, "正在执行抓料动作...") - self.catch.catch_status = CatchStatus.COk - if self.catch.catch_status == CatchStatus.COk: - self.log_signal.emit(logging.INFO, Constant.str_feed_take_success) - if not self.sensor2_ready: - self.log_signal.emit(logging.INFO, "抓取完成,重新启动 conveyor2") - self.relay_controller.open(conveyor2=True) - self.catch.catch_status = CatchStatus.CNone - self.log_signal.emit(logging.INFO, "[码垛模式] 跳过视觉检测,准备投料") - # 移动到第一个(或当前)投料点 - if self.feedConfig.drop_positions and len(self.feedConfig.drop_positions) > self.current_drop_index: - first_drop_pos = self.feedConfig.drop_positions[self.current_drop_index] - self.log_signal.emit(logging.INFO, f"[码垛模式] 移动到投料点 {self.current_drop_index}") - self.sendTargPosition(first_drop_pos, speed=self.robotClient.feed_speed) - self.feedStatus = FeedStatus.FDropBag - else: - self.log_signal.emit(logging.ERROR, "[码垛模式] 投料点列表为空或索引错误!") - self.feedStatus = FeedStatus.FNone - return # 退出当前循环 - else: - self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - - elif self.feedStatus == FeedStatus.FBroken1: - - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - - elif self.feedStatus == FeedStatus.FBroken2: - - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - elif self.feedStatus == FeedStatus.FShake: - if self.get_current_position().get_position().compare(real_position,is_action=True): - # TODO 震动方案 - self.log_signal.emit(logging.INFO, Constant.str_feed_shake) - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CShake - return - if self.catch.catch_status == CatchStatus.CShake: - # if self.feedConfig.feedLine.feeding_to_end[ - # self.feedConfig.feedLine.feeding2end_pos_index + 1].status != FeedStatus.FShake: - # self.catch.catch_status = CatchStatus.COk - # else: - self.catch.shake_continue.SetReset() - self.next_position() - if self.feedStatus!=FeedStatus.FShake: - self.catch.catch_status = CatchStatus.CNone - return - - elif self.feedStatus == FeedStatus.FDropBag: - # 1. 确保配置了投料点 - if not self.feedConfig or not self.feedConfig.drop_positions: - self.log_signal.emit(logging.ERROR, "[码垛模式] 错误:未配置投料点列表!") - self.feedStatus = FeedStatus.FNone - return - - # 2. 获取当前目标投料点 (基于索引) - if self.current_drop_index >= len(self.feedConfig.drop_positions): - self.log_signal.emit(logging.ERROR, f"[码垛模式] 错误:投料点索引 {self.current_drop_index} 超出范围!") - self.feedStatus = FeedStatus.FNone - return - - target_drop_position = self.feedConfig.drop_positions[self.current_drop_index] - self.log_signal.emit(logging.INFO, f"[码垛模式] 当前目标投料点索引: {self.current_drop_index}") - - # 3. 检查是否到达目标投料点 - if target_drop_position.compare(real_position, is_action=True): - self.log_signal.emit(logging.INFO, f"[码垛模式] 到达投料点 {self.current_drop_index}") - - # 4. 执行投料动作 - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CDrop - self.log_signal.emit(logging.INFO, "[码垛模式] 开始执行投料动作...") - return # 等待下一周期检查 COk - if self.catch.catch_status == CatchStatus.CDrop: - self.log_signal.emit(logging.INFO, "[码垛模式] 投料动作进行中...") - return # 等待抓取模块完成 - if self.catch.catch_status == CatchStatus.COk: - self.catch.catch_status = CatchStatus.CNone - self.log_signal.emit(logging.INFO, f"[码垛模式] 在投料点 {self.current_drop_index} 投料完成") - - # 5. 更新投料计数 - self.feedConfig.num -= 1 - self.log_signal.emit(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') - - # 6. 检查是否所有投料任务完成 - if self.feedConfig.num > 0: - # 7. 更新投料点索引 (循环) - self.current_drop_index = (self.current_drop_index + 1) % len(self.feedConfig.drop_positions) - self.log_signal.emit(logging.INFO, f"[码垛模式] 更新投料点索引为: {self.current_drop_index}") - - # 8. 移动到固定的抓取点 - take_position_model = self.feedConfig.feedLine.get_take_position() - if take_position_model: - self.log_signal.emit(logging.INFO, f"[码垛模式] 移动到固定抓取点...") - self.sendTargPosition(take_position_model.get_position(), speed=self.robotClient.feed_speed) - self.feedStatus = FeedStatus.FTake # 设置状态为 FTake - else: - self.log_signal.emit(logging.ERROR, "[码垛模式] 无法获取抓取点位置!") - self.feedStatus = FeedStatus.FNone - - else: - # 9. 所有投料完成 - self.log_signal.emit(logging.INFO, "[码垛模式] 所有投料任务完成") - # 可以选择返回原点或进入空闲状态 - # 例如,移动到原点 - # self.sendTargPosition(self.robotClient.origin_position, speed=self.robotClient.reset_speed) - # self.feedStatus = FeedStatus.FStartReverse # 或者自定义一个结束状态 - self.feedStatus = FeedStatus.FNone # 简单地结束 - - else: - # 如果还没到达目标投料点,可以打印日志或等待 - # (通常机器人移动指令发出后,会自动移动到位,下次循环再检查) - self.log_signal.emit(logging.INFO, f"[码垛模式] 正在移动到投料点 {self.current_drop_index}...") - - def run_reset(self): - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.reset_status == ResetStatus.RNone: - return - - if self.reset_status == ResetStatus.RStart: - if self.feedConfig == None: return - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - self.pos_index = -1 - self.pos_near_index = -1 - self.reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position,is_action=True): - self.pos_index = index - break - - if self.pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position) < min_distance: - min_distance = get_distance(pos_model.get_position(), real_position) - self.pos_near_index = index - if self.pos_near_index != -1: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_near_index + 1] - else: - return False - else: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_index+1] - self.reversed_positions = list(reversed(self.reversed_positions)) - self.reverse_index = 0 - self.send_emergency_sound() - self.current_position = PositionModel() - self.current_position.init_position(real_position) - self.reset_status = ResetStatus.RRunging - - if self.reset_status == ResetStatus.RRunging: - if not real_position.compare(self.current_position.get_position(),is_action=True): - return - pos_model = self.reversed_positions[self.reverse_index] - if pos_model.status == FeedStatus.FTake.value: # 跳过取袋节点 - pos_model = self.reversed_positions[self.reverse_index + 1] - self.reverse_index = self.reverse_index+1 - - if pos_model.lineType == LineType.CureMid.value: - pos_model1 = self.reversed_positions[self.reverse_index + 1] - self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure, - real_position1=pos_model1.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model1 - self.reverse_index = self.reverse_index + 2 - else: - self.sendTargPosition(real_position=pos_model.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model - self.reverse_index = self.reverse_index + 1 - - if self.reverse_index == len(self.reversed_positions): - self.reset_status = ResetStatus.ROk - if self.reset_status == ResetStatus.ROk: - self.reset_status = ResetStatus.RNone - self.send_emergency_stop() - - def return_original_position(self): - - self.run_reverse = True - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.feedConfig == None: return - start_index = -1 - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - pos_index = -1 - pos_near_index = -1 - reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position): - pos_index = index - break - - if pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position)= len( - self.feeding_to_end): - return None # 或抛出异常 - # 直接返回当前索引指向的位置 - return self.feeding_to_end[self.feeding2end_pos_index] - - def get_current_take_position(self, is_reverse): - """获取当前抓取阶段的目标位置 """ - if not self.start_to_take or self.start2take_pos_index < 0 or self.start2take_pos_index >= len( - self.start_to_take): - return None # 或抛出异常 - return self.start_to_take[self.start2take_pos_index] - - def get_current_start_position(self, is_reverse): - """获取当前起始阶段的目标位置 """ - if not self.origin_to_start or self.origin2start_pos_index < 0 or self.origin2start_pos_index >= len( - self.origin_to_start): - return None - return self.origin_to_start[self.origin2start_pos_index] - - def _update_index(self, index_attr, list_attr, reverse): - """辅助函数:更新索引""" - current_index = getattr(self, index_attr) - current_list = getattr(self, list_attr) - if reverse: - current_index -= 1 - if current_index < 0: - current_index = len(current_list) - 1 - else: - current_index += 1 - if current_index >= len(current_list): - current_index = 0 - setattr(self, index_attr, current_index) - return current_index - - def get_next_feed_position(self, reverse: bool = False): - """ - 获取下一个投料位置,并更新索引。 - 这个方法负责处理 feeding_to_end 列表中的所有点,包括 FTake 前后动态点和 FDropBag 点。 - :param reverse: 是否反向获取 - :return: PositionModel 对象 - """ - if not self.feeding_to_end or self.feeding2end_pos_index < 0 or self.feeding2end_pos_index >= len( - self.feeding_to_end): - return None # 或抛出异常 - # 1. 获取当前索引指向的位置 - pos = self.feeding_to_end[self.feeding2end_pos_index] - # 2. 更新索引 (关键:实现顺序访问) - self._update_index('feeding2end_pos_index', 'feeding_to_end', reverse) - # 3. 返回之前获取的位置 - return pos - - def get_next_start_position(self, reverse: bool = False): - """获取下一个起始位置,并更新索引。""" - pos = self.origin_to_start[self.origin2start_pos_index] - self._update_index('origin2start_pos_index', 'origin_to_start', reverse) - return pos - - def get_next_take_position(self, reverse: bool = False): - """获取下一个抓取位置,并更新索引。""" - pos = self.start_to_take[self.start2take_pos_index] - self._update_index('start2take_pos_index', 'start_to_take', reverse) - return pos - - def get_take_position(self): - """ - 查找并返回 FTake 状态的位置。 - :return: PositionModel 对象或 None - """ - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - return self.feeding_to_end[i] - - def set_take_position(self, position: Real_Position, dynamic_height=0): - """ - 设置 FTake 位置,并更新其前后动态点的位置。 - :param position: 新的抓取位置 - :param dynamic_height: 动态高度调整 (如果需要) - """ - for i in range(len(self.feeding_to_end)): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - # 计算 XYZ 坐标 - #xyz = getxyz(position.X, position.Y, position.Z, position.a, position.b, position.c) - xyz = getxyz1(position.X, position.Y, position.Z, position.a, position.b, position.c) - # 创建 before 和 after 位置 - befor_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - after_take_position = Real_Position().init_position(xyz[0], - xyz[1], - xyz[2], - position.U, - position.V, - position.W) - # 安全检查索引 - if i > 0: - self.feeding_to_end[i - 1].set_position(befor_take_position) - else: - print("Warning: No position before FTake to update.") - self.feeding_to_end[i].set_position(position) - if i + 1 < len(self.feeding_to_end): - self.feeding_to_end[i + 1].set_position(after_take_position) - else: - print("Warning: No position after FTake to update.") - break # 抓料点暂时就一个 - - - - def get_position_list(self): - """ - 根据状态将 feed_positions 分割成 origin_to_start, start_to_take, feeding_to_end 三个列表。 - 并在 FTake 前后插入动态点。 - """ - index_start = -1 - index_take = -1 - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FCheck.value: - index_start = i - break - for i in range(len(self.feed_positions)): - if self.feed_positions[i].status == FeedStatus.FPhoto.value: - index_take = i - - if index_start == -1 or index_take == -1: - print("Error: FCheck or FPhoto position not found in feed_positions.") - # 可能需要抛出异常或设置默认值 - return - - self.origin_to_start = self.feed_positions[: index_start + 1] - self.start_to_take = self.feed_positions[index_start:index_take + 1] - self.feeding_to_end = self.feed_positions[index_take:] - - # 查找 FTake 并插入动态点 - take_found = False - i = 0 - while i < len(self.feeding_to_end): - if self.feeding_to_end[i].status == FeedStatus.FTake.value: - if take_found: - print("Warning: Multiple FTake positions found. Processing first one.") - break # 或处理多个,或抛出异常 - - # 创建动态点 - befor_position_model = PositionModel() - befor_position_model.init_position(None) - after_position_model = PositionModel() - after_position_model.init_position(None) - - # 插入动态点 (注意列表长度和索引的变化) - self.feeding_to_end.insert(i, befor_position_model) # 在 FTake 前插入 - i += 1 # 列表变长,索引后移 - self.feeding_to_end.insert(i + 1, after_position_model) # 在 FTake 后插入 (原 FTake 现在是 i) - # i += 1 # 如果需要继续遍历,可以增加索引 - take_found = True - break # 处理完第一个 FTake 就退出 - i += 1 - - -class FeedingConfig: - """ - FeedingConfig 类存储当前投料任务的配置信息, - 包括剩余数量、路径信息和拍照位置。 - """ - - def __init__(self, num: int, feedLine: FeedLine, photo_locs): - """ - 初始化投料配置。 - :param num: 剩余袋数 - :param feedLine: FeedLine 对象,包含路径信息 - :param photo_locs: 拍照位置列表 - """ - self.num = num - self.feedLine = feedLine - self.photo_locs = [self.deal_photo_locs(p) for p in photo_locs] - - def deal_photo_locs(self, photo_loc): - """ - 将元组或列表形式的坐标转换为 Real_Position 对象。 - :param photo_loc: [X, Y, Z, U, V, W] 的列表或元组 - :return: Real_Position 对象 - """ - position_photo = Real_Position() - position_photo.init_position(photo_loc[0], photo_loc[1], photo_loc[2], photo_loc[3], photo_loc[4], photo_loc[5]) - return position_photo - - def get_line_info(self): - pass - - -class Feeding(QObject): - need_origin_signal = Signal(str) - take_no_photo_sigal = Signal() - update_detect_image = Signal(np.ndarray) - log_signal = Signal(int, str) - - def __init__(self, robotClient: RobotClient): - super().__init__() - self.feedConfig = None - self.feedStatus = FeedStatus.FNone - self.robotClient = robotClient - - self.detection_image = None - self.init_detection_image() - self.pause = False - self.cRis_photo = CRisOrFall() - self.cRis_shake = CRisOrFall() - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.is_reverse = False - # 复位集合 - self.run_reverse = False - self.take_no_photo = False - self.reset_status = ResetStatus.RNone - self.reversed_positions = [] - self.current_position = None - self.index = 1 - self.pos_index = -1 - self.pos_near_index = -1 - self.catch = Catch(self.robotClient) - self.detect = Detect() - self.is_detected = True - self.detect_thread = threading.Thread(target=self.run_detect) - self.detect_thread.start() - self.onekey = False - self.mid_take_count = 0 - self.debug_run_count = 0 - pass - - def close_feed(self): - self.is_detected = False - self.detect_thread.join() - self.detect.detection.release() - - def init_detection_image(self): - detection_image = cv2.imread(Constant.feed_sign_path) - self.update_detect_image.emit(detection_image) - - def run_detect(self): - """检测线程函数。""" - while self.is_detected: - self.detect.run() - time.sleep(0.02) # 控制检测频率,米厂可以设置较大值 - - def run(self): - """ - 主运行逻辑,由外部循环调用。 - 这是一个状态机,根据 self.feedStatus 的值执行不同的操作。 - """ - self.catch.run() - # 获取机械臂位置 - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - - # --- 状态机主逻辑 --- - if self.feedConfig == None: - self.feedStatus = FeedStatus.FNone - - # 检查是否完成反向运行并回到原点 - if self.feedConfig != None and self.feedConfig.num == 0 and self.is_reverse and self.robotClient.origin_position.compare( - real_position, is_action=True): - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - self.log_signal.emit(logging.INFO, Constant.str_feed_reverse) - - if self.feedStatus == FeedStatus.FNone or self.pause: - return - - elif self.feedStatus == FeedStatus.FCheck: - self.log_signal.emit(logging.INFO, Constant.str_feed_check) - # 1, 检查是否是三列 - # 2, 检查是否有人 - # if self.safe_check_columns() and self.safe_check_person(): - # pass - # else: - # if self.feedConfig.num != 0: - # self.next_target() - # if == 原点 继续判断 - # else: - # QMessageBox.information(None, "提示", Constant.str_feed_safe_error_msgbox) - - # 根据是否反转,进行状态设置 - if self.is_reverse: - self.feed_Mid_Status = FeedMidStatus.FMid_Start - else: - self.feed_Mid_Status = FeedMidStatus.FMid_Take - - # 如果在起始点,则移动到下一个位置 - if self.feedConfig.feedLine.start_to_take[0].get_position().compare(real_position): - self.next_position(self.is_reverse) - - elif self.feedStatus == FeedStatus.FStart: - self.log_signal.emit(logging.INFO, Constant.str_feed_start) - # 检查是否在原点 (正向启动时) - if not self.robotClient.origin_position.compare(real_position, is_action=True) and not self.is_reverse: - # QMessageBox.information(None, "提示", Constant.str_feed_start_error) # Fuck 引起异常 - self.log_signal.emit(logging.ERROR, Constant.str_feed_start_error) - self.need_origin_signal.emit(Constant.str_feed_start_error) - self.feedStatus = FeedStatus.FNone - return - # 反向运行结束 - if self.is_reverse: - self.feedStatus = FeedStatus.FNone - self.is_reverse = False - return - - # 初始化位置列表 - self.feedConfig.feedLine.get_position_list() - self.detect.detect_status = DetectStatus.DNone - self.feed_Mid_Status = FeedMidStatus.FMid_Start - self.next_position(self.is_reverse) - - - - elif self.feedStatus == FeedStatus.FMid: - feed_pos = self.get_current_position(self.is_reverse) - if feed_pos.get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_mid) - self.next_position(self.is_reverse) - - # 增加计数器逻辑 - self.mid_take_count += 1 - # 可选:在 Debug1 模式下输出日志 - if Constant.Debug1: - self.log_signal.emit( - logging.INFO, - f"[调试计数] 已进入 FMid 分支 {self.mid_take_count} 次" - ) - if self.feedStatus == FeedStatus.FTake: - self.catch.catch_status = CatchStatus.CTake - - - elif self.feedStatus == FeedStatus.FPhoto: - if self.feedConfig.num == 0: - self.log_signal.emit(logging.INFO, Constant.str_feed_finish) - self.is_reverse = True - self.feed_Mid_Status = FeedMidStatus.FMid_Take - self.feedConfig.feedLine.start2take_pos_index = len(self.feedConfig.feedLine.start_to_take) - 2 - self.feedConfig.feedLine.origin2start_pos_index = len(self.feedConfig.feedLine.origin_to_start) - 2 - self.next_position(self.is_reverse) - self.log_signal.emit(logging.INFO, Constant.str_feed_photo) - self.init_detection_image() - return - - - if not Constant.Debug: - self.log_signal.emit(logging.INFO, Constant.str_feed_takePhoto) - self.feed_Mid_Status = FeedMidStatus.FMid_Feed - self.detect.detect_status = DetectStatus.DOk - self.log_signal.emit(logging.INFO, Constant.str_feed_takePhoto_success) - # ✅ 输出当前抓取的索引 - print(f"[调试] 即将抓取点位索引: {self.detect.position_index}") - self.log_signal.emit(logging.INFO, f"[调试] 当前抓取点位索引: {self.detect.position_index}") - # 设置当前抓取位置(使用当前 index) - self.feedConfig.feedLine.set_take_position(self.detect.detect_position, self.detect.position_index) - # ✅ 递增索引 - self.detect.position_index += 1 - # ✅ 输出下一个要加载的索引 - print(f"[调试] 下一个要加载的索引: {self.detect.position_index}") - # ✅ 重新加载下一个点位(基于更新后的 index) - self.detect.run() - # 增加计数器(用于调试显示执行次数) - self.debug_run_count += 1 - if Constant.Debug1: - self.log_signal.emit(logging.INFO, Constant.str_sys_runing) - self.log_signal.emit(logging.INFO, f"[调试计数] 当前已执行 {self.debug_run_count} 次") - self.next_position() - self.detect.detect_status = DetectStatus.DNone - if Constant.Debug1: - self.log_signal.emit(logging.INFO, Constant.str_sys_runing1) - self.log_signal.emit(logging.INFO, Constant.str_sys_runing2) - #self.feedStatus = FeedStatus.FTake - - elif self.feedStatus == FeedStatus.FTake: - self.log_signal.emit(logging.INFO, Constant.str_feed_take) - if self.feedConfig.feedLine.get_take_position().get_position() != None: - # 检查是否到达抓取点 - # self.take_no_photo = False - if self.feedConfig.feedLine.get_take_position().get_position().compare(real_position, is_action=True): - # 打开吸嘴并返回 - # self.sendIOControl(self.robotClient.con_ios[0], 1) - # self.sendIOControl(self.robotClient.con_ios[1], 1) - # self.sendIOControl(self.robotClient.con_ios[2], 1) - - self.log_signal.emit(logging.INFO, "到达抓料点位") - # 触发抓取动作 - # self.feedConfig.feedLine.set_take_position(None) - # time.sleep(self.robotClient.time_delay_take) - self.log_signal.emit(logging.INFO, Constant.str_feed_take_success) - if self.catch.catch_status == CatchStatus.COk: - # 抓取完成,移动到下一步 - self.next_position() - self.catch.catch_status = CatchStatus.CNone - if Constant.Debug1: - self.log_signal.emit(logging.INFO, Constant.str_sys_runing3) # 运行到这里了 - self.feedConfig.feedLine.get_take_position() - return - if self.catch.catch_status == CatchStatus.CTake: - # 抓取动作已发出,等待完成 (COk) - # self.catch.catch_status 应由 Catch 类在完成后设置为 COk - self.catch.catch_status = CatchStatus.COk - if Constant.Debug1: - self.log_signal.emit(logging.INFO, Constant.str_sys_runing1) # 运行到这里了2 - else: - self.log_signal.emit(logging.ERROR, Constant.str_feed_takePhoto_fail) - # self.take_no_photo = True - - # 继续获取图像 - # TODO - # self.feedConfig.feedLine.set_take_position(self.get_take_position()) - - - - - elif self.feedStatus == FeedStatus.FBroken1: - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - - elif self.feedStatus == FeedStatus.FBroken2: - if self.get_current_position().get_position().compare(real_position): - self.log_signal.emit(logging.INFO, Constant.str_feed_broken) - self.next_position() - - elif self.feedStatus == FeedStatus.FShake: - - if self.get_current_position().get_position().compare(real_position, is_action=True): - # TODO 震动方案 - self.log_signal.emit(logging.INFO, Constant.str_feed_shake) - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CShake - return - if self.catch.catch_status == CatchStatus.CShake: - # if self.feedConfig.feedLine.feeding_to_end[ - # self.feedConfig.feedLine.feeding2end_pos_index + 1].status != FeedStatus.FShake: - # self.catch.catch_status = CatchStatus.COk - # else: - self.catch.shake_continue.SetReset() - self.next_position() - if self.feedStatus != FeedStatus.FShake: - self.catch.catch_status = CatchStatus.CNone - return - - - elif self.feedStatus == FeedStatus.FDropBag: - # *** 处理投料点 (FDropBag) 的核心逻辑 *** - # 1. 确认机械臂是否已精确到达当前目标投料点 - # get_current_position() 会根据 self.feed_Mid_Status (应为 FMid_Feed) - # 调用 feedLine.get_current_feed_position(),从 feeding_to_end 列表获取 - # 由 feeding2end_pos_index 指向的点。 - if self.get_current_position().get_position().compare(real_position, is_action=True): - # 2. 记录日志:已到达投料点 - self.log_signal.emit(logging.INFO, Constant.str_feed_drop) - # 3. 与 Catch 模块进行状态交互来驱动投料动作 - # a. 初始状态 (CNone): 触发投料动作 - if self.catch.catch_status == CatchStatus.CNone: - # 将 Catch 状态设置为 CDrop,通知 Catch 模块开始执行物理投料动作 - self.catch.catch_status = CatchStatus.CDrop - # 立即返回,等待 Catch 模块处理 - return - - # b. 投料进行中 (CDrop): 等待完成 - if self.catch.catch_status == CatchStatus.CDrop: - # 什么都不做,等待 Catch 模块完成动作并更新状态 - return - # c. 投料完成 (COk): 处理后续逻辑并移动到下一个点 - if self.catch.catch_status == CatchStatus.COk: - # 重置 Catch 状态,为下一次操作做准备 - self.catch.catch_status = CatchStatus.CNone - - # (后续增加) 延时: 让物料稳定 - # time.sleep(self.robotClient.time_delay_put) - - # (后续增加) 视觉确认: 拍照确认袋子已放置 - # self.detection.get_position(...) - - # (后续增加) 更新抓取点: 如果需要根据放置情况调整下次抓取 - # self.feedConfig.feedLine.set_take_position(...) - - # 触发放置后检测 (如果需要,米厂可以不用) - if self.detect.detect_status == DetectStatus.DNone: - self.detect.detect_status = DetectStatus.DDetect - - # 4. 更新业务逻辑:减少剩余袋数 - self.feedConfig.num = self.feedConfig.num - 1 - self.log_signal.emit(logging.INFO, f'{Constant.str_feed_feed_num}{self.feedConfig.num}') - - # 5. *** 关键步骤 ***: 移动到路径中的下一个点 - # next_position() 会根据当前的 feed_Mid_Status (FMid_Feed) - # 调用 next_Feed()。 - self.next_position() - - def run_reset(self): - """执行复位操作 (状态机驱动)。""" - # 获取当前机械臂位置 - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.reset_status == ResetStatus.RNone: - # 无复位请求 - return - - if self.reset_status == ResetStatus.RStart: - # 无配置无法复位 - if self.feedConfig == None: return - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - self.pos_index = -1 - self.pos_near_index = -1 - self.reversed_positions = [] - - # 查找当前位置在路径中的索引 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position, is_action=True): - self.pos_index = index - break - - if self.pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - # 如果未精确找到,查找最近的位置 - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position) < min_distance: - min_distance = get_distance(pos_model.get_position(), real_position) - self.pos_near_index = index - # 确定复位路径 (从开始到最近/当前点) - if self.pos_near_index != -1: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_near_index + 1] - else: - self.log_signal.emit(logging.ERROR, "Cannot determine reset path.") - return False - else: - self.reversed_positions = self.feedConfig.feedLine.feed_positions[:self.pos_index + 1] - # 反转路径 - self.reversed_positions = list(reversed(self.reversed_positions)) - self.reverse_index = 0 # 复位路径索引 - self.send_emergency_sound() # 发出急停声音 - self.current_position = PositionModel() - self.current_position.init_position(real_position) - self.reset_status = ResetStatus.RRunging # 进入运行状态 - - if self.reset_status == ResetStatus.RRunging: - if not real_position.compare(self.current_position.get_position(), is_action=True): - return - pos_model = self.reversed_positions[self.reverse_index] - if pos_model.status == FeedStatus.FTake.value: # 跳过取袋节点 - pos_model = self.reversed_positions[self.reverse_index + 1] - self.reverse_index = self.reverse_index + 1 - - if pos_model.lineType == LineType.CureMid.value: - pos_model1 = self.reversed_positions[self.reverse_index + 1] - self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure, - real_position1=pos_model1.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model1 - self.reverse_index = self.reverse_index + 2 - else: - self.sendTargPosition(real_position=pos_model.get_position(), speed=self.robotClient.reset_speed) - self.current_position = pos_model - self.reverse_index = self.reverse_index + 1 - - if self.reverse_index == len(self.reversed_positions): - self.reset_status = ResetStatus.ROk - if self.reset_status == ResetStatus.ROk: - self.reset_status = ResetStatus.RNone - self.send_emergency_stop() - - # 废弃代码 - def return_original_position(self): - - self.run_reverse = True - real_position = Real_Position() - real_position.init_position(self.robotClient.status_model.world_0, - self.robotClient.status_model.world_1, - self.robotClient.status_model.world_2, - self.robotClient.status_model.world_3, - self.robotClient.status_model.world_4, - self.robotClient.status_model.world_5) - if self.feedConfig == None: return - start_index = -1 - # for index in range(len(self.feedConfig.feedLine.positions)): - # if self.feedConfig.feedLine.positions[index].status == 2: - # start_index = index - pos_index = -1 - pos_near_index = -1 - reversed_positions = [] - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if pos_model.get_position().compare(real_position): - pos_index = index - break - - if pos_index == -1: - self.log_signal.emit(logging.ERROR, Constant.str_feed_return_original_position_fail) - min_distance = 99999999 - for index, pos_model in enumerate(self.feedConfig.feedLine.feed_positions): - if get_distance(pos_model.get_position(), real_position) < min_distance: - min_distance = get_distance(pos_model.get_position(), real_position) - pos_near_index = index - if pos_near_index != -1: - reversed_positions = self.feedConfig.feedLine.feed_positions[:pos_near_index + 1] - else: - return False - else: - reversed_positions = self.feedConfig.feedLine.feed_positions[:pos_index] - reversed_positions = list(reversed(reversed_positions)) - self.reverse_index = 0 - self.send_emergency_sound() - current_position = PositionModel() - current_position.init_position(real_position) - while self.run_reverse and self.reverse_index != len(reversed_positions): - if self.reverse_index != 0 and not real_position.compare(current_position.get_position()): - continue - # todo 缺少比对 - pos_model = reversed_positions[self.reverse_index] - if pos_model.status == FeedStatus.FTake.value: # 跳过取袋节点 - - pos_model = reversed_positions[self.reverse_index + 1] - # TODO take节点判断 - - if pos_model.lineType == LineType.CureMid.value: - pos_model1 = reversed_positions[self.reverse_index + 1] - self.sendTargPosition(real_position=pos_model.get_position(), move_type=MoveType.Cure, - real_position1=pos_model1.get_position(), speed=self.robotClient.reset_speed) - current_position = pos_model1 - self.reverse_index = self.reverse_index + 2 - else: - self.sendTargPosition(real_position=pos_model.get_position(), speed=self.robotClient.reset_speed) - current_position = pos_model - self.reverse_index = self.reverse_index + 1 - self.send_emergency_stop() - return True - - def send_emergency_sound(self): - """发送急停声音 IO 控制。""" - self.sendIOControl(Constant.IO_EmergencyPoint, 1) - - def send_emergency_stop(self): - """停止急停声音 IO 控制。""" - self.sendIOControl(Constant.IO_EmergencyPoint, 0) - - def sendIOControl(self, IO_bit, IO_Status: int): - """发送 IO 控制指令。""" - IO_command = CMDInstructRequest() - io_instruction = Instruction() - io_instruction.IO = True - io_instruction.io_status = IO_Status - io_instruction.point = IO_bit # {"dsID":"HCRemoteCommand","reqType":"AddRCC","emptyList":"1","instructions":[{"oneshot":"1","action":"200","type":"0","io_status":"1","point":"15","delay":"0"}]} - IO_command.dsID = 'HCRemoteCommand' - IO_command.instructions.append(io_instruction) - self.robotClient.add_sendQuene(IO_command.toString()) - self.log_signal.emit(logging.INFO, f'{Constant.str_feed_io_control}{IO_bit},{IO_Status}') - pass - - def sendTargPosition(self, real_position, move_type: MoveType = MoveType.WORLD, speed=5, real_position1=None): - """发送目标位置移动指令。""" - position_instruction = Instruction() - position_instruction.speed = speed - position_instruction.m0 = real_position.X - position_instruction.m1 = real_position.Y - position_instruction.m2 = real_position.Z - position_instruction.m3 = real_position.U - position_instruction.m4 = real_position.V - position_instruction.m5 = real_position.W - position_instruction.smooth = self.robotClient.smooth - - position_instruction.action = move_type.value - if position_instruction.action == 17: - position_instruction.m0_p = real_position1.X - position_instruction.m1_p = real_position1.Y - position_instruction.m2_p = real_position1.Z - position_instruction.m3_p = real_position1.U - position_instruction.m4_p = real_position1.V - position_instruction.m5_p = real_position1.W - instruction_command = CMDInstructRequest() - instruction_command.instructions.append(position_instruction) - request_command = instruction_command.toString() - - log_str = f'移动到位置:{"姿势直线" if move_type == MoveType.WORLD else "姿势曲线"}:' \ - f'X:{position_instruction.m0}-' \ - f'Y:{position_instruction.m1}-' \ - f'Z:{position_instruction.m2}-' \ - f'U:{position_instruction.m3}-' \ - f'V:{position_instruction.m4}-' \ - f'W:{position_instruction.m5}' - - try: - self.log_signal.emit(logging.INFO, log_str) - except Exception as e: - self.log_signal.emit(logging.ERROR, f"Logging error in sendTargPosition: {e}") - return # 如果日志发送失败,至少不要中断主流程 - print(request_command) - self.robotClient.add_sendQuene(request_command) - - # def get_take_position(self): - # if Constant.Debug: - # return self.robotClient.status_model.getRealPosition() - # _, img, xyz, uvw, points = self.detection.get_position(Point_isVision=False, Box_isPoint=True, First_Depth=True, Iter_Max_Pixel=30,save_img_point=0, Height_reduce=30, width_reduce=30) - # self.detection_image = img.copy() - # if xyz ==None or uvw==None or points==None: - # return None - # target_position,noraml_base = getPosition(*xyz,*uvw,None,points) - # - # position = Real_Position().init_position(*target_position[:3],*noraml_base[:3]) - # position.Z = position.Z+200 - # return position - - def next_start(self, reverse=False): - """移动到下一个起始位置。""" - start_pos = self.feedConfig.feedLine.get_next_start_position(reverse) - self.feedStatus = FeedStatus(start_pos.status) if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone - if start_pos.lineType == LineType.CureMid.value: - start_pos1 = self.feedConfig.feedLine.get_next_start_position(reverse) - self.feedStatus = FeedStatus(start_pos1.status) if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone - self.sendTargPosition(real_position=start_pos.get_position(), speed=self.robotClient.reset_speed, - move_type=MoveType.Cure, real_position1=start_pos1.get_position()) - elif start_pos.lineType == LineType.WORLD.value: - if self.robotClient.status_model.getAnglePosition().is_error_angel_move(start_pos.get_position(), - self.robotClient.max_angle_interval): - self.feedStatus = None - self.log_signal.emit(logging.ERROR, Constant.str_feed_angle_error) - else: - self.sendTargPosition(real_position=start_pos.get_position(), speed=self.robotClient.reset_speed, - move_type=MoveType.AXIS) - else: - self.sendTargPosition(real_position=start_pos.get_position(), speed=self.robotClient.reset_speed) - pass - - def next_take(self, reverse=False): - """移动到下一个抓取位置。""" - take_pos = self.feedConfig.feedLine.get_next_take_position(reverse) - self.feedStatus = FeedStatus(take_pos.status) if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone - if take_pos.lineType == LineType.CureMid.value: - take_pos1 = self.feedConfig.feedLine.get_next_take_position(reverse) - self.feedStatus = FeedStatus(take_pos1.status) if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone - self.sendTargPosition(real_position=take_pos.get_position(), move_type=MoveType.Cure, - real_position1=take_pos1.get_position(), speed=self.robotClient.feed_speed) - elif take_pos.lineType == LineType.WORLD.value: - if self.robotClient.status_model.getAnglePosition().is_error_angel_move(take_pos.get_position(), - self.robotClient.max_angle_interval): - self.feedStatus = None - self.log_signal.emit(logging.ERROR, Constant.str_feed_angle_error) - else: - self.sendTargPosition(real_position=take_pos.get_position(), speed=self.robotClient.feed_speed, - move_type=MoveType.AXIS) - - else: - self.sendTargPosition(real_position=take_pos.get_position(), speed=self.robotClient.feed_speed) - pass - - def next_Feed(self, reverse=False): - """ - 移动到 feeding_to_end 列表中的下一个位置。 - 这个方法负责处理所有在 feeding_to_end 列表中的点,包括 FTake 前后的动态点、FDropBag 点等。 - """ - # 1. 调用 FeedLine 的方法获取下一个位置对象 (并更新内部索引) - # get_next_feed_position 会返回当前索引指向的点, - # 然后根据 reverse 参数更新 feeding2end_pos_index。 - feed_pos = self.feedConfig.feedLine.get_next_feed_position(reverse) - - # 2. 更新主状态机,使其与即将移动到的位置状态一致 - self.feedStatus = FeedStatus(feed_pos.status) if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone - # 3. 根据位置的 lineType 发送相应的移动指令 - if feed_pos.lineType == LineType.CureMid.value: - # 处理曲线运动 (需要两个点) - feed_pos1 = self.feedConfig.feedLine.get_next_feed_position(reverse) - self.feedStatus = FeedStatus(feed_pos1.status) if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone - self.sendTargPosition(real_position=feed_pos.get_position(), move_type=MoveType.Cure, - real_position1=feed_pos1.get_position(), speed=self.robotClient.feed_speed) - elif feed_pos.lineType == LineType.WORLD.value: - # 处理直线/关节运动 - if self.robotClient.status_model.getAnglePosition().is_error_angel_move(feed_pos.get_position(), - self.robotClient.max_angle_interval): - self.feedStatus = None - self.log_signal.emit(logging.ERROR, Constant.str_feed_angle_error) - else: - self.sendTargPosition(real_position=feed_pos.get_position(), speed=self.robotClient.feed_speed, - move_type=MoveType.AXIS) - - else: - # 默认处理 (通常是直线 WORLD 运动) - # *** 处理 FDropBag 点 *** - # 当 feeding_to_end 列表中的点是 FDropBag (status=9) 时, - # 这段默认代码会被执行,发送移动到该点的指令。 - # 一旦机械臂到达该点,run() 方法的 FDropBag 分支就会被触发, - # 完成投料后,next_position() 又会被调用,继续移动到列表中的下一个点 - - self.sendTargPosition(real_position=feed_pos.get_position(), speed=self.robotClient.feed_speed) - - def get_current_position(self, is_reverse=False): - """ - 根据当前子阶段状态获取对应的目标位置。 - :param is_reverse: 是否反向 (传递给 FeedLine 方法) - :return: PositionModel 对象或 None - """ - if self.feed_Mid_Status == FeedMidStatus.FMid_Start: - return self.feedConfig.feedLine.get_current_start_position(self.is_reverse) - elif self.feed_Mid_Status == FeedMidStatus.FMid_Take: - return self.feedConfig.feedLine.get_current_take_position(self.is_reverse) - elif self.feed_Mid_Status == FeedMidStatus.FMid_Feed: - return self.feedConfig.feedLine.get_current_feed_position(self.is_reverse) - - def next_position(self, reverse=False): - """ - 根据当前子阶段状态移动到下一个位置。 - 这是驱动整个喂料流程前进的核心方法。 - :param reverse: 是否反向移动 - """ - if self.feed_Mid_Status == FeedMidStatus.FMid_Start: - self.next_start(reverse) - elif self.feed_Mid_Status == FeedMidStatus.FMid_Take: - self.next_take(reverse) - elif self.feed_Mid_Status == FeedMidStatus.FMid_Feed: - # *** 关键调用 ***: - # 当 feed_Mid_Status 是 FMid_Feed 时,next_position() 会调用 next_Feed()。 - # next_Feed() 内部调用 feedLine.get_next_feed_position(),该方法会获取 - # feeding_to_end 列表中当前索引指向的点,并将索引递增,从而实现按顺序访问。 - # 这使得 FTake 前后动态点和 FDropBag 点都能被顺序处理。 - self.next_Feed(reverse) - - def safe_check_columns(self): - return True - pass - - def safe_check_person(self): - return True - pass diff --git a/CU/test_Catch_EMV.py b/CU/test_Catch_EMV.py deleted file mode 100644 index 27d992d..0000000 --- a/CU/test_Catch_EMV.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python3 -import unittest -from unittest.mock import patch, MagicMock - -# 假设你的模块名为 CU,Catch 定义在 CU/Catch.py -from CU.Catch import Catch, CatchStatus - -class TestCatchRelayControl(unittest.TestCase): - - @patch('CU.EMV.close') # 只mock close函数,因为我们只关心关闭电磁阀1 - def test_catch_status_ctake_calls_close_relay(self, mock_close): - # 创建一个 mock 的 RobotClient(不需要真实实现) - mock_robot_client = MagicMock() - mock_robot_client.time_delay_put = 0.5 - mock_robot_client.con_ios = [0, 1, 2] - - # 实例化 Catch 类 - catch_instance = Catch(mock_robot_client) - - # 设置状态为 CTake - catch_instance.catch_status = CatchStatus.CTake - - # 第一次 run,应该触发 close(1, 0, 0) - catch_instance.run() - - # 验证 close 是否被调用,并且是 close(1, 0, 0) - mock_close.assert_called_once_with(1, 0, 0) - - # 再次 run,不应再次调用 close - catch_instance.run() - self.assertEqual(mock_close.call_count, 1) # 确保只调用了一次 - -if __name__ == '__main__': - unittest.main() \ No newline at end of file diff --git a/CU/test_Detect.py b/CU/test_Detect.py deleted file mode 100644 index db9fca6..0000000 --- a/CU/test_Detect.py +++ /dev/null @@ -1,90 +0,0 @@ -import os -import configparser - -# 模拟 Real_Position 类 -class Real_Position: - def __init__(self): - self.X = 0 - self.Y = 0 - self.Z = 0 - self.A = 0 - self.B = 0 - self.C = 0 - - def init_position(self, x, y, z, a, b, c): - self.X = x - self.Y = y - self.Z = z - self.A = a - self.B = b - self.C = c - - def get_position(self): - return self - - def __str__(self): - return f"X:{self.X:.3f}, Y:{self.Y:.3f}, Z:{self.Z:.3f}, A:{self.A:.3f}, B:{self.B:.3f}, C:{self.C:.3f}" - - -# 模拟 DetectStatus -class DetectStatus: - DOk = "DOk" - - -# 实际要测试的类 -class Detect: - def __init__(self): - self.detection = "" - self.detect_status = DetectStatus.DOk - self.detect_position = None - self.position_index = 0 # 默认读取索引为 0 的点位 - - def run(self): - if self.detect_status == DetectStatus.DOk: - self.detect_position = None - config = configparser.ConfigParser() - config_file = os.path.join(os.path.dirname(__file__), 'list.ini') # 配置文件地址 - if not os.path.exists(config_file): - print("配置文件 list.ini 不存在") - return False - config.read(config_file) - if not config.has_section('positions'): - print("配置文件中没有 [positions] 段") - return False - if not config.has_option('positions', str(self.position_index)): - print(f"没有索引为 {self.position_index} 的点位") - return False - try: - # 读取配置项 - data = config.get('positions', str(self.position_index)).strip().split(',') - if len(data) != 6: - raise ValueError(f"点位数据格式错误(应为6个值): {data}") - - x, y, z, a, b, c = map(float, data) - # 初始化坐标 - self.detect_position = Real_Position() - self.detect_position.init_position(x, y, z, a, b, c) - return True - - except Exception as e: - print(f"读取点位时出错: {e}") - return False - return False - - -# ======================== -# 测试逻辑 -# ======================== -if __name__ == "__main__": - detect = Detect() - - print("🔧 开始测试 Detect.run() 是否能正确加载点位...\n") - - for index in range(12): # 测试索引 0~11 - detect.position_index = index - print(f"\n🔄 测试索引: {index}") - success = detect.run() - if success: - print(f"✅ 加载成功: {detect.detect_position}") - else: - print(f"❌ 加载失败(可能是越界或配置错误)") \ No newline at end of file diff --git a/Config/FeedLine.ini b/Config/FeedLine.ini index db871dc..2f885a3 100644 --- a/Config/FeedLine.ini +++ b/Config/FeedLine.ini @@ -20,10 +20,10 @@ status = 3 linetype = 4 [Position1] -x = -550.23053 -y = -1411.78418 +x = -550.177612 +y = -1411.833984 z = -825.0 -u = -149.776047 +u = -150.22406 v = 0.0 w = -0.0 id = 1 @@ -33,10 +33,10 @@ status = 3 linetype = 0 [Position12] -x = -550.23053 -y = -1411.78418 +x = -550.177612 +y = -1411.833984 z = -825.0 -u = -149.776047 +u = -150.22406 v = 0.0 w = -0.0 id = 12 @@ -59,10 +59,10 @@ status = 3 linetype = 4 [Position13] -x = 19.275372 +x = 19.283037 y = -1531.274658 -z = -59.998802 -u = -73.544907 +z = -59.997604 +u = -73.543732 v = 0.0 w = -0.0 id = 13 @@ -72,10 +72,10 @@ status = 3 linetype = 0 [Position14] -x = -550.23053 -y = -1411.78418 +x = -550.177612 +y = -1411.833984 z = -825.0 -u = -149.776047 +u = -150.22406 v = 0.0 w = -0.0 id = 14 @@ -85,10 +85,10 @@ status = 3 linetype = 0 [Position5] -x = -550.23053 -y = -1411.78418 +x = -550.177612 +y = -1411.833984 z = -1220.955688 -u = -149.776047 +u = -150.22406 v = 0.0 w = -0.0 id = 5 @@ -98,10 +98,10 @@ status = 5 linetype = 0 [Position15] -x = 19.275372 +x = 19.283037 y = -1531.274658 -z = -59.998802 -u = -73.544907 +z = -59.997604 +u = -73.543732 v = 0.0 w = -0.0 id = 15 @@ -137,10 +137,10 @@ status = 9 linetype = 0 [Position7] -x = -550.23053 -y = -1411.78418 -z = -825.0 -u = -149.776047 +x = -550.177612 +y = -1411.833984 +z = -425.0 +u = -150.22406 v = 0.0 w = -0.0 id = 7 diff --git a/Config/drop.ini b/Config/drop.ini index 19db38d..a44675e 100644 --- a/Config/drop.ini +++ b/Config/drop.ini @@ -22,12 +22,12 @@ status = 7 linetype = 4 [ResetPoint1-1] -x = -44.431 -y = -60.0 -z = -80.5 -u = 51.386 +x = -44.430626 +y = -59.997604 +z = -80.499 +u = 51.386665 v = 0.0 -w = 0.0 +w = -0.0 id = 1 order = 1 lineid = 1 @@ -36,7 +36,7 @@ linetype = 4 [DropPoints1] x = 1027.553 -y = -470.692 +y = -420.692 z = -1202.361 u = -148.482 v = 1.0 @@ -49,7 +49,7 @@ linetype = 0 [DropPoints2] x = 1027.553 -y = 729.308 +y = 679.308 z = -1202.361 u = -148.482 v = 2.0 @@ -75,7 +75,7 @@ linetype = 0 [DropPoints4] x = 1767.553 -y = -210.692 +y = -260.692 z = -1202.361 u = -58.482 v = 4.0 @@ -101,7 +101,7 @@ linetype = 0 [DropPoints6] x = 1607.553 -y = -470.692 +y = -450.692 z = -1002.361 u = 31.518 v = 6.0 @@ -114,7 +114,7 @@ linetype = 0 [DropPoints7] x = 1607.553 -y = 729.308 +y = 679.308 z = -1002.361 u = 31.518 v = 7.0 @@ -140,7 +140,7 @@ linetype = 0 [DropPoints9] x = 897.553 -y = -210.692 +y = -260.692 z = -1002.361 u = -58.482 v = 9.0 @@ -166,7 +166,7 @@ linetype = 0 [DropPoints11] x = 1027.553 -y = -470.692 +y = -420.692 z = -802.361 u = -148.482 v = 11.0 @@ -179,7 +179,7 @@ linetype = 0 [DropPoints12] x = 1027.553 -y = 729.308 +y = 679.308 z = -802.361 u = -148.482 v = 12.0 @@ -205,7 +205,7 @@ linetype = 0 [DropPoints14] x = 1767.553 -y = -210.692 +y = -260.692 z = -802.361 u = -58.482 v = 14.0 @@ -231,7 +231,7 @@ linetype = 0 [DropPoints16] x = 1607.553 -y = -470.692 +y = -450.692 z = -602.361 u = 31.518 v = 16.0 @@ -244,7 +244,7 @@ linetype = 0 [DropPoints17] x = 1607.553 -y = 729.308 +y = 679.308 z = -602.361 u = 31.518 v = 17.0 @@ -270,7 +270,7 @@ linetype = 0 [DropPoints19] x = 897.553 -y = -210.692 +y = -260.692 z = -602.361 u = -58.482 v = 19.0 @@ -296,8 +296,8 @@ linetype = 0 [DropPoints21] x = 1027.553 -y = -470.692 -z = -402.361 +y = -420.692 +z = -350.361 u = -148.482 v = 21.0 w = 0.0 @@ -309,8 +309,8 @@ linetype = 0 [DropPoints22] x = 1027.553 -y = 729.308 -z = -402.361 +y = 679.308 +z = -350.361 u = -148.482 v = 22.0 w = 0.0 @@ -323,7 +323,7 @@ linetype = 0 [DropPoints23] x = 1027.553 y = 129.308 -z = -402.361 +z = -350.361 u = -148.482 v = 23.0 w = 0.0 @@ -335,8 +335,8 @@ linetype = 0 [DropPoints24] x = 1767.553 -y = -210.692 -z = -402.361 +y = -260.692 +z = -350.361 u = -58.482 v = 24.0 w = 0.0 @@ -349,7 +349,7 @@ linetype = 0 [DropPoints25] x = 1767.553 y = 519.308 -z = -402.361 +z = -350.361 u = -238.482 v = 25.0 w = 0.0 @@ -361,8 +361,8 @@ linetype = 0 [DropPoints26] x = 1607.553 -y = -470.692 -z = -282.361 +y = -420.692 +z = -100.361 u = 31.518 v = 26.0 w = 0.0 @@ -374,8 +374,8 @@ linetype = 0 [DropPoints27] x = 1607.553 -y = 729.308 -z = -282.361 +y = 679.308 +z = -100.361 u = 31.518 v = 27.0 w = 0.0 @@ -388,7 +388,7 @@ linetype = 0 [DropPoints28] x = 1607.553 y = 129.308 -z = -282.361 +z = -100.361 u = 31.518 v = 28.0 w = 0.0 @@ -400,8 +400,8 @@ linetype = 0 [DropPoints29] x = 897.553 -y = -210.692 -z = -282.361 +y = -260.692 +z = -100.361 u = -58.482 v = 29.0 w = 0.0 @@ -414,7 +414,7 @@ linetype = 0 [DropPoints30] x = 897.553 y = 519.308 -z = -202.361 +z = -100.361 u = -238.482 v = 30.0 w = 0.0 diff --git a/Constant.py b/Constant.py index aea600f..4b60c5f 100644 --- a/Constant.py +++ b/Constant.py @@ -3,7 +3,7 @@ import os # 调试变量 Debug = False # 控制不加图像的Fphoto False是不加 Debug1 = False # 打印很多日志节点 -DebugPosition = False # 调试位置,关闭机器人和传感器及判断 +DebugPosition = True # 调试位置,关闭机器人和传感器及判断 # Debug2 = False feedStatus = True #feedStatus的状态打印 @@ -23,6 +23,7 @@ position_set_section = 'Position' reset_line_set_section = 'ResetLine' feedLine_set_file = f'.{os.sep}Config{os.sep}FeedLine.ini' dropLine_set_file = f'.{os.sep}Config{os.sep}drop.ini' +dropLine_set_file_35 = f'.{os.sep}Config{os.sep}drop-35.ini' resetLine_set_file = f'.{os.sep}Config{os.sep}reset_line.ini' MAX_Position_num = 40 MAX_Line_num = 10 diff --git a/EMV/EMV.py b/EMV/EMV.py index 733b85f..00a4a0b 100644 --- a/EMV/EMV.py +++ b/EMV/EMV.py @@ -4,7 +4,9 @@ import socket import binascii import time import threading +from datetime import datetime import logging +from typing import Optional from PySide6.QtCore import Signal, QObject import numpy as np from pandas.core.arrays import boolean @@ -133,6 +135,7 @@ class RelayController(QObject): self.sensor2_ready = False #默认不打开 self.motor_stopped_by_sensor2 = True + self.is_drop_35=False #是否是35码 # ===================== 基础通信方法 ===================== def send_command(self, command_hex, retry_count=2, source='unknown'): @@ -142,11 +145,15 @@ class RelayController(QObject): byte_data = binascii.unhexlify(command_hex) for attempt in range(retry_count): try: + # begin_time=time.time() with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - sock.settimeout(10) + sock.settimeout(1) sock.connect((self.host, self.port)) sock.send(byte_data) response = sock.recv(1024) + + # end_time=time.time() + # print(f"({source}) 耗时: {end_time-begin_time:.3f}秒") # hex_response = binascii.hexlify(response).decode('utf-8') #if source == 'sensor': #print(f"[传感器响应] {hex_response}") @@ -158,7 +165,7 @@ class RelayController(QObject): except Exception as e: self.log_signal.emit(logging.INFO,f"网络继电器通信错误 ({source}): {e}, 尝试重连... ({attempt + 1}/{retry_count})") print(f"网络继电器通信错误 ({source}): {e}, 尝试重连... ({attempt + 1}/{retry_count})") - time.sleep(5) + time.sleep(1) self.trigger_alarm() return None @@ -221,7 +228,7 @@ class RelayController(QObject): print(f"[{command_type}] 无法获取响应数据") return responses - def get_emergency_is_pressed(self)->bool: + def get_emergency_is_pressed(self): "获取急停信号,DI 3 位为1,正常,DI 3为0时为按下急停状态,00000000000401020107 后四位01表示一个字节,最后一位(07)二进制对应开关量" "按下急停为" command = self.read_status_command.get("sensors") @@ -233,6 +240,7 @@ class RelayController(QObject): status_crc=response[8] loc_is_pressed =status_crc==1 and (status_byte & 0b100) == 0 # 0b100 表示第三位为1 else: + loc_is_pressed=None self.log_signal.emit(logging.ERROR,f"网络继电器[急停] 读取状态失败或响应无效") print(f"网络继电器[急停] 读取状态失败或响应无效") @@ -267,6 +275,37 @@ class RelayController(QObject): time.sleep(self.sensor1_loop_delay) return False + def is_valid_sensor_signal_stable(self, sensor_name, detection_duration=3.0, stability_duration=2.5, check_interval=0.1): + """ + 检测在指定时间窗口内是否存在持续稳定的有效信号 + 参数: + sensor_name: 传感器名称 + detection_duration: 总检测时间窗口(秒),默认为3秒 + stability_duration: 信号需要持续稳定的时间(秒),默认为2.5秒 + check_interval: 检测间隔(秒),默认为0.1秒 + + 返回: + True: 在时间窗口内检测到持续稳定的有效信号 + False: 未检测到持续稳定的有效信号 + """ + stable_start_time = None # 记录首次检测到有效信号的时间 + start_time = time.time() + if not self.is_valid_sensor(sensor_name): + return False # 传感器状态无效,返回 + else: + stable_start_time = time.time() # 首次检测到有效信号 + time.sleep(check_interval) + + while time.time() - start_time < detection_duration: + temp_is_valid = self.is_valid_sensor(sensor_name) + if temp_is_valid: + if time.time() - stable_start_time >= stability_duration: + return True # 信号持续稳定达到要求时间 + else: + stable_start_time = time.time() # 信号不稳定,重置计时 + time.sleep(check_interval) + return False + def is_valid_sensor_status_1(self, sensor_name): stable_count = 0 for _ in range(int(self.sensor_stable_duration / self.sensor2_loop_delay)): @@ -337,36 +376,110 @@ class RelayController(QObject): time.sleep(self.sensor2_loop_lost) return False - def is_valid_sensor_signal_stable(self, sensor_name, detection_duration=3.0, stability_duration=2.5, check_interval=0.1): + def is_valid_sensor_nowait(self,sensor_name): """ - 检测在指定时间窗口内是否存在持续稳定的有效信号 + 检查传感器状态是否有效,不等待,如果第一次没有信号不等待,有信号一起一秒钟 参数: sensor_name: 传感器名称 - detection_duration: 总检测时间窗口(秒),默认为3秒 - stability_duration: 信号需要持续稳定的时间(秒),默认为2.5秒 - check_interval: 检测间隔(秒),默认为0.1秒 - 返回: - True: 在时间窗口内检测到持续稳定的有效信号 - False: 未检测到持续稳定的有效信号 + True: 传感器状态有效 + False: 传感器状态无效 """ - stable_start_time = None # 记录首次检测到有效信号的时间 - start_time = time.time() - if not self.is_valid_sensor(sensor_name): - return False # 传感器状态无效,返回 - else: - stable_start_time = time.time() # 首次检测到有效信号 - time.sleep(check_interval) - - while time.time() - start_time < detection_duration: - temp_is_valid = self.is_valid_sensor(sensor_name) - if temp_is_valid: - if time.time() - stable_start_time >= stability_duration: - return True # 信号持续稳定达到要求时间 + stable_count = 0 + _try_nums=5 # 尝试次数 + for _num in range(_try_nums): + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + + if not response: + print(f"[警告] 无法获取 {sensor_name} 的响应,尝试重试...") + return False else: - stable_start_time = None # 信号不稳定,重置计时 - time.sleep(check_interval) + temp_status_code = self.parse_status_code(response) + if temp_status_code in self.required_codes_1: + stable_count += 1 + if stable_count >= 3: + return True + else: + if _num==0: + #首次没有信号,直接返回 + return False + else: + stable_count = 0 + time.sleep(self.sensor2_loop_lost) return False + + + def is_valid_sensor_stable(self,sensor_name): + """ + 检查传感器状态是否有效 + 参数: + sensor_name: 传感器名称 + 返回: + True: 传感器状态有效 + False: 传感器状态无效 + """ + #检测一秒钟,首次没有信号直接返回 + if not self.is_valid_sensor_nowait(sensor_name): + return False + #需要增加超时时间,否则会一直等待 + stable_count = 0 + _try_nums=10 # 尝试次数 + for _ in range(_try_nums): + + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + if response: + temp_status_code = self.parse_status_code(response) + if temp_status_code in self.required_codes_1: + stable_count += 1 + print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}:检测到信号,已检测 {stable_count} 次") + if stable_count >= 8: + return True + else: + print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}:未检测到信号,已检测 {stable_count} 次") + else: + print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}:[警告] 无法获取 {sensor_name} 的响应,尝试重试...") + # else: + # stable_count = 0 + time.sleep(self.sensor2_loop_delay) + return False + + # def is_valid_sensor_signal_stable(self, sensor_name, detection_duration=3.0, stability_duration=2.5, check_interval=0.1): + # """ + # 检测在指定时间窗口内是否存在持续稳定的有效信号 + # 参数: + # sensor_name: 传感器名称 + # detection_duration: 总检测时间窗口(秒),默认为3秒 + # stability_duration: 信号需要持续稳定的时间(秒),默认为2.5秒 + # check_interval: 检测间隔(秒),默认为0.1秒 + + # 返回: + # True: 在时间窗口内检测到持续稳定的有效信号 + # False: 未检测到持续稳定的有效信号 + # """ + # stable_start_time = None # 记录首次检测到有效信号的时间 + # stable_end_time = None # 记录最后检测到有效信号的时间 + # start_time = time.time() + # if not self.is_valid_sensor_single(sensor_name): + # return False # 传感器状态无效,返回 + # else: + # stable_start_time = time.time() # 首次检测到有效信号 + # # stable_end_time = stable_start_time # 最后检测到有效信号 + # time.sleep(check_interval) + + # while time.time() - start_time < detection_duration: + # #1s时间 + # temp_is_valid = self.is_valid_sensor_single(sensor_name) + # if temp_is_valid: + # stable_start_time=time.time() + # else: + # stable_start_time = None # 信号不稳定,重置计时 + # # time.sleep(check_interval) + # if stable_start_time - start_time >= stability_duration: + # return True # 信号持续稳定达到要求时间 + # else: + # return False # ===================== 动作控制方法 ===================== def open(self, conveyor1=False, pusher=False, conveyor2=False, clamp=False, pusher1=False, conveyor2_reverse=False,belt=False,alarm=False,blow_sensor2=False): # if Constant.DebugPosition: @@ -380,7 +493,7 @@ class RelayController(QObject): time.sleep(self.delay_pusher) if conveyor2: self.send_command(self.valve_commands[self.CONVEYOR2]['open']) - time.sleep(self.delay_conveyor) + # time.sleep(0.01) if clamp: self.send_command(self.valve_commands[self.CLAMP]['open']) time.sleep(self.delay_clamp) @@ -409,10 +522,10 @@ class RelayController(QObject): time.sleep(self.delay_pusher) if conveyor2: self.send_command(self.valve_commands[self.CONVEYOR2]['close']) - time.sleep(self.delay_conveyor) + #time.sleep(self.delay_conveyor) if clamp: self.send_command(self.valve_commands[self.CLAMP]['close']) - time.sleep(self.delay_clamp) + time.sleep(0.05) if pusher1: self.send_command(self.valve_commands[self.PUSHER1]['close']) time.sleep(self.delay_pusher) @@ -496,11 +609,18 @@ class RelayController(QObject): _is_pause_close=True try: - if _is_signal or self.is_valid_sensor_status_1(self.SENSOR2): + # if _is_signal or self.is_valid_sensor_status_1(self.SENSOR2): + #motor_stopped_by_sensor2=False(在滚动的时候)才去检测信号,否则如果后面的料子 + #有信号了,不会在FPhoto后开滚筒 + if (not self.motor_stopped_by_sensor2) and (_is_signal or self.is_valid_sensor_stable(self.SENSOR2)): #检测到信号,如果之前是没有信号,关闭滚筒 - print('检查到sensor2信号') + #print('检查到sensor2信号') if _is_signal and self.is_valid_sensor2_status_lost(self.SENSOR2): - print('检查到sensor2信号消失') + self.log_signal.emit(logging.INFO,"检查到sensor2信号消失") + if self.is_drop_35: + time.sleep(3.5) + self.open(conveyor2_reverse=True) + time.sleep(2.5) self.close(conveyor2=True) #滚筒关闭标志 self.motor_stopped_by_sensor2 = True @@ -512,21 +632,23 @@ class RelayController(QObject): if self.sensor2_ready: #只有在FPhoto处才有效 _is_signal=True - if self.motor_stopped_by_sensor2: - print('开滚筒') - self.open(conveyor2=True) - self.motor_stopped_by_sensor2 = False + # if self.motor_stopped_by_sensor2: + # self.log_signal.emit(logging.INFO,"开滚筒2") + # print('开滚筒2开滚筒2开滚筒2开滚筒2') + # self.open(conveyor2=True) + # self.motor_stopped_by_sensor2 = False - # time.sleep(0.1) + time.sleep(0.01) continue elif self.sensor2_ready: #sensor2_ready:通过Feeding:FPhoto处控制是否启动 if self.motor_stopped_by_sensor2: - print('开滚筒') + self.log_signal.emit(logging.INFO,"开滚筒1") + print('开滚筒1开滚筒1开滚筒1开滚筒1') self.open(conveyor2=True) self.motor_stopped_by_sensor2 = False - time.sleep(2) + time.sleep(0.5) except Exception as e: print(f"SENSOR2 处理错误: {e}") self.log_signal.emit(logging.ERROR,f"SENSOR2 处理错误: {e}") @@ -546,6 +668,13 @@ class RelayController(QObject): """开启皮带""" self.open(belt=True) + def set_drop_35(self,is_drop_35): + """ + 设置是否是35码 + is_drop_35:True是,False否 + """ + self.is_drop_35=is_drop_35 + def stop_sensor(self,sensor1_thread,sensor2_thread): if not self._running: @@ -561,12 +690,15 @@ class RelayController(QObject): def handle_emergency_pressed(self): "处理急停按钮信号状态线程" - print('检查急停按钮状态1') + #print('检查急停按钮状态1') while self._running: try: - print('检查急停按钮状态') + #print('检查急停按钮状态') loc_is_pressed =self.get_emergency_is_pressed() + if loc_is_pressed is None: + time.sleep(0.5) + continue if loc_is_pressed: # 处理急停按钮信号状态 if not self.emergency_is_pressed: @@ -575,11 +707,11 @@ class RelayController(QObject): self.emergency_is_pressed=True self.emergency_signal.emit(True) else: - print('急停按钮未被按下') + #print('急停按钮未被按下') self.emergency_is_pressed=False self.emergency_signal.emit(False) time.sleep(0.5) except Exception as e: print(f"急停 处理错误: {e}") self.log_signal.emit(logging.ERROR,f"急停线程 处理错误: {e}") - time.sleep(2) + time.sleep(1) diff --git a/EMV/EMV_HC.py b/EMV/EMV_HC.py new file mode 100644 index 0000000..e27630b --- /dev/null +++ b/EMV/EMV_HC.py @@ -0,0 +1,412 @@ +import socket +import binascii +import time +from datetime import datetime +import logging + +class RelayController: + """ + 测试传感器2信号情况 + """ + def __init__(self, host='192.168.0.18', port=50000): + super().__init__() + # ===================== 全局线程延时参数 ===================== + self.sensor1_loop_delay = 0.1 # SENSOR1 线程轮询间隔(秒) + self.sensor1_error_delay = 1.0 # SENSOR1 出错或暂停时延时(秒) + self.sensor1_post_action_delay = 0.2 # SENSOR1 每次循环后延时(秒) + + self.sensor2_loop_delay = 0.2 # SENSOR2 线程轮询间隔(秒) + self.sensor2_loop_lost=0.1 # SENSOR2 线程轮询间隔(秒) + # self.sensor2_loop_delay = 0.5 # SENSOR2 线程轮询间隔(秒) + self.sensor2_error_delay = 0.5 # SENSOR2 出错时延时(秒) + self.sensor2_post_action_delay = 0.2 # SENSOR2 每次循环后延时(秒) + # ===================== 全局动作延时参数 ===================== + self.delay_conveyor = 0.5 # 传送带开/关动作延时(一半时间,我在控制程序和线程都加了一样的延时) + self.delay_pusher = 0.05 # 推板开/关动作延时 + self.delay_clamp = 0.5 # 夹爪动作延时 + self.delay_after_pusher = 5.0 # 推板推出后到重启传动带时间 + + self.emergency_is_pressed=False + + # ===================== 传感器稳定检测参数 ===================== + self.sensor_stable_duration = 1.0 # 传感器状态稳定检测时间(秒) + self.sensor_max_attempts = 3 # 连续检测次数达到此值判定有效 + self.sensor1_debounce_time = 1.0 # 传感器1防抖时间(秒) + + # ===================== 网络与设备映射 ===================== + self.host = host + self.port = port + + self.CONVEYOR1 = 'conveyor1' + self.PUSHER = 'pusher' + self.CONVEYOR2 = 'conveyor2' + self.CONVEYOR2_REVERSE = 'conveyor2_reverse' + self.CLAMP = 'clamp' + self.PUSHER1 = 'pusher1' + self.SENSOR1 = 'sensor1' + self.SENSOR2 = 'sensor2' + self.BELT = 'belt' + self.ALARM = 'alarm' + self.BLOW_SENSOR2 = 'blow_sensor2' + + self.valve_commands = { + #包装机皮带 + self.CONVEYOR1: {'open': '000000000006010500070000', 'close': '00000000000601050007FF00'}, + # self.CONVEYOR11: {'open': '00000000000601050000FF00', 'close': '000000000006010500000000'}, + self.PUSHER: {'open': '00000000000601050001FF00', 'close': '000000000006010500010000'}, + #滚筒,2000 0012正转,2000 0022 2001变频器频率调整 2000正反转。 + self.CONVEYOR2: {'open': '000100000006020620000012', 'close': '000100000006020620000001'}, + #DO4 + self.CLAMP: {'open': '00000000000601050003FF00', 'close': '000000000006010500030000'}, + #DO5 回 DO2推 + self.PUSHER1: {'open': '00000000000601050004FF00', 'close': '000000000006010500040000'}, + #D07 长皮带 + self.BELT: {'open': '00000000000601050006FF00', 'close': '000000000006010500060000'}, + #D01 声控报警 + self.ALARM: {'open': '00000000000601050000FF00', 'close': '000000000006010500000000'}, + #DO6 吹传感器2 + self.BLOW_SENSOR2: {'open': '00000000000601050005FF00', 'close': '000000000006010500050000'}, + #滚筒反转 + self.CONVEYOR2_REVERSE: {'open': '000100000006020620000022', 'close': '000100000006020620000001'} + } + + #devices:读取继点器的状态 + #sensors 传感器的状态 D12 + self.read_status_command = { + 'devices': '000000000006010100000008', + 'sensors': '000000000006010200000008' + } + + self.device_bit_map = { + self.CONVEYOR1: 0, + self.PUSHER: 1, + self.CONVEYOR2: 2, + self.CLAMP: 3, + self.PUSHER1: 4, + self.CONVEYOR2_REVERSE: 5, + self.BELT: 6, + self.ALARM: 7, + #self.BLOW_SENSOR2: 8 + } + + self.sensor_bit_map = { + self.SENSOR1: 0, + self.SENSOR2: 1, + } + + self.device_name_map = { + self.CONVEYOR1: "包装机皮带", + self.PUSHER: "推板开", + self.CONVEYOR2: "滚筒", + self.CLAMP: "机械臂夹爪", + self.PUSHER1: "推板关", + self.CONVEYOR2_REVERSE: "滚筒反转", + self.BELT: "皮带", + self.ALARM: "声控报警", + self.BLOW_SENSOR2: "吹传感器2" + } + + self.sensor_name_map = { + self.SENSOR1: '位置传感器1', + self.SENSOR2: '位置传感器2', + } + + # ===================== 状态控制变量 ===================== + self._running = False #线程运行标识 + self._ispause = False #线程暂停标识 + self._sensor1_thread = None + self._sensor2_thread = None + + self.required_codes = {'0101', '0103','0105','0107'} # 有效状态码(传感器1) + self.required_codes_1 = {'0102', '0103','0106','0107'} # 有效状态码(传感器2) + + self.sensor1_triggered = False + self.sensor1_last_time = 0 + + self.sensor2_ready = False #默认不打开 + self.motor_stopped_by_sensor2 = True + + # ===================== 基础通信方法 ===================== + def send_command(self, command_hex, retry_count=2, source='unknown'): + byte_data = binascii.unhexlify(command_hex) + for attempt in range(retry_count): + try: + # begin_time=time.time() + with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: + sock.settimeout(1) + sock.connect((self.host, self.port)) + sock.send(byte_data) + response = sock.recv(1024) + + # end_time=time.time() + # print(f"({source}) 耗时: {end_time-begin_time:.3f}秒") + # hex_response = binascii.hexlify(response).decode('utf-8') + #if source == 'sensor': + #print(f"[传感器响应] {hex_response}") + #elif source == 'device': + #print(f"[设备控制响应] {hex_response}") + #else: + #print(f"[通信响应] {hex_response}") + return response + except Exception as e: + self.log_signal.emit(logging.INFO,f"网络继电器通信错误 ({source}): {e}, 尝试重连... ({attempt + 1}/{retry_count})") + print(f"网络继电器通信错误 ({source}): {e}, 尝试重连... ({attempt + 1}/{retry_count})") + time.sleep(1) + self.trigger_alarm() + return None + + def trigger_alarm(self): + self.log_signal.emit(logging.ERROR,"警告:网络继电器连续多次通信失败,请检查设备连接!") + print("警告:网络继电器连续多次通信失败,请检查设备连接!") + + # ===================== 状态读取方法 ===================== + def get_all_device_status(self, command_type='devices'): + # if Constant.DebugPosition: + # return {self.SENSOR2:True} + command = self.read_status_command.get(command_type) + if not command: + print(f"未知的网络继电器读取类型: {command_type}") + return {} + + source = 'sensor' if command_type == 'sensors' else 'device' + response = self.send_command(command, source=source) + status_dict = {} + + if response and len(response) >= 10: + status_byte = response[9] + status_bin = f"{status_byte:08b}"[::-1] + bit_map = self.device_bit_map if command_type == 'devices' else self.sensor_bit_map + # name_map = self.device_name_map if command_type == 'devices' else self.sensor_name_map + + for key, bit_index in bit_map.items(): + status_dict[key] = status_bin[bit_index] == '1' + else: + print(f"网络继电器[{command_type}] 读取状态失败或响应无效") + + return status_dict + + def get_all_sensor_responses(self, command_type='sensors'): + """ + 获取所有传感器的原始 Modbus 响应字符串 + 示例:{'sensor1': '00000000000401020101', 'sensor2': '00000000000401020100'} + """ + command = self.read_status_command.get(command_type) + if not command: + print(f"未知的读取类型: {command_type}") + return {} + + source = 'sensor' if command_type == 'sensors' else 'device' + response = self.send_command(command, source=source) + responses = {} + + if response and len(response) >= 10: + hex_response = binascii.hexlify(response).decode('utf-8') + # print(f"[原始响应][{command_type}] {hex_response}") + + # 假设传感器数据从第 9 字节开始,长度为 2 字节 + for name, bit_index in self.sensor_bit_map.items(): + offset = 9 + (bit_index // 8) + bit_pos = bit_index % 8 + byte = response[offset] + status = (byte >> bit_pos) & 1 + responses[name] = hex_response + else: + print(f"[{command_type}] 无法获取响应数据") + return responses + + def parse_status_code(self, response): + """ + 从 Modbus 响应字符串中提取状态码(后两位) + 示例:00000000000401020101 -> '01' + """ + if isinstance(response, str) and len(response) >= 18: + return response[16:20] + return None + + def is_valid_sensor_status(self, sensor_name): + stable_count = 0 + for _ in range(int(self.sensor_stable_duration / self.sensor1_loop_delay)): + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + + if not response: + stable_count = 0 + else: + status_code = self.parse_status_code(response) + if status_code in self.required_codes: + stable_count += 1 + if stable_count >= self.sensor_max_attempts: + return True + else: + stable_count = 0 + time.sleep(self.sensor1_loop_delay) + return False + + def is_valid_sensor_signal_stable(self, sensor_name, detection_duration=3.0, stability_duration=2.5, check_interval=0.1): + """ + 检测在指定时间窗口内是否存在持续稳定的有效信号 + 参数: + sensor_name: 传感器名称 + detection_duration: 总检测时间窗口(秒),默认为3秒 + stability_duration: 信号需要持续稳定的时间(秒),默认为2.5秒 + check_interval: 检测间隔(秒),默认为0.1秒 + + 返回: + True: 在时间窗口内检测到持续稳定的有效信号 + False: 未检测到持续稳定的有效信号 + """ + stable_start_time = None # 记录首次检测到有效信号的时间 + start_time = time.time() + if not self.is_valid_sensor(sensor_name): + return False # 传感器状态无效,返回 + else: + stable_start_time = time.time() # 首次检测到有效信号 + time.sleep(check_interval) + + while time.time() - start_time < detection_duration: + temp_is_valid = self.is_valid_sensor(sensor_name) + if temp_is_valid: + if time.time() - stable_start_time >= stability_duration: + return True # 信号持续稳定达到要求时间 + else: + stable_start_time = time.time() # 信号不稳定,重置计时 + time.sleep(check_interval) + return False + + def is_valid_sensor_status_1(self, sensor_name): + stable_count = 0 + for _ in range(int(self.sensor_stable_duration / self.sensor2_loop_delay)): + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + + if not response: + print(f"[警告] 无法获取 {sensor_name} 的响应,尝试重试...") + stable_count = 0 + else: + status_code = self.parse_status_code(response) + if status_code in self.required_codes_1: + stable_count += 1 + if stable_count >= self.sensor_max_attempts: + return True + else: + stable_count = 0 + time.sleep(self.sensor2_loop_delay) + return False + + def is_valid_sensor2_status_lost(self, sensor_name): + stable_count = 0 + _try_nums=5 # 尝试次数 + for _ in range(_try_nums): + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + + if not response: + print(f"[警告] 无法获取 {sensor_name} 的响应,尝试重试...") + stable_count = 0 + else: + status_code = self.parse_status_code(response) + if status_code not in self.required_codes_1: + stable_count += 1 + if stable_count >= self.sensor_max_attempts: + return True + else: + stable_count = 0 + time.sleep(self.sensor2_loop_lost) + return False + + def is_valid_sensor(self,sensor_name): + """ + 检查传感器状态是否有效 + 参数: + sensor_name: 传感器名称 + 返回: + True: 传感器状态有效 + False: 传感器状态无效 + """ + stable_count = 0 + _try_nums=5 # 尝试次数 + for _ in range(_try_nums): + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + + if not response: + print(f"[警告] 无法获取 {sensor_name} 的响应,尝试重试...") + return False + else: + temp_status_code = self.parse_status_code(response) + if temp_status_code in self.required_codes_1: + stable_count += 1 + if stable_count >= 3: + return True + else: + stable_count = 0 + time.sleep(self.sensor2_loop_lost) + return False + + def is_valid_sensor_stable(self,sensor_name): + """ + 检查传感器状态是否有效 + 参数: + sensor_name: 传感器名称 + 返回: + True: 传感器状态有效 + False: 传感器状态无效 + """ + if not self.is_valid_sensor(sensor_name): + return False + #需要增加超时时间,否则会一直等待 + stable_count = 0 + _try_nums=10 # 尝试次数 + for _ in range(_try_nums): + + responses = self.get_all_sensor_responses('sensors') + response = responses.get(sensor_name) + if response: + temp_status_code = self.parse_status_code(response) + if temp_status_code in self.required_codes_1: + stable_count += 1 + print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}:检测到信号,已检测 {stable_count} 次") + if stable_count >= 8: + return True + else: + print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}:未检测到信号,已检测 {stable_count} 次") + else: + print(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}:[警告] 无法获取 {sensor_name} 的响应,尝试重试...") + # else: + # stable_count = 0 + time.sleep(self.sensor2_loop_delay) + return False + +if __name__ == "__main__": + # logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') + # 配置日志同时输出到控制台与文件 + log_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') + file_handler = logging.FileHandler('relay_controller.log', encoding='utf-8') + file_handler.setLevel(logging.INFO) + file_handler.setFormatter(log_formatter) + + console_handler = logging.StreamHandler() + console_handler.setLevel(logging.INFO) + console_handler.setFormatter(log_formatter) + + logger = logging.getLogger() + logger.setLevel(logging.INFO) + logger.addHandler(file_handler) + logger.addHandler(console_handler) + + relay_controller = RelayController() + _count=0 + while True: + responses = relay_controller.get_all_sensor_responses('sensors') + response = responses.get('sensor2') + if response: + temp_status_code = relay_controller.parse_status_code(response) + if temp_status_code in relay_controller.required_codes_1: + _count+=1 + logger.info(f"检测到信号,连续 {_count} 次") + else: + _count=0 + logger.info(f"未检测到信号") + else: + logger.info(f"[警告] 无法获取响应") + time.sleep(0.2) \ No newline at end of file diff --git a/EMV/EMV_old_save.py b/EMV/EMV_old_save.py deleted file mode 100644 index b3c3d48..0000000 --- a/EMV/EMV_old_save.py +++ /dev/null @@ -1,401 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import socket -import binascii -import time -import threading -import logging -from PySide6.QtCore import Signal, QObject -import numpy as np - -class RelayController: - need_origin_signal = Signal(str) - take_no_photo_sigal = Signal() - update_detect_image = Signal(np.ndarray) - log_signal = Signal(int, str) - def __init__(self, host='192.168.0.18', port=50000): - self.host = host - self.port = port - # 控件映射 - self.CONVEYOR1 = 'conveyor1' - self.PUSHER = 'pusher' - self.CONVEYOR2 = 'conveyor2' - self.CLAMP = 'clamp' - self.PUSHER1 = 'pusher1' - self.SENSOR1 = 'sensor1' - self.SENSOR2 = 'sensor2' - - self.valve_commands = { - self.CONVEYOR1: {'open': '00000000000601050000FF00', 'close': '000000000006010500000000'}, - self.PUSHER: {'open': '00000000000601050001FF00', 'close': '000000000006010500010000'}, - #self.CONVEYOR2: {'open': '00000000000601050002FF00', 'close': '000000000006010500020000'}, - self.CONVEYOR2: {'open': '000100000006020620000012', 'close': '000100000006020620000001'}, - self.CLAMP: {'open': '00000000000601050003FF00', 'close': '000000000006010500030000'}, - self.PUSHER1: {'open': '00000000000601050004FF00', 'close': '000000000006010500040000'}# - } - - self.read_status_command = { - 'devices': '000000000006010100000008', - 'sensors': '000000000006010200000008' - } - - - self.device_bit_map = { - self.CONVEYOR1: 0, - self.PUSHER: 1, - self.CONVEYOR2: 2, - self.CLAMP: 3, - self.PUSHER1: 4, - } - - self.sensor_bit_map = { - self.SENSOR1: 0, - self.SENSOR2: 1,# - } - - self.device_name_map = { - self.CONVEYOR1: "传送带1", - self.PUSHER: "推板开", - self.CONVEYOR2: "传送带2", - self.CLAMP: "机械臂夹爪", - self.PUSHER1: "推板关", - } - - self.sensor_name_map = { - self.SENSOR1: '位置传感器1', - self.SENSOR2: '位置传感器2', - } - - # 传感器状态变量 - self._running = False - self._sensor1_thread = None - self._sensor2_thread = None - - # 配置项 - self.required_codes = {'0101', '0103'} # 有效状态码 - self.required_codes_1 = { '0102', '0103'} # 有效状态码(需要修改) - self.stable_duration = 1.0 # 稳定检测时间(秒) - self.max_attempts = 3 # 连续检测次数 - self.poll_interval = 0.2 # 检测间隔 - - # 状态锁和防抖 - self.sensor1_triggered = False - self.sensor1_last_time = 0 - self.sensor1_debounce = 2.0 - - # 传感器2状态变量 - self.sensor2_ready = True - self.motor_stopped_by_sensor2 = False - - def send_command(self, command_hex, retry_count=2, source='unknown'): - byte_data = binascii.unhexlify(command_hex) - for attempt in range(retry_count): - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - sock.settimeout(10) - sock.connect((self.host, self.port)) - sock.send(byte_data) - response = sock.recv(1024) - hex_response = binascii.hexlify(response).decode('utf-8') - #if source == 'sensor': - #print(f"[传感器响应] {hex_response}") - #elif source == 'device': - #print(f"[设备控制响应] {hex_response}") - #else: - #print(f"[通信响应] {hex_response}") - return response - except Exception as e: - print(f"通信错误 ({source}): {e}, 尝试重连... ({attempt + 1}/{retry_count})") - time.sleep(5) - self.trigger_alarm() - return None - - def trigger_alarm(self): - print("警告:连续多次通信失败,请检查设备连接!") - - def get_all_device_status(self, command_type='devices'): - command = self.read_status_command.get(command_type) - if not command: - print(f"未知的读取类型: {command_type}") - return {} - - source = 'sensor' if command_type == 'sensors' else 'device' - response = self.send_command(command, source=source) - status_dict = {} - - if response and len(response) >= 10: - status_byte = response[9] - status_bin = f"{status_byte:08b}"[::-1] - - bit_map = self.device_bit_map if command_type == 'devices' else self.sensor_bit_map - name_map = self.device_name_map if command_type == 'devices' else self.sensor_name_map - - for key, bit_index in bit_map.items(): - status_dict[key] = status_bin[bit_index] == '1' - else: - print(f"[{command_type}] 读取状态失败或响应无效") - - return status_dict - - def get_all_sensor_responses(self, command_type='sensors'): - """ - 获取所有传感器的原始 Modbus 响应字符串 - 示例:{'sensor1': '00000000000401020101', 'sensor2': '00000000000401020100'} - """ - command = self.read_status_command.get(command_type) - if not command: - print(f"未知的读取类型: {command_type}") - return {} - - source = 'sensor' if command_type == 'sensors' else 'device' - response = self.send_command(command, source=source) - responses = {} - - if response and len(response) >= 10: - hex_response = binascii.hexlify(response).decode('utf-8') - print(f"[原始响应][{command_type}] {hex_response}") - - # 假设传感器数据从第 9 字节开始,长度为 2 字节 - for name, bit_index in self.sensor_bit_map.items(): - offset = 9 + (bit_index // 8) - bit_pos = bit_index % 8 - byte = response[offset] - status = (byte >> bit_pos) & 1 - responses[name] = hex_response - else: - print(f"[{command_type}] 无法获取响应数据") - return responses - - def parse_status_code(self, response): - """ - 从 Modbus 响应字符串中提取状态码(后两位) - 示例:00000000000401020101 -> '01' - """ - if isinstance(response, str) and len(response) >= 18: - return response[16:20] - return None - - def is_valid_sensor_status(self, sensor_name: object) -> object: - """ - 检查传感器是否在稳定时间内连续返回有效状态码(01 或 03) - """ - stable_count = 0 - for _ in range(int(self.stable_duration / self.poll_interval)): - responses = self.get_all_sensor_responses('sensors') - response = responses.get(sensor_name) - - if not response: - print(f"[警告] 无法获取 {sensor_name} 的响应,尝试重试...") - stable_count = 0 - else: - status_code = self.parse_status_code(response) - if status_code in self.required_codes: - stable_count += 1 - if stable_count >= self.max_attempts: - return True - else: - stable_count = 0 - print(f"[警告] {sensor_name} 状态码无效: {status_code}") - time.sleep(self.poll_interval) - return False - - def is_valid_sensor_status_1(self, sensor_name: object) -> object: - """ - 检查传感器是否在稳定时间内连续返回有效状态码(01 或 03) - """ - stable_count = 0 - for _ in range(int(self.stable_duration / self.poll_interval)): - responses = self.get_all_sensor_responses('sensors') - response = responses.get(sensor_name) - - if not response: - print(f"[警告] 无法获取 {sensor_name} 的响应,尝试重试...") - stable_count = 0 - else: - status_code = self.parse_status_code(response) - if status_code in self.required_codes_1: - stable_count += 1 - if stable_count >= self.max_attempts: - return True - else: - stable_count = 0 - print(f"[警告] {sensor_name} 状态码无效: {status_code}") - time.sleep(self.poll_interval) - return False - - - def open(self, conveyor1=False, pusher=False, conveyor2=False, clamp=False, pusher1=False): - status = self.get_all_device_status() - if conveyor1 and not status.get(self.CONVEYOR1, False): - print("打开传送带1") - self.send_command(self.valve_commands[self.CONVEYOR1]['open'], source='device') - time.sleep(1) - - if pusher and not status.get(self.PUSHER, False): - print("打开推板") - self.send_command(self.valve_commands[self.PUSHER]['open'], source='device') - time.sleep(0.05) - - if conveyor2 and not status.get(self.CONVEYOR2, False): - print("打开传送带2") - self.send_command(self.valve_commands[self.CONVEYOR2]['open'], source='device') - time.sleep(1) - - if clamp and not status.get(self.CLAMP, False): - print("启动机械臂抓夹") - self.send_command(self.valve_commands[self.CLAMP]['open'], source='device') - time.sleep(0.5) - - if pusher1 and not status.get(self.PUSHER1, False): - print("关闭推板") - self.send_command(self.valve_commands[self.PUSHER1]['open'], source='device') - time.sleep(0.05) - - - def close(self, conveyor1=False, pusher=False, conveyor2=False, clamp=False, pusher1=False): - status = self.get_all_device_status() - if conveyor1 : - #if conveyor1 and status.get(self.CONVEYOR1, True): - print("关闭传送带1") - self.send_command(self.valve_commands[self.CONVEYOR1]['close'], source='device') - time.sleep(1) - - if pusher : - #if pusher and status.get(self.PUSHER, True): - print("关闭推板") - self.send_command(self.valve_commands[self.PUSHER]['close'], source='device') - time.sleep(0.05) - - if conveyor2 : - #if conveyor2 and status.get(self.CONVEYOR2, True): - print("关闭传送带2") - self.send_command(self.valve_commands[self.CONVEYOR2]['close'], source='device') - time.sleep(1) - - if clamp : - #if clamp and status.get(self.CLAMP, True): - print("停止机械臂抓夹") - self.send_command(self.valve_commands[self.CLAMP]['close'], source='device') - time.sleep(0.5) - - if pusher1 : - #if pusher and status.get(self.PUSHER1, True): - print("关闭推板_1") - self.send_command(self.valve_commands[self.PUSHER1]['close'], source='device') - time.sleep(0.05) - - def handle_sensor1(self): - while self._running: - try: - # 检查传感器是否返回有效状态码(01 或 03) - if self.is_valid_sensor_status(self.SENSOR1): - current_time = time.time() - # 判断是否已触发 或 是否在防抖时间内 - if not self.sensor1_triggered and (current_time - self.sensor1_last_time) > self.sensor1_debounce: - print("✅ SENSOR1 检测到有效信号,开始执行推料流程") - # 标记已触发,防止重复执行 - self.sensor1_triggered = True - self.sensor1_last_time = current_time - # 1. 停止包装机皮带电机(关闭) - self.close(conveyor1=True) - time.sleep(0.5) - # 2. 推板开启 - self.open(pusher=True) - time.sleep(0.1) - self.close(pusher=True) - # 2结束 - time.sleep(3) # 保持 3 秒 - # 3. 包装机皮带电机开启 - self.open(conveyor1=True) - time.sleep(0.5) - # 4. 推板关闭 - #self.close(pusher=True) - self.open(pusher1=True) - time.sleep(0.1) - self.close(pusher1=True) - time.sleep(1) - # 5. 状态检查(可选) - status = self.get_all_device_status() - if status.get('conveyor1') and not status.get('pusher'): - print("🟢流程完成1:皮带运行中,推板已收回") - else: - print("⚠️ 状态异常,请检查设备") - # 流程结束,重置触发标志 - self.sensor1_triggered = False - # 如果传感器无效,确保触发标志可重置(可选) - time.sleep(0.2) - - except Exception as e: - print(f"SENSOR1 处理错误: {e}") - self.sensor1_triggered = False - time.sleep(1) - - - #传感器2检测到料包 → 立即停止 conveyor2」这个逻辑 放在传感器线程中处理 - def handle_sensor2(self): - while self._running: - try: - # 检测传感器2状态 - #self.sensor2_ready = None - if self.is_valid_sensor_status_1(self.SENSOR2): - print("✅ SENSOR2 检测到有效信号,开始执行关闭滚筒电机流程") - if not self.sensor2_ready: - #self.log_signal.emit(logging.INFO, "🟢 传感器2检测到料包到位,立即停止 conveyor2") - # ✅ 立即停止电机(不管机器人是否在抓取) - self.close(conveyor2=True) - print("执行关闭") - self.motor_stopped_by_sensor2 = True # 标记为传感器2触发停止 - self.sensor2_ready = True - else: - if self.sensor2_ready and self.motor_stopped_by_sensor2: - #self.log_signal.emit(logging.INFO, "🟡 传感器2未检测到料包,准备重新启动 conveyor2") - # ✅ 重新启动 conveyor2(可选) - self.open(conveyor2=True) - self.motor_stopped_by_sensor2 = False - self.sensor2_ready = False - - time.sleep(0.5) - except Exception as e: - self.log_signal.emit(logging.ERROR, f"🔴 SENSOR2 处理错误: {e}") - time.sleep(1) - def start(self): - if self._running: - print("线程已经在运行") - return - print("启动传感器线程") - self._running = True - self._sensor1_thread = threading.Thread(target=self.handle_sensor1, daemon=True) - self._sensor2_thread = threading.Thread(target=self.handle_sensor2, daemon=True) - self._sensor1_thread.start() - self._sensor2_thread.start() - - def stop(self): - if not self._running: - print("线程未在运行") - return - print("停止传感器线程") - self._running = False - if self._sensor1_thread: - self._sensor1_thread.join() - if self._sensor2_thread: - self._sensor2_thread.join() - print("传感器线程已终止。") - - def start_sensor1_only(self): - if self._running: - print("传感器线程已经在运行") - return - print("启动传感器1监听线程...") - self._running = True - self._sensor1_thread = threading.Thread(target=self.handle_sensor1, daemon=True) - self._sensor1_thread.start() - - -if __name__ == '__main__': - controller = RelayController() - controller.start() - try: - while True: - time.sleep(1) - except KeyboardInterrupt: - controller.stop() \ No newline at end of file diff --git a/EMV/EMV_reneer_pengqi_save.py b/EMV/EMV_reneer_pengqi_save.py deleted file mode 100644 index 3fe94d9..0000000 --- a/EMV/EMV_reneer_pengqi_save.py +++ /dev/null @@ -1,274 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import socket -import binascii -import time -import threading - -class RelayController: - def __init__(self, host='192.168.0.18', port=50000): - self.host = host - self.port = port - - # 控件映射 - self.CONVEYOR1 = 'conveyor1' - self.PUSHER = 'pusher' - self.CONVEYOR2 = 'conveyor2' - self.CLAMP = 'clamp' - self.SENSOR1 = 'sensor1' - self.SENSOR2 = 'sensor2' - - self.valve_commands = { - self.CONVEYOR1: {'open': '00000000000601050000FF00', 'close': '000000000006010500000000'}, - self.PUSHER: {'open': '00000000000601050001FF00', 'close': '000000000006010500010000'}, - self.CONVEYOR2: {'open': '00000000000601050002FF00', 'close': '000000000006010500020000'}, - self.CLAMP: {'open': '00000000000601050003FF00', 'close': '000000000006010500030000'} - } - - self.read_status_command = { - 'devices': '000000000006010100000008', - 'sensors': '000000000006010200000008' - } - - self.device_bit_map = { - self.CONVEYOR1: 0, - self.PUSHER: 1, - self.CONVEYOR2: 2, - self.CLAMP: 3, - } - - self.sensor_bit_map = { - self.SENSOR1: 0, - self.SENSOR2: 1, - } - - self.device_name_map = { - self.CONVEYOR1: "传送带1", - self.PUSHER: "推板", - self.CONVEYOR2: "传送带2", - self.CLAMP: "机械臂" - } - - self.sensor_name_map = { - self.SENSOR1: '位置传感器1', - self.SENSOR2: '位置传感器2', - } - - self._running = False - self._sensor1_thread = None - self._sensor2_thread = None - - def send_command_old(self, command_hex): - byte_data = binascii.unhexlify(command_hex) - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - try: - sock.connect((self.host, self.port)) - sock.send(byte_data) - response = sock.recv(1024) - print(f"收到响应: {binascii.hexlify(response)}") - return response - except Exception as e: - print(f"通信错误: {e}") - return None - - def start_sensor1_only(self): - if self._running: - print("线程已经在运行") - return - print("启动传感器1监听线程") - self._running = True - self._sensor1_thread = threading.Thread(target=self.handle_sensor1, daemon=True) - self._sensor1_thread.start() - - def send_command(self, command_hex, retry_count=5, source='unknown'): - byte_data = binascii.unhexlify(command_hex) - for attempt in range(retry_count): - try: - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: - sock.settimeout(10) - sock.connect((self.host, self.port)) - sock.send(byte_data) - response = sock.recv(1024) - hex_response = binascii.hexlify(response).decode('utf-8') - - # 根据 source 区分响应来源 - if source == 'sensor': - print(f"[传感器响应] {hex_response}") - elif source == 'device': - print(f"[设备控制响应] {hex_response}") - else: - print(f"[通信响应] {hex_response}") - - return response - except Exception as e: - print(f"通信错误 ({source}): {e}, 尝试重连... ({attempt + 1}/{retry_count})") - if attempt == retry_count - 1: - self.trigger_alarm() - time.sleep(5) - return None - - def trigger_alarm(self): - """当通信错误超过最大重试次数时触发报警""" - print("警告:连续多次通信失败,请检查设备连接!") - # 这里可以添加更多的报警措施,如发送邮件、短信或声音警报等 - - def get_all_device_status(self, command_type='devices'): - command = self.read_status_command.get(command_type) - if not command: - print(f"未知的读取类型: {command_type}") - return {} - - # 设置来源标识 - source = 'sensor' if command_type == 'sensors' else 'device' - - response = self.send_command(command, source=source) - status_dict = {} - - if response and len(response) >= 10: - status_byte = response[9] - status_bin = f"{status_byte:08b}"[::-1] - - bit_map = self.device_bit_map if command_type == 'devices' else self.sensor_bit_map - name_map = self.device_name_map if command_type == 'devices' else self.sensor_name_map - - for key, bit_index in bit_map.items(): - status_dict[key] = status_bin[bit_index] == '1' - else: - print(f"[{command_type}] 读取状态失败或响应无效") - - return status_dict - - def get_device_status_old(self, name, command_type='devices'): - return self.get_all_device_status(command_type).get(name, None) - - def get_device_status(self, name, command_type='devices', stable_duration=1.0, max_attempts=3): - """ - 获取指定设备/传感器的状态,只有在连续稳定检测到信号后才返回 True。 - - 参数: - name (str): 设备/传感器名称,如 SENSOR1 - command_type (str): 类型,'devices' 或 'sensors' - stable_duration (float): 信号需要稳定的持续时间(秒) - max_attempts (int): 最大尝试次数(用于稳定性判断) - - 返回: - bool or None: 稳定检测到信号返回 True,否则返回 False 或 None(失败) - """ - stable_count = 0 - interval = 0.2 # 每隔多久检查一次 - - for _ in range(int(stable_duration / interval)): - statuses = self.get_all_device_status(command_type) - status = statuses.get(name) - - if status is True: - stable_count += 1 - if stable_count >= max_attempts: - return True - elif status is False: - return False - else: - # None 表示读取失败 - print(f"[警告] 读取 {name} 状态失败,尝试重试...") - stable_count = 0 - - time.sleep(interval) - - return False # 默认返回 False,避免误触发 - - def open(self, conveyor1=False, pusher=False, conveyor2=False, clamp=False): - status = self.get_all_device_status() - if conveyor1 and not status.get(self.CONVEYOR1, False): - print("打开传送带1") - self.send_command(self.valve_commands[self.CONVEYOR1]['open'], source='device') - time.sleep(1) - - if pusher and not status.get(self.PUSHER, False): - print("打开推板") - self.send_command(self.valve_commands[self.PUSHER]['open'], source='device') - time.sleep(0.05) - - if conveyor2 and not status.get(self.CONVEYOR2, False): - print("打开传送带2") - self.send_command(self.valve_commands[self.CONVEYOR2]['open'], source='device') - time.sleep(1) - - if clamp and not status.get(self.CLAMP, False): - print("启动机械臂抓夹") - self.send_command(self.valve_commands[self.CLAMP]['open'], source='device') - time.sleep(0.5) - - def close(self, conveyor1=False, pusher=False, conveyor2=False, clamp=False): - status = self.get_all_device_status() - if conveyor1 and status.get(self.CONVEYOR1, True): - print("关闭传送带1") - self.send_command(self.valve_commands[self.CONVEYOR1]['close'], source='device') - time.sleep(1) - - if pusher and status.get(self.PUSHER, True): - print("关闭推板") - self.send_command(self.valve_commands[self.PUSHER]['close'], source='device') - time.sleep(0.05) - - if conveyor2 and status.get(self.CONVEYOR2, True): - print("关闭传送带2") - self.send_command(self.valve_commands[self.CONVEYOR2]['close'], source='device') - time.sleep(1) - - if clamp and status.get(self.CLAMP, True): - print("停止机械臂抓夹") - self.send_command(self.valve_commands[self.CLAMP]['close'], source='device') - time.sleep(0.5) - - def handle_sensor1(self): - while self._running: - try: - if self.get_device_status(self.SENSOR1, 'sensors'): - print("SENSOR1 检测到信号,执行流程") - self.close(conveyor1=True) - time.sleep(2) - self.open(pusher=True) - time.sleep(5) - self.close(pusher=True) - time.sleep(2) - self.open(conveyor1=True) - time.sleep(0.5) - except Exception as e: - print(f"SENSOR1 处理错误: {e}") - - def handle_sensor2(self): - while self._running: - try: - if self.get_device_status(self.SENSOR2, 'sensors'): - print("SENSOR2 检测到信号,执行流程") - self.close(conveyor2=True) - time.sleep(2) - self.open(clamp=True) - time.sleep(2) - self.open(conveyor2=True) - time.sleep(0.5) - except Exception as e: - print(f"SENSOR2 处理错误: {e}") - - def start(self): - if self._running: - print("线程已经在运行") - return - print("启动传感器线程") - self._running = True - self._sensor1_thread = threading.Thread(target=self.handle_sensor1, daemon=True) - self._sensor2_thread = threading.Thread(target=self.handle_sensor2, daemon=True) - self._sensor1_thread.start() - self._sensor2_thread.start() - - def stop(self): - if not self._running: - print("线程未在运行") - return - print("停止传感器线程") - self._running = False # 设置标志位为 False - if self._sensor1_thread is not None: - self._sensor1_thread.join() # 等待线程结束 - if self._sensor2_thread is not None: - self._sensor2_thread.join() - print("传感器线程已终止。") \ No newline at end of file diff --git a/EMV/all_sensors_device_test.py b/EMV/all_sensors_device_test.py index 90fcf30..74fc624 100644 --- a/EMV/all_sensors_device_test.py +++ b/EMV/all_sensors_device_test.py @@ -4,6 +4,7 @@ import sys sys.path.insert(0, os.path.dirname(os.path.dirname(__file__))) from EMV import RelayController import time +from datetime import datetime import threading relay_controller = RelayController() # 实例化控制器 @@ -97,17 +98,39 @@ if __name__ == "__main__": # sensors = relay_controller.get_all_device_status() # print(sensors) # time.sleep(3) - # test_device('conveyor2', 'open') + while True: + test_device('conveyor2', 'open') + # test_device('belt', 'close') + # time.sleep(3) + test_device('conveyor2', 'close') # test_device('belt', 'close') - # time.sleep(3) - # test_device('conveyor2', 'open') - # test_device('belt', 'close') - # sensors = relay_controller.get_all_device_status('sensors') - # sensor2_value = sensors.get(relay_controller.SENSOR2, False) + + + # while True: + # responses = relay_controller.get_all_sensor_responses('sensors') + # response = responses.get(relay_controller.SENSOR2) + + # if not response: + # print(f"[警告] 无法获取 {relay_controller.SENSOR2} 的响应,尝试重试...") + + # else: + # status_code = relay_controller.parse_status_code(response) + # if status_code in relay_controller.required_codes_1: + # print(datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]+'收到有效状态码信号') + # else: + # print(datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]+'无效状态码信号') + # time.sleep(0.2) + + # relay_controller._running=True + # relay_controller.sensor2_ready=True # relay_controller.handle_sensor2() - test_device('blow_sensor2', 'close') + # test_device('blow_sensor2', 'open') + + + + # test_device('blow_sensor2', 'close') # while True: @@ -132,7 +155,7 @@ if __name__ == "__main__": # relay_controller._running=True # relay_controller.handle_emergency_pressed() - time.sleep(100) + time.sleep(1000000) print('aaaaa') diff --git a/EMV/only_sensor1_test.py b/EMV/only_sensor1_test.py deleted file mode 100644 index 53bfd66..0000000 --- a/EMV/only_sensor1_test.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import time -from EMV import RelayController # 请根据你的实际模块名修改 - -def run_real_sensor_monitor(): - # 创建控制器实例 - controller = RelayController() - - try: - print("启动传感器1监听线程...") - controller.start_sensor1_only() # 只启动传感器1的监听线程 - - print("开始监听真实传感器1信号,按 Ctrl+C 停止...") - - # 主线程可以继续做其他事情,或者只是等待 - while True: - time.sleep(1) # 保持主线程运行 - - except KeyboardInterrupt: - print("\n检测到中断信号,正在停止传感器监听...") - finally: - controller.stop() - print("程序已安全退出。") - - -if __name__ == '__main__': - run_real_sensor_monitor() \ No newline at end of file diff --git a/EMV/sensors_test.py b/EMV/sensors_test.py deleted file mode 100644 index 60bfe57..0000000 --- a/EMV/sensors_test.py +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -import time -import logging -from threading import Thread -from unittest.mock import patch - -# 假设你的 RelayController 类在名为 EMV 的模块中 -from EMV import RelayController # 替换为你的模块名 - -# 设置日志格式 -logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') - -def simulate_sensor(controller, sensor_name, active=True, duration=10): - """ - 模拟指定传感器在一段时间内处于激活状态。 - :param controller: RelayController 实例 - :param sensor_name: 要模拟的传感器名(如 controller.SENSOR2) - :param active: 是否激活传感器信号 - :param duration: 模拟运行时间(秒) - """ - logging.info(f"🧪 开始模拟传感器:{controller.sensor_name_map.get(sensor_name, sensor_name)}") - original_method = controller.get_all_device_status - - def mock_get_all_device_status(command_type='devices'): - if command_type == 'sensors': - all_status = original_method(command_type) - all_status[sensor_name] = active - return all_status - return original_method(command_type) - - # 确定目标函数 - target_func = None - if sensor_name == controller.SENSOR1: - target_func = controller.handle_sensor1 - elif sensor_name == controller.SENSOR2: - target_func = controller.handle_sensor2 - else: - raise ValueError("不支持的传感器名称") - - # 设置 _running 为 True,确保线程能进入循环 - controller._running = True - - # 启动线程 - sensor_thread = Thread(target=target_func, daemon=True) - sensor_thread.start() - logging.info(f"✅ {controller.sensor_name_map[sensor_name]} 监听线程已启动") - - try: - # Patch get_all_device_status 方法 - with patch.object(controller, 'get_all_device_status', mock_get_all_device_status): - logging.info(f"🟢 模拟 {controller.sensor_name_map[sensor_name]} 有信号输入,持续 {duration} 秒") - time.sleep(duration) - except Exception as e: - logging.error(f"🔴 模拟过程中发生错误: {e}") - finally: - # 停止控制器 - controller._running = False - logging.info("🛑 停止控制器主循环") - # 等待线程退出 - sensor_thread.join(timeout=2) - if sensor_thread.is_alive(): - logging.warning("⚠️ 传感器线程未能及时退出") - else: - logging.info("✅ 传感器线程已安全退出") - -if __name__ == '__main__': - # 创建控制器实例 - relay_controller = RelayController() - - # 打印当前配置的传感器名称映射(方便调试) - logging.info("🔧 当前传感器配置:") - for key, val in relay_controller.sensor_name_map.items(): - logging.info(f" {key}: {val}") - - try: - # 模拟 SENSOR2 有信号输入,运行 10 秒 - logging.info("🧪 开始模拟传感器2")#修改这里 - simulate_sensor(relay_controller, relay_controller.SENSOR1, active=True, duration=10)# - - # 可选:模拟 SENSOR1 - # logging.info("🧪 开始模拟传感器1") - # simulate_sensor(relay_controller, relay_controller.SENSOR1, active=True, duration=10) - - except KeyboardInterrupt: - logging.info("🛑 用户中断模拟") - finally: - logging.info("🏁 模拟结束") \ No newline at end of file diff --git a/MainWin.ui b/MainWin.ui deleted file mode 100644 index 99cbd9f..0000000 --- a/MainWin.ui +++ /dev/null @@ -1,6057 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 995 - 733 - - - - - 0 - 0 - - - - 爱来米业 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - background-color: #0D1128; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - border-image: url(:/main/Image/title_ico.png) 0 0 0 0 strech; -border-width: 5px 1px 3px 4px; -border-style: solid; - - - - - - false - - - - - - - - 0 - 0 - - - - color: #DBF4F5; -font: 700 12pt "Microsoft YaHei UI"; - - - 爱来米业码垛系统 - - - - - - - - - - - 0 - 0 - - - - background-color: rgb(16, 21, 49); -border: 1px solid #122041; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - QLayout::SizeConstraint::SetDefaultConstraint - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - -*{ -color:#3479BE; -background-color: #111633; -font: 12pt "Microsoft YaHei UI"; -border: 1px; -padding:18px; - -} -*:hover{ -color:#ffffff; -border-image: url(:/main/Image/backgroud_head_btn.jpg); -background-color: #1A3E79; -} -*:pressed -{ -color:#ffffff; -border-image: url(:/main/Image/backgroud_head_btn.jpg); -background-color: #1A3E79; -} - - - - 投料中心 - - - - - - - - 0 - 0 - - - - -*{ -color:#3479BE; -background-color: #111633; -font: 12pt "Microsoft YaHei UI"; -border: 1px; -padding:18px; - -} -*:pressed -{ -color:#ffffff; -border-image: url(:/main/Image/backgroud_head_btn.jpg); -background-color: #1A3E79; -} - - - - 捏合中心 - - - - - - - - 0 - 0 - - - - -*{ -color:#3479BE; -background-color: #111633; -font: 12pt "Microsoft YaHei UI"; -border: 1px; -padding:18px; - -} -*:pressed -{ -color:#ffffff; -border-image: url(:/main/Image/backgroud_head_btn.jpg); -background-color: #1A3E79; -} - - - - 成品 - - - - - - - - 0 - 0 - - - - -*{ -color:#3479BE; -background-color: #111633; -font: 12pt "Microsoft YaHei UI"; -border: 1px; -padding:18px; - -} -*:pressed -{ -color:#ffffff; -border-image: url(:/main/Image/backgroud_head_btn.jpg); -background-color: #1A3E79; -} - - - - 控制中心 - - - - - - - - - - - 0 - 0 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - *{ -color:#838992; -background-color: #1B1F34; -font: 9pt "Microsoft YaHei UI"; -border: 1px solid #282B40; -} -*:pressed -{ -color:#ffffff; -background-color: #1A3E79; -} - - - - 登录 - - - - :/main/Image/login.svg:/main/Image/login.svg - - - - - - - - 0 - 0 - - - - *{ -color:#838992; -background-color: #1B1F34; -font: 9pt "Microsoft YaHei UI"; -border: 1px solid #282B40; -} -*:pressed -{ -color:#ffffff; -background-color: #1A3E79; -} - - - - 退出 - - - - :/main/Image/logout.svg:/main/Image/logout.svg - - - - - - - - - - - - - background-color: #0D1128; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - background-color: #0D1128; -border: 1px solid #324C82; - - - - 8 - - - QLayout::SizeConstraint::SetDefaultConstraint - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - background-color: #0D1128; -border: none; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - QPushButton { - - color: white; /* 按钮文本颜色 */ - background-color: rgb(25, 30, 54); - padding: 10px ; /* 按钮内边距 */ - font: 12pt "Microsoft YaHei UI"; - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn.jpg); - } - - - 系统设置 - - - - :/main/Image/icon_leftMenu_btn_sys.svg:/main/Image/icon_leftMenu_btn_sys.svg - - - - 20 - 20 - - - - - - - - - 0 - 0 - - - - -background-color: rgb(13, 17, 40); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - background-color: rgb(13, 17, 40); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - - - QPushButton { - - background-color: rgb(16, 31, 63); - color: rgb(255, 255, 255); - - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); - - } -*:pressed -{ -border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); -} - - - - 生产界面 - - - - - - - - 0 - 0 - - - - - - QPushButton { - - background-color: rgb(16, 31, 63); - color: rgb(255, 255, 255); - - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); - - } -*:pressed -{ -border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); -} - - - - 机械臂基础设置 - - - - - - - - 0 - 0 - - - - - - QPushButton { - - background-color: rgb(16, 31, 63); - color: rgb(255, 255, 255); - - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); - - } -*:pressed -{ -border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); -} - - - - IO面板 - - - - - - - - 0 - 0 - - - - - - QPushButton { - - background-color: rgb(16, 31, 63); - color: rgb(255, 255, 255); - - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); - - } -*:pressed -{ -border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); -} - - - - 位置设定 - - - - - - - - 0 - 0 - - - - - - QPushButton { - - background-color: rgb(16, 31, 63); - color: rgb(255, 255, 255); - - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); - - } -*:pressed -{ -border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); -} - - - - 基础设置 - - - - - - - - 0 - 0 - - - - - - QPushButton { - - background-color: rgb(16, 31, 63); - color: rgb(255, 255, 255); - - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); - - } -*:pressed -{ -border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg); -} - - - - 点位调试 - - - - - - - - - - - - - - - - border: none; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - QPushButton { - - color: white; /* 按钮文本颜色 */ - background-color: rgb(25, 30, 54); - padding: 10px ; /* 按钮内边距 */ - font: 12pt "Microsoft YaHei UI"; - } - QPushButton:hover { - border-image: url(:/main/Image/backgroud_leftMenu_btn.jpg); - } - - - 其他设置 - - - - :/main/Image/icon_other.svg:/main/Image/icon_other.svg - - - - 20 - 20 - - - - - - - - -background-color: rgb(13, 17, 40); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - background-color: rgb(13, 17, 40); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 5 - - - 5 - - - 5 - - - 5 - - - 5 - - - - - - - - - - - - - - - - - - 0 - 0 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - 3 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - background-color: rgba(255, 255, 255, 0); -border-image: None; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - *{ -background-color: #7A7A7A; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:disabled -{ -background-color: #ff6e00; -} - - - - - - - - - - - - - 0 - 0 - - - - -QLabel:disabled{ - background-color: rgba(255, 255, 255, 0); - font: 700 12pt "Microsoft YaHei UI"; - color: red; -} - -QLabel{ -background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color:#7A7A7A; -} - - - 取料中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - *{ -background-color: #7A7A7A; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:disabled -{ -background-color: #ff6e00; -} - - - - - - - - - - - - - 0 - 0 - - - - -QLabel:disabled{ - background-color: rgba(255, 255, 255, 0); - font: 700 12pt "Microsoft YaHei UI"; - color: red; -} - -QLabel{ -background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color:#7A7A7A; -} - - - 拍照中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - *{ -background-color: #7A7A7A; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:disabled -{ -background-color: #ff6e00; -} - - - - - - - - - - - - - 0 - 0 - - - - -QLabel:disabled{ - background-color: rgba(255, 255, 255, 0); - font: 700 12pt "Microsoft YaHei UI"; - color: red; -} - -QLabel{ -background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color:#7A7A7A; -} - - - 抓料中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - *{ -background-color: #7A7A7A; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:disabled -{ -background-color: #ff6e00; -} - - - - - - - - - - - - - 0 - 0 - - - - -QLabel:disabled{ - background-color: rgba(255, 255, 255, 0); - font: 700 12pt "Microsoft YaHei UI"; - color: red; -} - -QLabel{ -background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color:#7A7A7A; -} - - - 投料中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - - - - - - 0 - 0 - - - - - 0 - 0 - - - - - 0 - 0 - - - - false - - - background-image: url(:/main/Image/wait.png); -background-position: center; -background-repeat: no-repeat; - - - - - - - false - - - - - - - - 0 - 0 - - - - background-color: rgba(255, 255, 255, 0); -color: red; -border-image: None; - - - 正在移动 - - - Qt::AlignmentFlag::AlignBottom|Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - border: 1px solid #324C82; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - -QTabBar::tab { - background: #191E36; - padding: 10px; -border:None; - color:#ffffff -} - - - - QTabWidget::TabShape::Rounded - - - 0 - - - Qt::TextElideMode::ElideNone - - - true - - - false - - - false - - - - - :/main/Image/log.svg:/main/Image/log.svg - - - 日志 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - color: rgb(255, 255, 255); - - - - - - - - - :/main/Image/waring.svg:/main/Image/waring.svg - - - 报警 - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - -color: rgb(255, 0, 0); - - - - - - - - - - - - - - border: 1px solid #324C82; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - border:None - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 连接状态: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} -QLabel:disabled{ - background-color: #FD3251; - color: #ffffff; - border-radius: 8px; - border: 1px solid #FD3251; - qproperty-alignment: 'AlignCenter'; -} - - - - - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 当前模式: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 自动 - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 远程指令数量: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 0 - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 当前速度: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 0 - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 当前工具号: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 1 - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 报警代码: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 200 - - - - - - - - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - font: 700 16pt "Microsoft YaHei UI"; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 40 - - - - - color: rgb(255, 255, 255); - - - Y1 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 2 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 3 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 4 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 5 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 6 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 7 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 8 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 9 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 10 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 11 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 12 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 13 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 14 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 15 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 16 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 17 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 18 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 19 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 20 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 21 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 22 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 23 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 24 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 25 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 26 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 27 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 28 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 29 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 30 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 31 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - color: rgb(255, 255, 255); - - - 32 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - background-color: rgb(0, 170, 0); - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - border:1px solid #324C82; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - color:#ffffff; -border:None; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 80 - - - - - - 0 - 0 - - - - V1: - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - Z1: - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - Y1: - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - U1: - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - X1: - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - W1: - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 获取原点 - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 保存原点 - - - - - - - - - - - - - border:1px solid #324C82; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 12 - - - - - color:#ffffff; -border:None; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 35 - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位2 - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位1 - - - - - - - - 0 - 0 - - - - X2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位4 - - - - - - - - 0 - 0 - - - - Y3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - W2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - U3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位4 - - - - - - - - 0 - 0 - - - - W5: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - Z5: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - V2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - W3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - W1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位5 - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位3 - - - - - - - - 0 - 0 - - - - Y5: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - X3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - V3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - Y2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - V5: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - V1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位5 - - - - - - - - 0 - 0 - - - - Z3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - X5: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - X4: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - W4: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - Y1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - Z1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - U2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - Y4: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - X1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - U5: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - U4: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位3 - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - V4: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位1 - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位2 - - - - - - - - 0 - 0 - - - - Z4: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - 0 - 0 - - - - U1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - Z2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - - 0 - 0 - - - - border:1px solid #FFFfff - - - true - - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 60 - - - 0 - - - 60 - - - - - - 0 - 0 - - - - *{ -background-color: #2196F3; -font: 20pt "楷体"; -border:None; -color:#ffffff -} -*:pressed -{ -background-color: #499c8a; -} - - - - 保存设置 - - - false - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 抓取点位: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 摇晃点位: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 摇晃延时: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 复位速度: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 生产速度: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 调试速度: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 抓取延时: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 抛袋点位: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 平滑系数: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 抛袋延时: - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); - - - 动态高度: - - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - background-color: rgb(85, 170, 255); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - - - - - Qt::Orientation::Horizontal - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J5 - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - - 150 - - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - - - - - Qt::Orientation::Horizontal - - - - - - - - - - - - - - -150 - - - - - - - - - - -150 - - - - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J1 - - - - - - - -150 - - - - - - - -150 - - - - - - - Qt::Orientation::Horizontal - - - - - - - 150 - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(0, 255, 0); -} - - - - - - - - - - - - - - -150 - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - - *{ -background-color: #007AD9; -font: 12pt "楷体"; -border:6px solid #55AAFF; -color:#ffffff -} -*:pressed -{ -background-color: #499c8a; -} - - - - 确定移动 - - - - - - - Qt::Orientation::Horizontal - - - - - - - Qt::Orientation::Horizontal - - - - - - - +10 - - - - - - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - - 150 - - - - - - - - - - - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J6 - - - - - - - - - - 150 - - - - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J3 - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - - - - - - - - - -10 - - - - - - - - - - - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - - - - - - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J2 - - - - - - - 调整间隔: - - - - - - - 150 - - - - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J4 - - - - - - - Qt::Orientation::Horizontal - - - - - - - 1 - - - 0.001-20 - - - - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - color: rgb(255, 255, 255); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - color: rgb(255, 255, 255); -background-color: rgb(0, 85, 0); - - - 保存 - - - - - - - 生产线 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - QHeaderView::section { - background-color: #2C2C2C; /* 表头背景色 */ - color: white; /* 表头字体颜色 */ - font-size: 14px; /* 字体大小 */ - font-weight: bold; /* 字体加粗 */ - border: 1px solid black; /* 边框颜色 */ - padding: 4px; /* 内边距 */ - } - - - - - - - TextLabel - - - Qt::AlignmentFlag::AlignCenter - - - - - - - QHeaderView::section { - background-color: #2C2C2C; /* 表头背景色 */ - color: white; /* 表头字体颜色 */ - font-size: 14px; /* 字体大小 */ - font-weight: bold; /* 字体加粗 */ - border: 1px solid black; /* 边框颜色 */ - padding: 4px; /* 内边距 */ - } - - - - - - - - - - - - - - - - - - 0 - 0 - - - - background-color: rgb(16, 21, 49); -border: 1px solid #122041; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - border-image: url(:/main/Image/calendar.svg); - - - - - - Qt::AlignmentFlag::AlignCenter - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 2024-08-01 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 08:00:00 - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - QComboBox { - border-radius: 10px; - padding: 5px 5px 5px 5px; - background-color: #2c2c2c; - color: white; - border: 1px solid #474747; - min-width: 80px; -} - - -QComboBox::drop-down { - width: 0px; - border: none; - -} - -QComboBox::down-arrow { - image: none; -} - -QComboBox QAbstractItemView { - border-bottom-right-radius: 10px; - border-bottom-left-radius: 10px; - background-color: #D3D3D3; - border: 1px solid gray; - padding: 4px 4px 4px 4px; - outline: none; -} - - - 1号线 - - - - 1号线 - - - - - 新建线 - - - - - - - - border:none; - - - 0 - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 10 - - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 20 - - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 30 - - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 40 - - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 50 - - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 60 - - - - - - - - 0 - 0 - - - - color: rgb(255, 255, 255); -border: 1px solid #dcdfe6; -font: 8pt "Microsoft YaHei UI"; - - - 从第几包开始 - - - - - - - - 0 - 0 - - - - -*{background-color: #101F3F; -font: 10pt "楷体"; -color:#ffffff -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 确定 - - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - *{ -background-color: #499C54; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 补一袋 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: rgb(255, 0, 0); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 扣一袋 - - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - - 0 - 0 - - - - *{ -background-color: #FFFFBF; -font: 9pt "楷体"; -border-radius: 10px; -} -*:pressed -{ -background-color: #FFF000; -} - - - - 复位 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: #FFF000; -font: 9pt "楷体"; -border-radius: 10px; -} -*:pressed -{ -background-color: #ff6e00; -} - - - - - 急停 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: #FF0000; -font: 9pt "楷体"; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 停止 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: #2196F3; -font: 9pt "楷体"; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 暂停 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: #499C54; -font: 9pt "楷体"; - -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 启动 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: #1CB2B1; -font: 9pt "楷体"; -border-radius: 10px; -} -*:pressed -{ -background-color:#1cb052; -} - - - - - 清除报警 - - - - - - - - - - - 0 - 0 - - - - *{ -background-color: rgb(0, 170, 0); - -font: 9pt "楷体"; -border-radius: 10px; -} -*:pressed -{ -background-color:#1cb052; -} - - - - - 一键投料 - - - - - - - 20 - 20 - - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - /**QSlider -{ - background-color: #FFFFFF; - border-style: outset; - border-radius:5px; -} - -QSlider::groove:horizontal -{ - height: 10px; - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4); - margin: 10px 0 -} - -QSlider::handle:horizontal -{ - background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green); - width: 10px; - height: 16px; - margin: -5px 3px -5px 6px; - border-radius:5px; - border: 3px solid #007900; -} -**/ -/*第一种风格*/ -/** - groove表示槽的部分 - handle表示滑块 - add-page表示未滑过的槽部分 - sub-page表示已滑过的槽部分 - 在辅助控制器后面可以设置状态,horizontal就是QSS生效的QSlider的状态 -**/ - -QSlider::groove:horizontal -{ - height:10px; - border-radius: 5px; - background-color:rgb(219,219,219); -} - - -QSlider::handle:horizontal -{ - background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green); - width: 5px; - height: 5px; - margin: -5px 3px -5px 6px; - border-radius:5px; - border: 3px solid #007900; -} - -QSlider::add-page:horizontal -{ - border-radius: 5px; - background-color: rgb(219,219,219); -} - -QSlider::sub-page:horizontal -{ - border-radius: 5px; - background-color: rgb(80,166,234); -} - - - - - - - - - Qt::Orientation::Horizontal - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - color: rgb(255, 255, 255); - - - 码垛袋数: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - color: rgb(255, 0, 0); -font: 36pt "Microsoft YaHei UI"; - - - 0 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - - color: rgb(255, 255, 255); - - - 已投袋数: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - - color: rgb(0, 255, 0); -font: 36pt "Microsoft YaHei UI"; - - - 0 - - - Qt::AlignmentFlag::AlignCenter - - - - - - - - - - - - - - - - - - - - - ToggleSwitch - QWidget -
toggleswitch.h
- 1 -
-
- - - - -
diff --git a/MainWin_ui.py b/MainWin_ui.py deleted file mode 100644 index 7d9a9f3..0000000 --- a/MainWin_ui.py +++ /dev/null @@ -1,4066 +0,0 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'MainWin.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QGridLayout, - QHBoxLayout, QHeaderView, QLabel, QLayout, - QLineEdit, QMainWindow, QPushButton, QSizePolicy, - QSlider, QStackedWidget, QTabWidget, QTableWidget, - QTableWidgetItem, QTextEdit, QVBoxLayout, QWidget) - -from toggleswitch import ToggleSwitch -import MainRecources_rc - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(995, 733) - sizePolicy = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) - MainWindow.setSizePolicy(sizePolicy) - self.centralwidget = QWidget(MainWindow) - self.centralwidget.setObjectName(u"centralwidget") - self.verticalLayout = QVBoxLayout(self.centralwidget) - self.verticalLayout.setSpacing(0) - self.verticalLayout.setObjectName(u"verticalLayout") - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.frame_head = QFrame(self.centralwidget) - self.frame_head.setObjectName(u"frame_head") - sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.frame_head.sizePolicy().hasHeightForWidth()) - self.frame_head.setSizePolicy(sizePolicy1) - self.frame_head.setStyleSheet(u"background-color: #0D1128;") - self.frame_head.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_head.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout = QHBoxLayout(self.frame_head) - self.horizontalLayout.setSpacing(0) - self.horizontalLayout.setObjectName(u"horizontalLayout") - self.horizontalLayout.setContentsMargins(0, 0, 0, 0) - self.frame_4 = QFrame(self.frame_head) - self.frame_4.setObjectName(u"frame_4") - sizePolicy1.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) - self.frame_4.setSizePolicy(sizePolicy1) - self.frame_4.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_4.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_2 = QHBoxLayout(self.frame_4) - self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") - self.label = QLabel(self.frame_4) - self.label.setObjectName(u"label") - sizePolicy1.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) - self.label.setSizePolicy(sizePolicy1) - self.label.setStyleSheet(u"border-image: url(:/main/Image/title_ico.png) 0 0 0 0 strech;\n" -"border-width: 5px 1px 3px 4px; \n" -"border-style: solid; ") - self.label.setScaledContents(False) - - self.horizontalLayout_2.addWidget(self.label) - - self.label_2 = QLabel(self.frame_4) - self.label_2.setObjectName(u"label_2") - sizePolicy1.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) - self.label_2.setSizePolicy(sizePolicy1) - self.label_2.setStyleSheet(u"color: #DBF4F5;\n" -"font: 700 12pt \"Microsoft YaHei UI\";") - - self.horizontalLayout_2.addWidget(self.label_2) - - self.horizontalLayout_2.setStretch(0, 2) - self.horizontalLayout_2.setStretch(1, 10) - - self.horizontalLayout.addWidget(self.frame_4) - - self.frame = QFrame(self.frame_head) - self.frame.setObjectName(u"frame") - sizePolicy1.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) - self.frame.setSizePolicy(sizePolicy1) - self.frame.setStyleSheet(u"background-color: rgb(16, 21, 49);\n" -"border: 1px solid #122041;") - self.frame.setFrameShape(QFrame.Shape.StyledPanel) - self.frame.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_3 = QHBoxLayout(self.frame) - self.horizontalLayout_3.setSpacing(0) - self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") - self.horizontalLayout_3.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) - self.pushButton = QPushButton(self.frame) - self.pushButton.setObjectName(u"pushButton") - sizePolicy1.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) - self.pushButton.setSizePolicy(sizePolicy1) - self.pushButton.setStyleSheet(u"\n" -"*{\n" -"color:#3479BE;\n" -"background-color: #111633;\n" -"font: 12pt \"Microsoft YaHei UI\";\n" -"border: 1px;\n" -"padding:18px;\n" -"\n" -"}\n" -"*:hover{\n" -"color:#ffffff;\n" -"border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" -"background-color: #1A3E79;\n" -"}\n" -"*:pressed\n" -"{\n" -"color:#ffffff;\n" -"border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" -"background-color: #1A3E79;\n" -"}\n" -"") - - self.horizontalLayout_3.addWidget(self.pushButton) - - self.pushButton_2 = QPushButton(self.frame) - self.pushButton_2.setObjectName(u"pushButton_2") - sizePolicy1.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth()) - self.pushButton_2.setSizePolicy(sizePolicy1) - self.pushButton_2.setStyleSheet(u"\n" -"*{\n" -"color:#3479BE;\n" -"background-color: #111633;\n" -"font: 12pt \"Microsoft YaHei UI\";\n" -"border: 1px;\n" -"padding:18px;\n" -"\n" -"}\n" -"*:pressed\n" -"{\n" -"color:#ffffff;\n" -"border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" -"background-color: #1A3E79;\n" -"}\n" -"") - - self.horizontalLayout_3.addWidget(self.pushButton_2) - - self.pushButton_3 = QPushButton(self.frame) - self.pushButton_3.setObjectName(u"pushButton_3") - sizePolicy1.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth()) - self.pushButton_3.setSizePolicy(sizePolicy1) - self.pushButton_3.setStyleSheet(u"\n" -"*{\n" -"color:#3479BE;\n" -"background-color: #111633;\n" -"font: 12pt \"Microsoft YaHei UI\";\n" -"border: 1px;\n" -"padding:18px;\n" -"\n" -"}\n" -"*:pressed\n" -"{\n" -"color:#ffffff;\n" -"border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" -"background-color: #1A3E79;\n" -"}\n" -"") - - self.horizontalLayout_3.addWidget(self.pushButton_3) - - self.pushButton_4 = QPushButton(self.frame) - self.pushButton_4.setObjectName(u"pushButton_4") - sizePolicy1.setHeightForWidth(self.pushButton_4.sizePolicy().hasHeightForWidth()) - self.pushButton_4.setSizePolicy(sizePolicy1) - self.pushButton_4.setStyleSheet(u"\n" -"*{\n" -"color:#3479BE;\n" -"background-color: #111633;\n" -"font: 12pt \"Microsoft YaHei UI\";\n" -"border: 1px;\n" -"padding:18px;\n" -"\n" -"}\n" -"*:pressed\n" -"{\n" -"color:#ffffff;\n" -"border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" -"background-color: #1A3E79;\n" -"}\n" -"") - - self.horizontalLayout_3.addWidget(self.pushButton_4) - - - self.horizontalLayout.addWidget(self.frame) - - self.frame_3 = QFrame(self.frame_head) - self.frame_3.setObjectName(u"frame_3") - sizePolicy1.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) - self.frame_3.setSizePolicy(sizePolicy1) - self.frame_3.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_3.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_5 = QHBoxLayout(self.frame_3) - self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") - self.pushButton_5 = QPushButton(self.frame_3) - self.pushButton_5.setObjectName(u"pushButton_5") - sizePolicy1.setHeightForWidth(self.pushButton_5.sizePolicy().hasHeightForWidth()) - self.pushButton_5.setSizePolicy(sizePolicy1) - self.pushButton_5.setStyleSheet(u"*{\n" -"color:#838992;\n" -"background-color: #1B1F34;\n" -"font: 9pt \"Microsoft YaHei UI\";\n" -"border: 1px solid #282B40;\n" -"}\n" -"*:pressed\n" -"{\n" -"color:#ffffff;\n" -"background-color: #1A3E79;\n" -"}\n" -"") - icon = QIcon() - icon.addFile(u":/main/Image/login.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.pushButton_5.setIcon(icon) - - self.horizontalLayout_5.addWidget(self.pushButton_5) - - self.pushButton_exit = QPushButton(self.frame_3) - self.pushButton_exit.setObjectName(u"pushButton_exit") - sizePolicy1.setHeightForWidth(self.pushButton_exit.sizePolicy().hasHeightForWidth()) - self.pushButton_exit.setSizePolicy(sizePolicy1) - self.pushButton_exit.setStyleSheet(u"*{\n" -"color:#838992;\n" -"background-color: #1B1F34;\n" -"font: 9pt \"Microsoft YaHei UI\";\n" -"border: 1px solid #282B40;\n" -"}\n" -"*:pressed\n" -"{\n" -"color:#ffffff;\n" -"background-color: #1A3E79;\n" -"}\n" -"") - icon1 = QIcon() - icon1.addFile(u":/main/Image/logout.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.pushButton_exit.setIcon(icon1) - - self.horizontalLayout_5.addWidget(self.pushButton_exit) - - - self.horizontalLayout.addWidget(self.frame_3) - - self.horizontalLayout.setStretch(0, 45) - self.horizontalLayout.setStretch(1, 137) - self.horizontalLayout.setStretch(2, 59) - - self.verticalLayout.addWidget(self.frame_head) - - self.frame_main = QFrame(self.centralwidget) - self.frame_main.setObjectName(u"frame_main") - self.frame_main.setStyleSheet(u"background-color: #0D1128;") - self.frame_main.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_main.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_4 = QHBoxLayout(self.frame_main) - self.horizontalLayout_4.setSpacing(0) - self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") - self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) - self.frame_left_menu = QFrame(self.frame_main) - self.frame_left_menu.setObjectName(u"frame_left_menu") - sizePolicy1.setHeightForWidth(self.frame_left_menu.sizePolicy().hasHeightForWidth()) - self.frame_left_menu.setSizePolicy(sizePolicy1) - self.frame_left_menu.setStyleSheet(u"background-color: #0D1128;\n" -"border: 1px solid #324C82;") - self.verticalLayout_2 = QVBoxLayout(self.frame_left_menu) - self.verticalLayout_2.setSpacing(8) - self.verticalLayout_2.setObjectName(u"verticalLayout_2") - self.verticalLayout_2.setSizeConstraint(QLayout.SizeConstraint.SetDefaultConstraint) - self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) - self.frame_2 = QFrame(self.frame_left_menu) - self.frame_2.setObjectName(u"frame_2") - sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) - self.frame_2.setSizePolicy(sizePolicy2) - self.frame_2.setStyleSheet(u"background-color: #0D1128;\n" -"border: none;") - self.frame_2.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_2.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_3 = QVBoxLayout(self.frame_2) - self.verticalLayout_3.setSpacing(0) - self.verticalLayout_3.setObjectName(u"verticalLayout_3") - self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) - self.pushButton_sysseting = QPushButton(self.frame_2) - self.pushButton_sysseting.setObjectName(u"pushButton_sysseting") - sizePolicy3 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(0) - sizePolicy3.setHeightForWidth(self.pushButton_sysseting.sizePolicy().hasHeightForWidth()) - self.pushButton_sysseting.setSizePolicy(sizePolicy3) - self.pushButton_sysseting.setStyleSheet(u" QPushButton {\n" -" \n" -" color: white; /* \u6309\u94ae\u6587\u672c\u989c\u8272 */\n" -" background-color: rgb(25, 30, 54);\n" -" padding: 10px ; /* \u6309\u94ae\u5185\u8fb9\u8ddd */\n" -" font: 12pt \"Microsoft YaHei UI\";\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn.jpg);\n" -" }") - icon2 = QIcon() - icon2.addFile(u":/main/Image/icon_leftMenu_btn_sys.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.pushButton_sysseting.setIcon(icon2) - self.pushButton_sysseting.setIconSize(QSize(20, 20)) - - self.verticalLayout_3.addWidget(self.pushButton_sysseting) - - self.frame_sys_seting = QFrame(self.frame_2) - self.frame_sys_seting.setObjectName(u"frame_sys_seting") - sizePolicy4 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding) - sizePolicy4.setHorizontalStretch(0) - sizePolicy4.setVerticalStretch(0) - sizePolicy4.setHeightForWidth(self.frame_sys_seting.sizePolicy().hasHeightForWidth()) - self.frame_sys_seting.setSizePolicy(sizePolicy4) - self.frame_sys_seting.setStyleSheet(u"\n" -"background-color: rgb(13, 17, 40);") - self.frame_sys_seting.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_sys_seting.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_6 = QHBoxLayout(self.frame_sys_seting) - self.horizontalLayout_6.setSpacing(0) - self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") - self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) - self.frame_9 = QFrame(self.frame_sys_seting) - self.frame_9.setObjectName(u"frame_9") - self.frame_9.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_9.setFrameShadow(QFrame.Shadow.Raised) - - self.horizontalLayout_6.addWidget(self.frame_9) - - self.frame_10 = QFrame(self.frame_sys_seting) - self.frame_10.setObjectName(u"frame_10") - self.frame_10.setStyleSheet(u"background-color: rgb(13, 17, 40);") - self.frame_10.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_10.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_4 = QVBoxLayout(self.frame_10) - self.verticalLayout_4.setObjectName(u"verticalLayout_4") - self.pushButton_leftmenu_produce = QPushButton(self.frame_10) - self.pushButton_leftmenu_produce.setObjectName(u"pushButton_leftmenu_produce") - sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) - sizePolicy5.setHorizontalStretch(0) - sizePolicy5.setVerticalStretch(0) - sizePolicy5.setHeightForWidth(self.pushButton_leftmenu_produce.sizePolicy().hasHeightForWidth()) - self.pushButton_leftmenu_produce.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_produce.setStyleSheet(u"\n" -"\n" -" QPushButton {\n" -" \n" -" background-color: rgb(16, 31, 63);\n" -" color: rgb(255, 255, 255);\n" -"\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"\n" -" }\n" -"*:pressed\n" -"{\n" -"border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"}\n" -"") - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_produce) - - self.pushButton_leftmenu_robot_seting = QPushButton(self.frame_10) - self.pushButton_leftmenu_robot_seting.setObjectName(u"pushButton_leftmenu_robot_seting") - sizePolicy5.setHeightForWidth(self.pushButton_leftmenu_robot_seting.sizePolicy().hasHeightForWidth()) - self.pushButton_leftmenu_robot_seting.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_robot_seting.setStyleSheet(u"\n" -"\n" -" QPushButton {\n" -" \n" -" background-color: rgb(16, 31, 63);\n" -" color: rgb(255, 255, 255);\n" -"\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"\n" -" }\n" -"*:pressed\n" -"{\n" -"border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"}\n" -"") - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_robot_seting) - - self.pushButton_leftmenu_IO = QPushButton(self.frame_10) - self.pushButton_leftmenu_IO.setObjectName(u"pushButton_leftmenu_IO") - sizePolicy5.setHeightForWidth(self.pushButton_leftmenu_IO.sizePolicy().hasHeightForWidth()) - self.pushButton_leftmenu_IO.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_IO.setStyleSheet(u"\n" -"\n" -" QPushButton {\n" -" \n" -" background-color: rgb(16, 31, 63);\n" -" color: rgb(255, 255, 255);\n" -"\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"\n" -" }\n" -"*:pressed\n" -"{\n" -"border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"}\n" -"") - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_IO) - - self.pushButton_leftmenu_position = QPushButton(self.frame_10) - self.pushButton_leftmenu_position.setObjectName(u"pushButton_leftmenu_position") - sizePolicy5.setHeightForWidth(self.pushButton_leftmenu_position.sizePolicy().hasHeightForWidth()) - self.pushButton_leftmenu_position.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_position.setStyleSheet(u"\n" -"\n" -" QPushButton {\n" -" \n" -" background-color: rgb(16, 31, 63);\n" -" color: rgb(255, 255, 255);\n" -"\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"\n" -" }\n" -"*:pressed\n" -"{\n" -"border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"}\n" -"") - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_position) - - self.pushButton_leftmenu_baseSeting = QPushButton(self.frame_10) - self.pushButton_leftmenu_baseSeting.setObjectName(u"pushButton_leftmenu_baseSeting") - sizePolicy5.setHeightForWidth(self.pushButton_leftmenu_baseSeting.sizePolicy().hasHeightForWidth()) - self.pushButton_leftmenu_baseSeting.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_baseSeting.setStyleSheet(u"\n" -"\n" -" QPushButton {\n" -" \n" -" background-color: rgb(16, 31, 63);\n" -" color: rgb(255, 255, 255);\n" -"\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"\n" -" }\n" -"*:pressed\n" -"{\n" -"border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"}\n" -"") - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_baseSeting) - - self.pushButton_leftmenu_posDebug = QPushButton(self.frame_10) - self.pushButton_leftmenu_posDebug.setObjectName(u"pushButton_leftmenu_posDebug") - sizePolicy5.setHeightForWidth(self.pushButton_leftmenu_posDebug.sizePolicy().hasHeightForWidth()) - self.pushButton_leftmenu_posDebug.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_posDebug.setStyleSheet(u"\n" -"\n" -" QPushButton {\n" -" \n" -" background-color: rgb(16, 31, 63);\n" -" color: rgb(255, 255, 255);\n" -"\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"\n" -" }\n" -"*:pressed\n" -"{\n" -"border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" -"}\n" -"") - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_posDebug) - - - self.horizontalLayout_6.addWidget(self.frame_10) - - self.horizontalLayout_6.setStretch(0, 1) - self.horizontalLayout_6.setStretch(1, 7) - - self.verticalLayout_3.addWidget(self.frame_sys_seting) - - self.verticalLayout_3.setStretch(0, 15) - - self.verticalLayout_2.addWidget(self.frame_2) - - self.frame_5 = QFrame(self.frame_left_menu) - self.frame_5.setObjectName(u"frame_5") - self.frame_5.setStyleSheet(u"border: none;") - self.frame_5.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_5.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_6 = QVBoxLayout(self.frame_5) - self.verticalLayout_6.setSpacing(0) - self.verticalLayout_6.setObjectName(u"verticalLayout_6") - self.verticalLayout_6.setContentsMargins(0, 0, 0, 0) - self.pushButton_11 = QPushButton(self.frame_5) - self.pushButton_11.setObjectName(u"pushButton_11") - sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - sizePolicy6.setHorizontalStretch(0) - sizePolicy6.setVerticalStretch(0) - sizePolicy6.setHeightForWidth(self.pushButton_11.sizePolicy().hasHeightForWidth()) - self.pushButton_11.setSizePolicy(sizePolicy6) - self.pushButton_11.setStyleSheet(u" QPushButton {\n" -" \n" -" color: white; /* \u6309\u94ae\u6587\u672c\u989c\u8272 */\n" -" background-color: rgb(25, 30, 54);\n" -" padding: 10px ; /* \u6309\u94ae\u5185\u8fb9\u8ddd */\n" -" font: 12pt \"Microsoft YaHei UI\";\n" -" }\n" -" QPushButton:hover {\n" -" border-image: url(:/main/Image/backgroud_leftMenu_btn.jpg);\n" -" }") - icon3 = QIcon() - icon3.addFile(u":/main/Image/icon_other.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.pushButton_11.setIcon(icon3) - self.pushButton_11.setIconSize(QSize(20, 20)) - - self.verticalLayout_6.addWidget(self.pushButton_11) - - self.frame_other_set = QFrame(self.frame_5) - self.frame_other_set.setObjectName(u"frame_other_set") - self.frame_other_set.setStyleSheet(u"\n" -"background-color: rgb(13, 17, 40);") - self.frame_other_set.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_other_set.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_7 = QHBoxLayout(self.frame_other_set) - self.horizontalLayout_7.setSpacing(0) - self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") - self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0) - self.frame_12 = QFrame(self.frame_other_set) - self.frame_12.setObjectName(u"frame_12") - self.frame_12.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_12.setFrameShadow(QFrame.Shadow.Raised) - - self.horizontalLayout_7.addWidget(self.frame_12) - - self.frame_13 = QFrame(self.frame_other_set) - self.frame_13.setObjectName(u"frame_13") - self.frame_13.setStyleSheet(u"background-color: rgb(13, 17, 40);") - self.frame_13.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_13.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_5 = QVBoxLayout(self.frame_13) - self.verticalLayout_5.setSpacing(5) - self.verticalLayout_5.setObjectName(u"verticalLayout_5") - self.verticalLayout_5.setContentsMargins(5, 5, 5, 5) - - self.horizontalLayout_7.addWidget(self.frame_13) - - self.horizontalLayout_7.setStretch(0, 1) - self.horizontalLayout_7.setStretch(1, 7) - - self.verticalLayout_6.addWidget(self.frame_other_set) - - self.verticalLayout_6.setStretch(0, 15) - self.verticalLayout_6.setStretch(1, 30) - - self.verticalLayout_2.addWidget(self.frame_5) - - self.verticalLayout_2.setStretch(0, 1) - self.verticalLayout_2.setStretch(1, 1) - - self.horizontalLayout_4.addWidget(self.frame_left_menu) - - self.frame_view = QFrame(self.frame_main) - self.frame_view.setObjectName(u"frame_view") - sizePolicy1.setHeightForWidth(self.frame_view.sizePolicy().hasHeightForWidth()) - self.frame_view.setSizePolicy(sizePolicy1) - self.frame_view.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_view.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_8 = QVBoxLayout(self.frame_view) - self.verticalLayout_8.setSpacing(0) - self.verticalLayout_8.setObjectName(u"verticalLayout_8") - self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) - self.stackedWidget_view = QStackedWidget(self.frame_view) - self.stackedWidget_view.setObjectName(u"stackedWidget_view") - sizePolicy1.setHeightForWidth(self.stackedWidget_view.sizePolicy().hasHeightForWidth()) - self.stackedWidget_view.setSizePolicy(sizePolicy1) - self.page_3 = QWidget() - self.page_3.setObjectName(u"page_3") - self.verticalLayout_7 = QVBoxLayout(self.page_3) - self.verticalLayout_7.setSpacing(0) - self.verticalLayout_7.setObjectName(u"verticalLayout_7") - self.verticalLayout_7.setContentsMargins(0, 0, 0, 0) - self.frame_14 = QFrame(self.page_3) - self.frame_14.setObjectName(u"frame_14") - self.frame_14.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_14.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_9 = QVBoxLayout(self.frame_14) - self.verticalLayout_9.setSpacing(0) - self.verticalLayout_9.setObjectName(u"verticalLayout_9") - self.verticalLayout_9.setContentsMargins(0, 0, 0, 0) - self.frame_showDetection = QFrame(self.frame_14) - self.frame_showDetection.setObjectName(u"frame_showDetection") - self.frame_showDetection.setStyleSheet(u"") - self.frame_showDetection.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_showDetection.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_14 = QVBoxLayout(self.frame_showDetection) - self.verticalLayout_14.setObjectName(u"verticalLayout_14") - self.frame_sign_2 = QFrame(self.frame_showDetection) - self.frame_sign_2.setObjectName(u"frame_sign_2") - sizePolicy1.setHeightForWidth(self.frame_sign_2.sizePolicy().hasHeightForWidth()) - self.frame_sign_2.setSizePolicy(sizePolicy1) - self.frame_sign_2.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"border-image: None;") - self.frame_sign_2.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_sign_2.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_4 = QGridLayout(self.frame_sign_2) - self.gridLayout_4.setObjectName(u"gridLayout_4") - self.pushButton_sign_go = QPushButton(self.frame_sign_2) - self.pushButton_sign_go.setObjectName(u"pushButton_sign_go") - sizePolicy1.setHeightForWidth(self.pushButton_sign_go.sizePolicy().hasHeightForWidth()) - self.pushButton_sign_go.setSizePolicy(sizePolicy1) - self.pushButton_sign_go.setStyleSheet(u"*{\n" -"background-color: #7A7A7A;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:disabled\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - - self.gridLayout_4.addWidget(self.pushButton_sign_go, 0, 0, 1, 1) - - self.label_sign_go = QLabel(self.frame_sign_2) - self.label_sign_go.setObjectName(u"label_sign_go") - sizePolicy1.setHeightForWidth(self.label_sign_go.sizePolicy().hasHeightForWidth()) - self.label_sign_go.setSizePolicy(sizePolicy1) - self.label_sign_go.setStyleSheet(u"\n" -"QLabel:disabled{\n" -" background-color: rgba(255, 255, 255, 0);\n" -" font: 700 12pt \"Microsoft YaHei UI\";\n" -" color: red;\n" -"}\n" -"\n" -"QLabel{\n" -"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color:#7A7A7A;\n" -"}") - self.label_sign_go.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_4.addWidget(self.label_sign_go, 0, 1, 1, 1) - - self.pushButton_sign_photo = QPushButton(self.frame_sign_2) - self.pushButton_sign_photo.setObjectName(u"pushButton_sign_photo") - sizePolicy1.setHeightForWidth(self.pushButton_sign_photo.sizePolicy().hasHeightForWidth()) - self.pushButton_sign_photo.setSizePolicy(sizePolicy1) - self.pushButton_sign_photo.setStyleSheet(u"*{\n" -"background-color: #7A7A7A;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:disabled\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - - self.gridLayout_4.addWidget(self.pushButton_sign_photo, 0, 2, 1, 1) - - self.label_sign_photo = QLabel(self.frame_sign_2) - self.label_sign_photo.setObjectName(u"label_sign_photo") - sizePolicy1.setHeightForWidth(self.label_sign_photo.sizePolicy().hasHeightForWidth()) - self.label_sign_photo.setSizePolicy(sizePolicy1) - self.label_sign_photo.setStyleSheet(u"\n" -"QLabel:disabled{\n" -" background-color: rgba(255, 255, 255, 0);\n" -" font: 700 12pt \"Microsoft YaHei UI\";\n" -" color: red;\n" -"}\n" -"\n" -"QLabel{\n" -"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color:#7A7A7A;\n" -"}") - self.label_sign_photo.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_4.addWidget(self.label_sign_photo, 0, 3, 1, 1) - - self.pushButton_sign_take = QPushButton(self.frame_sign_2) - self.pushButton_sign_take.setObjectName(u"pushButton_sign_take") - sizePolicy1.setHeightForWidth(self.pushButton_sign_take.sizePolicy().hasHeightForWidth()) - self.pushButton_sign_take.setSizePolicy(sizePolicy1) - self.pushButton_sign_take.setStyleSheet(u"*{\n" -"background-color: #7A7A7A;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:disabled\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - - self.gridLayout_4.addWidget(self.pushButton_sign_take, 0, 4, 1, 1) - - self.label_sign_take = QLabel(self.frame_sign_2) - self.label_sign_take.setObjectName(u"label_sign_take") - sizePolicy1.setHeightForWidth(self.label_sign_take.sizePolicy().hasHeightForWidth()) - self.label_sign_take.setSizePolicy(sizePolicy1) - self.label_sign_take.setStyleSheet(u"\n" -"QLabel:disabled{\n" -" background-color: rgba(255, 255, 255, 0);\n" -" font: 700 12pt \"Microsoft YaHei UI\";\n" -" color: red;\n" -"}\n" -"\n" -"QLabel{\n" -"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color:#7A7A7A;\n" -"}") - self.label_sign_take.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_4.addWidget(self.label_sign_take, 0, 5, 1, 1) - - self.pushButton_sign_feed = QPushButton(self.frame_sign_2) - self.pushButton_sign_feed.setObjectName(u"pushButton_sign_feed") - sizePolicy1.setHeightForWidth(self.pushButton_sign_feed.sizePolicy().hasHeightForWidth()) - self.pushButton_sign_feed.setSizePolicy(sizePolicy1) - self.pushButton_sign_feed.setStyleSheet(u"*{\n" -"background-color: #7A7A7A;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:disabled\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - - self.gridLayout_4.addWidget(self.pushButton_sign_feed, 0, 6, 1, 1) - - self.label_sign_feed = QLabel(self.frame_sign_2) - self.label_sign_feed.setObjectName(u"label_sign_feed") - sizePolicy1.setHeightForWidth(self.label_sign_feed.sizePolicy().hasHeightForWidth()) - self.label_sign_feed.setSizePolicy(sizePolicy1) - self.label_sign_feed.setStyleSheet(u"\n" -"QLabel:disabled{\n" -" background-color: rgba(255, 255, 255, 0);\n" -" font: 700 12pt \"Microsoft YaHei UI\";\n" -" color: red;\n" -"}\n" -"\n" -"QLabel{\n" -"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color:#7A7A7A;\n" -"}") - self.label_sign_feed.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_4.addWidget(self.label_sign_feed, 0, 7, 1, 1) - - - self.verticalLayout_14.addWidget(self.frame_sign_2) - - self.label_showDetection = QLabel(self.frame_showDetection) - self.label_showDetection.setObjectName(u"label_showDetection") - sizePolicy1.setHeightForWidth(self.label_showDetection.sizePolicy().hasHeightForWidth()) - self.label_showDetection.setSizePolicy(sizePolicy1) - self.label_showDetection.setSizeIncrement(QSize(0, 0)) - self.label_showDetection.setBaseSize(QSize(0, 0)) - self.label_showDetection.setAutoFillBackground(False) - self.label_showDetection.setStyleSheet(u"background-image: url(:/main/Image/wait.png);\n" -"background-position: center;\n" -"background-repeat: no-repeat;\n" -" ") - self.label_showDetection.setScaledContents(False) - - self.verticalLayout_14.addWidget(self.label_showDetection) - - self.label_move_sign = QLabel(self.frame_showDetection) - self.label_move_sign.setObjectName(u"label_move_sign") - sizePolicy1.setHeightForWidth(self.label_move_sign.sizePolicy().hasHeightForWidth()) - self.label_move_sign.setSizePolicy(sizePolicy1) - self.label_move_sign.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"color: red;\n" -"border-image: None;") - self.label_move_sign.setAlignment(Qt.AlignmentFlag.AlignBottom|Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing) - - self.verticalLayout_14.addWidget(self.label_move_sign) - - self.verticalLayout_14.setStretch(0, 1) - self.verticalLayout_14.setStretch(1, 20) - self.verticalLayout_14.setStretch(2, 1) - - self.verticalLayout_9.addWidget(self.frame_showDetection) - - self.frame_15 = QFrame(self.frame_14) - self.frame_15.setObjectName(u"frame_15") - self.frame_15.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_15.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_8 = QHBoxLayout(self.frame_15) - self.horizontalLayout_8.setSpacing(0) - self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") - self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0) - self.frame_17 = QFrame(self.frame_15) - self.frame_17.setObjectName(u"frame_17") - sizePolicy.setHeightForWidth(self.frame_17.sizePolicy().hasHeightForWidth()) - self.frame_17.setSizePolicy(sizePolicy) - self.frame_17.setStyleSheet(u"border: 1px solid #324C82;") - self.frame_17.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_17.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_9 = QHBoxLayout(self.frame_17) - self.horizontalLayout_9.setSpacing(0) - self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") - self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0) - self.tabWidget = QTabWidget(self.frame_17) - self.tabWidget.setObjectName(u"tabWidget") - sizePolicy1.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth()) - self.tabWidget.setSizePolicy(sizePolicy1) - self.tabWidget.setStyleSheet(u"\n" -"\n" -"QTabBar::tab {\n" -" background: #191E36;\n" -" padding: 10px;\n" -"border:None;\n" -" color:#ffffff\n" -"}\n" -"") - self.tabWidget.setTabShape(QTabWidget.TabShape.Rounded) - self.tabWidget.setElideMode(Qt.TextElideMode.ElideNone) - self.tabWidget.setDocumentMode(True) - self.tabWidget.setTabsClosable(False) - self.tabWidget.setTabBarAutoHide(False) - self.tab = QWidget() - self.tab.setObjectName(u"tab") - self.horizontalLayout_13 = QHBoxLayout(self.tab) - self.horizontalLayout_13.setSpacing(0) - self.horizontalLayout_13.setObjectName(u"horizontalLayout_13") - self.horizontalLayout_13.setContentsMargins(0, 0, 0, 0) - self.textEdit_log_info = QTextEdit(self.tab) - self.textEdit_log_info.setObjectName(u"textEdit_log_info") - self.textEdit_log_info.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.horizontalLayout_13.addWidget(self.textEdit_log_info) - - icon4 = QIcon() - icon4.addFile(u":/main/Image/log.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.tabWidget.addTab(self.tab, icon4, "") - self.tab_2 = QWidget() - self.tab_2.setObjectName(u"tab_2") - self.horizontalLayout_14 = QHBoxLayout(self.tab_2) - self.horizontalLayout_14.setSpacing(0) - self.horizontalLayout_14.setObjectName(u"horizontalLayout_14") - self.horizontalLayout_14.setContentsMargins(0, 0, 0, 0) - self.textEdit_log_error = QTextEdit(self.tab_2) - self.textEdit_log_error.setObjectName(u"textEdit_log_error") - self.textEdit_log_error.setStyleSheet(u"\n" -"color: rgb(255, 0, 0);") - - self.horizontalLayout_14.addWidget(self.textEdit_log_error) - - icon5 = QIcon() - icon5.addFile(u":/main/Image/waring.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.tabWidget.addTab(self.tab_2, icon5, "") - - self.horizontalLayout_9.addWidget(self.tabWidget) - - - self.horizontalLayout_8.addWidget(self.frame_17) - - self.frame_18 = QFrame(self.frame_15) - self.frame_18.setObjectName(u"frame_18") - self.frame_18.setStyleSheet(u"border: 1px solid #324C82;") - self.frame_18.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_18.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_13 = QVBoxLayout(self.frame_18) - self.verticalLayout_13.setObjectName(u"verticalLayout_13") - self.frame_25 = QFrame(self.frame_18) - self.frame_25.setObjectName(u"frame_25") - self.frame_25.setStyleSheet(u"border:None") - self.frame_25.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_25.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_3 = QGridLayout(self.frame_25) - self.gridLayout_3.setSpacing(0) - self.gridLayout_3.setObjectName(u"gridLayout_3") - self.gridLayout_3.setContentsMargins(0, 0, 0, 0) - self.label_53 = QLabel(self.frame_25) - self.label_53.setObjectName(u"label_53") - self.label_53.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_53.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_3.addWidget(self.label_53, 0, 0, 1, 1) - - self.label_connect_status = QLabel(self.frame_25) - self.label_connect_status.setObjectName(u"label_connect_status") - sizePolicy2.setHeightForWidth(self.label_connect_status.sizePolicy().hasHeightForWidth()) - self.label_connect_status.setSizePolicy(sizePolicy2) - self.label_connect_status.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"QLabel:disabled{\n" -" background-color: #FD3251; \n" -" color: #ffffff; \n" -" border-radius: 8px; \n" -" border: 1px solid #FD3251; \n" -" qproperty-alignment: 'AlignCenter'; \n" -"}\n" -"") - - self.gridLayout_3.addWidget(self.label_connect_status, 0, 1, 1, 1) - - self.label_8 = QLabel(self.frame_25) - self.label_8.setObjectName(u"label_8") - self.label_8.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_8.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_3.addWidget(self.label_8, 1, 0, 1, 1) - - self.label_status_model = QLabel(self.frame_25) - self.label_status_model.setObjectName(u"label_status_model") - sizePolicy2.setHeightForWidth(self.label_status_model.sizePolicy().hasHeightForWidth()) - self.label_status_model.setSizePolicy(sizePolicy2) - self.label_status_model.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - - self.gridLayout_3.addWidget(self.label_status_model, 1, 1, 1, 1) - - self.label_10 = QLabel(self.frame_25) - self.label_10.setObjectName(u"label_10") - self.label_10.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_10.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_3.addWidget(self.label_10, 2, 0, 1, 1) - - self.label_status_remoteCmdLen = QLabel(self.frame_25) - self.label_status_remoteCmdLen.setObjectName(u"label_status_remoteCmdLen") - sizePolicy2.setHeightForWidth(self.label_status_remoteCmdLen.sizePolicy().hasHeightForWidth()) - self.label_status_remoteCmdLen.setSizePolicy(sizePolicy2) - self.label_status_remoteCmdLen.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - - self.gridLayout_3.addWidget(self.label_status_remoteCmdLen, 2, 1, 1, 1) - - self.label_13 = QLabel(self.frame_25) - self.label_13.setObjectName(u"label_13") - self.label_13.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_13.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_3.addWidget(self.label_13, 3, 0, 1, 1) - - self.label_status_speed = QLabel(self.frame_25) - self.label_status_speed.setObjectName(u"label_status_speed") - sizePolicy2.setHeightForWidth(self.label_status_speed.sizePolicy().hasHeightForWidth()) - self.label_status_speed.setSizePolicy(sizePolicy2) - self.label_status_speed.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - - self.gridLayout_3.addWidget(self.label_status_speed, 3, 1, 1, 1) - - self.label_11 = QLabel(self.frame_25) - self.label_11.setObjectName(u"label_11") - self.label_11.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_11.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_3.addWidget(self.label_11, 4, 0, 1, 1) - - self.label_status_toolIndex = QLabel(self.frame_25) - self.label_status_toolIndex.setObjectName(u"label_status_toolIndex") - sizePolicy2.setHeightForWidth(self.label_status_toolIndex.sizePolicy().hasHeightForWidth()) - self.label_status_toolIndex.setSizePolicy(sizePolicy2) - self.label_status_toolIndex.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - - self.gridLayout_3.addWidget(self.label_status_toolIndex, 4, 1, 1, 1) - - self.label_12 = QLabel(self.frame_25) - self.label_12.setObjectName(u"label_12") - self.label_12.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_12.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_3.addWidget(self.label_12, 5, 0, 1, 1) - - self.label_status_alarmcode = QLabel(self.frame_25) - self.label_status_alarmcode.setObjectName(u"label_status_alarmcode") - sizePolicy2.setHeightForWidth(self.label_status_alarmcode.sizePolicy().hasHeightForWidth()) - self.label_status_alarmcode.setSizePolicy(sizePolicy2) - self.label_status_alarmcode.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - - self.gridLayout_3.addWidget(self.label_status_alarmcode, 5, 1, 1, 1) - - - self.verticalLayout_13.addWidget(self.frame_25) - - - self.horizontalLayout_8.addWidget(self.frame_18) - - self.horizontalLayout_8.setStretch(0, 3) - self.horizontalLayout_8.setStretch(1, 2) - - self.verticalLayout_9.addWidget(self.frame_15) - - self.verticalLayout_9.setStretch(0, 3) - self.verticalLayout_9.setStretch(1, 2) - - self.verticalLayout_7.addWidget(self.frame_14) - - self.verticalLayout_7.setStretch(0, 1) - self.stackedWidget_view.addWidget(self.page_3) - self.page_7 = QWidget() - self.page_7.setObjectName(u"page_7") - self.horizontalLayout_19 = QHBoxLayout(self.page_7) - self.horizontalLayout_19.setSpacing(0) - self.horizontalLayout_19.setObjectName(u"horizontalLayout_19") - self.horizontalLayout_19.setContentsMargins(0, 0, 0, 0) - self.frame_11 = QFrame(self.page_7) - self.frame_11.setObjectName(u"frame_11") - self.frame_11.setStyleSheet(u"font: 700 16pt \"Microsoft YaHei UI\";") - self.frame_11.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_11.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_8 = QGridLayout(self.frame_11) - self.gridLayout_8.setObjectName(u"gridLayout_8") - self.gridLayout_8.setVerticalSpacing(40) - self.label_5 = QLabel(self.frame_11) - self.label_5.setObjectName(u"label_5") - self.label_5.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_5.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_5, 0, 0, 1, 1) - - self.widget_y1 = ToggleSwitch(self.frame_11) - self.widget_y1.setObjectName(u"widget_y1") - self.widget_y1.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y1, 0, 1, 1, 1) - - self.label_57 = QLabel(self.frame_11) - self.label_57.setObjectName(u"label_57") - self.label_57.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_57.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_57, 0, 2, 1, 1) - - self.widget_y2 = ToggleSwitch(self.frame_11) - self.widget_y2.setObjectName(u"widget_y2") - self.widget_y2.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y2, 0, 3, 1, 1) - - self.label_58 = QLabel(self.frame_11) - self.label_58.setObjectName(u"label_58") - self.label_58.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_58.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_58, 0, 4, 1, 1) - - self.widget_y3 = ToggleSwitch(self.frame_11) - self.widget_y3.setObjectName(u"widget_y3") - self.widget_y3.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y3, 0, 5, 1, 1) - - self.label_59 = QLabel(self.frame_11) - self.label_59.setObjectName(u"label_59") - self.label_59.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_59.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_59, 0, 6, 1, 1) - - self.widget_y4 = ToggleSwitch(self.frame_11) - self.widget_y4.setObjectName(u"widget_y4") - self.widget_y4.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y4, 0, 7, 1, 1) - - self.label_7 = QLabel(self.frame_11) - self.label_7.setObjectName(u"label_7") - self.label_7.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_7.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_7, 1, 0, 1, 1) - - self.widget_y5 = ToggleSwitch(self.frame_11) - self.widget_y5.setObjectName(u"widget_y5") - self.widget_y5.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y5, 1, 1, 1, 1) - - self.label_61 = QLabel(self.frame_11) - self.label_61.setObjectName(u"label_61") - self.label_61.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_61.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_61, 1, 2, 1, 1) - - self.widget_y6 = ToggleSwitch(self.frame_11) - self.widget_y6.setObjectName(u"widget_y6") - self.widget_y6.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y6, 1, 3, 1, 1) - - self.label_62 = QLabel(self.frame_11) - self.label_62.setObjectName(u"label_62") - self.label_62.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_62.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_62, 1, 4, 1, 1) - - self.widget_y7 = ToggleSwitch(self.frame_11) - self.widget_y7.setObjectName(u"widget_y7") - self.widget_y7.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y7, 1, 5, 1, 1) - - self.label_60 = QLabel(self.frame_11) - self.label_60.setObjectName(u"label_60") - self.label_60.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_60.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_60, 1, 6, 1, 1) - - self.widget_y8 = ToggleSwitch(self.frame_11) - self.widget_y8.setObjectName(u"widget_y8") - self.widget_y8.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y8, 1, 7, 1, 1) - - self.label_55 = QLabel(self.frame_11) - self.label_55.setObjectName(u"label_55") - self.label_55.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_55.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_55, 2, 0, 1, 1) - - self.widget_y9 = ToggleSwitch(self.frame_11) - self.widget_y9.setObjectName(u"widget_y9") - self.widget_y9.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y9, 2, 1, 1, 1) - - self.label_65 = QLabel(self.frame_11) - self.label_65.setObjectName(u"label_65") - self.label_65.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_65.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_65, 2, 2, 1, 1) - - self.widget_y10 = ToggleSwitch(self.frame_11) - self.widget_y10.setObjectName(u"widget_y10") - self.widget_y10.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y10, 2, 3, 1, 1) - - self.label_64 = QLabel(self.frame_11) - self.label_64.setObjectName(u"label_64") - self.label_64.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_64.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_64, 2, 4, 1, 1) - - self.widget_y11 = ToggleSwitch(self.frame_11) - self.widget_y11.setObjectName(u"widget_y11") - self.widget_y11.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y11, 2, 5, 1, 1) - - self.label_63 = QLabel(self.frame_11) - self.label_63.setObjectName(u"label_63") - self.label_63.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_63.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_63, 2, 6, 1, 1) - - self.widget_y12 = ToggleSwitch(self.frame_11) - self.widget_y12.setObjectName(u"widget_y12") - self.widget_y12.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y12, 2, 7, 1, 1) - - self.label_56 = QLabel(self.frame_11) - self.label_56.setObjectName(u"label_56") - self.label_56.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_56.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_56, 3, 0, 1, 1) - - self.widget_y13 = ToggleSwitch(self.frame_11) - self.widget_y13.setObjectName(u"widget_y13") - self.widget_y13.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y13, 3, 1, 1, 1) - - self.label_68 = QLabel(self.frame_11) - self.label_68.setObjectName(u"label_68") - self.label_68.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_68.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_68, 3, 2, 1, 1) - - self.widget_y14 = ToggleSwitch(self.frame_11) - self.widget_y14.setObjectName(u"widget_y14") - self.widget_y14.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y14, 3, 3, 1, 1) - - self.label_67 = QLabel(self.frame_11) - self.label_67.setObjectName(u"label_67") - self.label_67.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_67.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_67, 3, 4, 1, 1) - - self.widget_y15 = ToggleSwitch(self.frame_11) - self.widget_y15.setObjectName(u"widget_y15") - self.widget_y15.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y15, 3, 5, 1, 1) - - self.label_66 = QLabel(self.frame_11) - self.label_66.setObjectName(u"label_66") - self.label_66.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_66.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_66, 3, 6, 1, 1) - - self.widget_y16 = ToggleSwitch(self.frame_11) - self.widget_y16.setObjectName(u"widget_y16") - self.widget_y16.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y16, 3, 7, 1, 1) - - self.label_69 = QLabel(self.frame_11) - self.label_69.setObjectName(u"label_69") - self.label_69.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_69.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_69, 4, 0, 1, 1) - - self.widget_y17 = ToggleSwitch(self.frame_11) - self.widget_y17.setObjectName(u"widget_y17") - self.widget_y17.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y17, 4, 1, 1, 1) - - self.label_81 = QLabel(self.frame_11) - self.label_81.setObjectName(u"label_81") - self.label_81.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_81.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_81, 4, 2, 1, 1) - - self.widget_y18 = ToggleSwitch(self.frame_11) - self.widget_y18.setObjectName(u"widget_y18") - self.widget_y18.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y18, 4, 3, 1, 1) - - self.label_82 = QLabel(self.frame_11) - self.label_82.setObjectName(u"label_82") - self.label_82.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_82.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_82, 4, 4, 1, 1) - - self.widget_y19 = ToggleSwitch(self.frame_11) - self.widget_y19.setObjectName(u"widget_y19") - self.widget_y19.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y19, 4, 5, 1, 1) - - self.label_78 = QLabel(self.frame_11) - self.label_78.setObjectName(u"label_78") - self.label_78.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_78.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_78, 4, 6, 1, 1) - - self.widget_y20 = ToggleSwitch(self.frame_11) - self.widget_y20.setObjectName(u"widget_y20") - self.widget_y20.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y20, 4, 7, 1, 1) - - self.label_72 = QLabel(self.frame_11) - self.label_72.setObjectName(u"label_72") - self.label_72.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_72.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_72, 5, 0, 1, 1) - - self.widget_y21 = ToggleSwitch(self.frame_11) - self.widget_y21.setObjectName(u"widget_y21") - self.widget_y21.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y21, 5, 1, 1, 1) - - self.label_84 = QLabel(self.frame_11) - self.label_84.setObjectName(u"label_84") - self.label_84.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_84.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_84, 5, 2, 1, 1) - - self.widget_y22 = ToggleSwitch(self.frame_11) - self.widget_y22.setObjectName(u"widget_y22") - self.widget_y22.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y22, 5, 3, 1, 1) - - self.label_77 = QLabel(self.frame_11) - self.label_77.setObjectName(u"label_77") - self.label_77.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_77.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_77, 5, 4, 1, 1) - - self.widget_y23 = ToggleSwitch(self.frame_11) - self.widget_y23.setObjectName(u"widget_y23") - self.widget_y23.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y23, 5, 5, 1, 1) - - self.label_71 = QLabel(self.frame_11) - self.label_71.setObjectName(u"label_71") - self.label_71.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_71.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_71, 5, 6, 1, 1) - - self.widget_y24 = ToggleSwitch(self.frame_11) - self.widget_y24.setObjectName(u"widget_y24") - self.widget_y24.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y24, 5, 7, 1, 1) - - self.label_70 = QLabel(self.frame_11) - self.label_70.setObjectName(u"label_70") - self.label_70.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_70.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_70, 6, 0, 1, 1) - - self.widget_y25 = ToggleSwitch(self.frame_11) - self.widget_y25.setObjectName(u"widget_y25") - self.widget_y25.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y25, 6, 1, 1, 1) - - self.label_80 = QLabel(self.frame_11) - self.label_80.setObjectName(u"label_80") - self.label_80.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_80.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_80, 6, 2, 1, 1) - - self.widget_y26 = ToggleSwitch(self.frame_11) - self.widget_y26.setObjectName(u"widget_y26") - self.widget_y26.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y26, 6, 3, 1, 1) - - self.label_74 = QLabel(self.frame_11) - self.label_74.setObjectName(u"label_74") - self.label_74.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_74.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_74, 6, 4, 1, 1) - - self.widget_y27 = ToggleSwitch(self.frame_11) - self.widget_y27.setObjectName(u"widget_y27") - self.widget_y27.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y27, 6, 5, 1, 1) - - self.label_73 = QLabel(self.frame_11) - self.label_73.setObjectName(u"label_73") - self.label_73.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_73.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_73, 6, 6, 1, 1) - - self.widget_y28 = ToggleSwitch(self.frame_11) - self.widget_y28.setObjectName(u"widget_y28") - self.widget_y28.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y28, 6, 7, 1, 1) - - self.label_75 = QLabel(self.frame_11) - self.label_75.setObjectName(u"label_75") - self.label_75.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_75.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_75, 7, 0, 1, 1) - - self.widget_y29 = ToggleSwitch(self.frame_11) - self.widget_y29.setObjectName(u"widget_y29") - self.widget_y29.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y29, 7, 1, 1, 1) - - self.label_76 = QLabel(self.frame_11) - self.label_76.setObjectName(u"label_76") - self.label_76.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_76.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_76, 7, 2, 1, 1) - - self.widget_y30 = ToggleSwitch(self.frame_11) - self.widget_y30.setObjectName(u"widget_y30") - self.widget_y30.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y30, 7, 3, 1, 1) - - self.label_83 = QLabel(self.frame_11) - self.label_83.setObjectName(u"label_83") - self.label_83.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_83.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_83, 7, 4, 1, 1) - - self.widget_y31 = ToggleSwitch(self.frame_11) - self.widget_y31.setObjectName(u"widget_y31") - self.widget_y31.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y31, 7, 5, 1, 1) - - self.label_79 = QLabel(self.frame_11) - self.label_79.setObjectName(u"label_79") - self.label_79.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_79.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_79, 7, 6, 1, 1) - - self.widget_y32 = ToggleSwitch(self.frame_11) - self.widget_y32.setObjectName(u"widget_y32") - self.widget_y32.setStyleSheet(u"background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y32, 7, 7, 1, 1) - - - self.horizontalLayout_19.addWidget(self.frame_11) - - self.stackedWidget_view.addWidget(self.page_7) - self.page_4 = QWidget() - self.page_4.setObjectName(u"page_4") - self.verticalLayout_15 = QVBoxLayout(self.page_4) - self.verticalLayout_15.setSpacing(0) - self.verticalLayout_15.setObjectName(u"verticalLayout_15") - self.verticalLayout_15.setContentsMargins(0, 0, 0, 0) - self.frame_6 = QFrame(self.page_4) - self.frame_6.setObjectName(u"frame_6") - self.frame_6.setStyleSheet(u"border:1px solid #324C82;") - self.frame_6.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_6.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_16 = QVBoxLayout(self.frame_6) - self.verticalLayout_16.setObjectName(u"verticalLayout_16") - self.frame_27 = QFrame(self.frame_6) - self.frame_27.setObjectName(u"frame_27") - self.frame_27.setStyleSheet(u"color:#ffffff;\n" -"border:None;") - self.frame_27.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_27.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_9 = QGridLayout(self.frame_27) - self.gridLayout_9.setObjectName(u"gridLayout_9") - self.gridLayout_9.setVerticalSpacing(80) - self.label_92 = QLabel(self.frame_27) - self.label_92.setObjectName(u"label_92") - sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - sizePolicy7.setHorizontalStretch(0) - sizePolicy7.setVerticalStretch(0) - sizePolicy7.setHeightForWidth(self.label_92.sizePolicy().hasHeightForWidth()) - self.label_92.setSizePolicy(sizePolicy7) - self.label_92.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_92, 1, 2, 1, 1) - - self.lineEdit_origin_y = QLineEdit(self.frame_27) - self.lineEdit_origin_y.setObjectName(u"lineEdit_origin_y") - sizePolicy4.setHeightForWidth(self.lineEdit_origin_y.sizePolicy().hasHeightForWidth()) - self.lineEdit_origin_y.setSizePolicy(sizePolicy4) - self.lineEdit_origin_y.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_origin_y.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_y, 0, 3, 1, 1) - - self.lineEdit_origin_v = QLineEdit(self.frame_27) - self.lineEdit_origin_v.setObjectName(u"lineEdit_origin_v") - sizePolicy4.setHeightForWidth(self.lineEdit_origin_v.sizePolicy().hasHeightForWidth()) - self.lineEdit_origin_v.setSizePolicy(sizePolicy4) - self.lineEdit_origin_v.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_origin_v.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_v, 1, 3, 1, 1) - - self.label_88 = QLabel(self.frame_27) - self.label_88.setObjectName(u"label_88") - sizePolicy7.setHeightForWidth(self.label_88.sizePolicy().hasHeightForWidth()) - self.label_88.setSizePolicy(sizePolicy7) - self.label_88.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_88, 0, 4, 1, 1) - - self.label_93 = QLabel(self.frame_27) - self.label_93.setObjectName(u"label_93") - sizePolicy7.setHeightForWidth(self.label_93.sizePolicy().hasHeightForWidth()) - self.label_93.setSizePolicy(sizePolicy7) - self.label_93.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_93, 0, 2, 1, 1) - - self.label_95 = QLabel(self.frame_27) - self.label_95.setObjectName(u"label_95") - sizePolicy7.setHeightForWidth(self.label_95.sizePolicy().hasHeightForWidth()) - self.label_95.setSizePolicy(sizePolicy7) - self.label_95.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_95, 1, 0, 1, 1) - - self.label_90 = QLabel(self.frame_27) - self.label_90.setObjectName(u"label_90") - sizePolicy7.setHeightForWidth(self.label_90.sizePolicy().hasHeightForWidth()) - self.label_90.setSizePolicy(sizePolicy7) - self.label_90.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_90, 0, 0, 1, 1) - - self.lineEdit_origin_u = QLineEdit(self.frame_27) - self.lineEdit_origin_u.setObjectName(u"lineEdit_origin_u") - sizePolicy4.setHeightForWidth(self.lineEdit_origin_u.sizePolicy().hasHeightForWidth()) - self.lineEdit_origin_u.setSizePolicy(sizePolicy4) - self.lineEdit_origin_u.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_origin_u.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_u, 1, 1, 1, 1) - - self.lineEdit_origin_x = QLineEdit(self.frame_27) - self.lineEdit_origin_x.setObjectName(u"lineEdit_origin_x") - sizePolicy4.setHeightForWidth(self.lineEdit_origin_x.sizePolicy().hasHeightForWidth()) - self.lineEdit_origin_x.setSizePolicy(sizePolicy4) - self.lineEdit_origin_x.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_origin_x.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_x, 0, 1, 1, 1) - - self.label_91 = QLabel(self.frame_27) - self.label_91.setObjectName(u"label_91") - sizePolicy7.setHeightForWidth(self.label_91.sizePolicy().hasHeightForWidth()) - self.label_91.setSizePolicy(sizePolicy7) - self.label_91.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_91, 1, 4, 1, 1) - - self.lineEdit_origin_w = QLineEdit(self.frame_27) - self.lineEdit_origin_w.setObjectName(u"lineEdit_origin_w") - sizePolicy4.setHeightForWidth(self.lineEdit_origin_w.sizePolicy().hasHeightForWidth()) - self.lineEdit_origin_w.setSizePolicy(sizePolicy4) - self.lineEdit_origin_w.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_origin_w.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_w, 1, 5, 1, 1) - - self.lineEdit_origin_z = QLineEdit(self.frame_27) - self.lineEdit_origin_z.setObjectName(u"lineEdit_origin_z") - sizePolicy4.setHeightForWidth(self.lineEdit_origin_z.sizePolicy().hasHeightForWidth()) - self.lineEdit_origin_z.setSizePolicy(sizePolicy4) - self.lineEdit_origin_z.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_origin_z.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_z, 0, 5, 1, 1) - - self.pushButton_get_origin = QPushButton(self.frame_27) - self.pushButton_get_origin.setObjectName(u"pushButton_get_origin") - sizePolicy4.setHeightForWidth(self.pushButton_get_origin.sizePolicy().hasHeightForWidth()) - self.pushButton_get_origin.setSizePolicy(sizePolicy4) - self.pushButton_get_origin.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_9.addWidget(self.pushButton_get_origin, 2, 1, 1, 2) - - self.pushButton_set_origin = QPushButton(self.frame_27) - self.pushButton_set_origin.setObjectName(u"pushButton_set_origin") - sizePolicy4.setHeightForWidth(self.pushButton_set_origin.sizePolicy().hasHeightForWidth()) - self.pushButton_set_origin.setSizePolicy(sizePolicy4) - self.pushButton_set_origin.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_9.addWidget(self.pushButton_set_origin, 2, 4, 1, 2) - - self.gridLayout_9.setRowStretch(0, 1) - self.gridLayout_9.setRowStretch(1, 1) - self.gridLayout_9.setRowStretch(2, 1) - - self.verticalLayout_16.addWidget(self.frame_27) - - - self.verticalLayout_15.addWidget(self.frame_6) - - self.frame_26 = QFrame(self.page_4) - self.frame_26.setObjectName(u"frame_26") - self.frame_26.setStyleSheet(u"border:1px solid #324C82;") - self.frame_26.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_26.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_16 = QHBoxLayout(self.frame_26) - self.horizontalLayout_16.setObjectName(u"horizontalLayout_16") - self.horizontalLayout_16.setContentsMargins(-1, 12, -1, -1) - self.frame_28 = QFrame(self.frame_26) - self.frame_28.setObjectName(u"frame_28") - self.frame_28.setStyleSheet(u"color:#ffffff;\n" -"border:None;") - self.frame_28.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_28.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_5 = QGridLayout(self.frame_28) - self.gridLayout_5.setObjectName(u"gridLayout_5") - self.gridLayout_5.setVerticalSpacing(35) - self.lineEdit_v5 = QLineEdit(self.frame_28) - self.lineEdit_v5.setObjectName(u"lineEdit_v5") - sizePolicy1.setHeightForWidth(self.lineEdit_v5.sizePolicy().hasHeightForWidth()) - self.lineEdit_v5.setSizePolicy(sizePolicy1) - self.lineEdit_v5.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_v5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v5, 4, 9, 1, 1) - - self.lineEdit_w5 = QLineEdit(self.frame_28) - self.lineEdit_w5.setObjectName(u"lineEdit_w5") - sizePolicy1.setHeightForWidth(self.lineEdit_w5.sizePolicy().hasHeightForWidth()) - self.lineEdit_w5.setSizePolicy(sizePolicy1) - self.lineEdit_w5.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_w5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w5, 4, 11, 1, 1) - - self.lineEdit_v1 = QLineEdit(self.frame_28) - self.lineEdit_v1.setObjectName(u"lineEdit_v1") - sizePolicy1.setHeightForWidth(self.lineEdit_v1.sizePolicy().hasHeightForWidth()) - self.lineEdit_v1.setSizePolicy(sizePolicy1) - self.lineEdit_v1.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_v1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v1, 0, 9, 1, 1) - - self.pushButton_get_p2 = QPushButton(self.frame_28) - self.pushButton_get_p2.setObjectName(u"pushButton_get_p2") - sizePolicy5.setHeightForWidth(self.pushButton_get_p2.sizePolicy().hasHeightForWidth()) - self.pushButton_get_p2.setSizePolicy(sizePolicy5) - self.pushButton_get_p2.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_get_p2, 1, 12, 1, 1) - - self.lineEdit_y2 = QLineEdit(self.frame_28) - self.lineEdit_y2.setObjectName(u"lineEdit_y2") - sizePolicy1.setHeightForWidth(self.lineEdit_y2.sizePolicy().hasHeightForWidth()) - self.lineEdit_y2.setSizePolicy(sizePolicy1) - self.lineEdit_y2.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_y2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y2, 1, 3, 1, 1) - - self.lineEdit_x1 = QLineEdit(self.frame_28) - self.lineEdit_x1.setObjectName(u"lineEdit_x1") - sizePolicy1.setHeightForWidth(self.lineEdit_x1.sizePolicy().hasHeightForWidth()) - self.lineEdit_x1.setSizePolicy(sizePolicy1) - self.lineEdit_x1.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_x1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x1, 0, 1, 1, 1) - - self.lineEdit_x2 = QLineEdit(self.frame_28) - self.lineEdit_x2.setObjectName(u"lineEdit_x2") - sizePolicy1.setHeightForWidth(self.lineEdit_x2.sizePolicy().hasHeightForWidth()) - self.lineEdit_x2.setSizePolicy(sizePolicy1) - self.lineEdit_x2.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_x2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x2, 1, 1, 1, 1) - - self.pushButton_set_p1 = QPushButton(self.frame_28) - self.pushButton_set_p1.setObjectName(u"pushButton_set_p1") - sizePolicy5.setHeightForWidth(self.pushButton_set_p1.sizePolicy().hasHeightForWidth()) - self.pushButton_set_p1.setSizePolicy(sizePolicy5) - self.pushButton_set_p1.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_set_p1, 0, 13, 1, 1) - - self.label_16 = QLabel(self.frame_28) - self.label_16.setObjectName(u"label_16") - sizePolicy4.setHeightForWidth(self.label_16.sizePolicy().hasHeightForWidth()) - self.label_16.setSizePolicy(sizePolicy4) - self.label_16.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_16, 1, 0, 1, 1) - - self.lineEdit_z5 = QLineEdit(self.frame_28) - self.lineEdit_z5.setObjectName(u"lineEdit_z5") - sizePolicy1.setHeightForWidth(self.lineEdit_z5.sizePolicy().hasHeightForWidth()) - self.lineEdit_z5.setSizePolicy(sizePolicy1) - self.lineEdit_z5.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_z5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z5, 4, 5, 1, 1) - - self.lineEdit_u5 = QLineEdit(self.frame_28) - self.lineEdit_u5.setObjectName(u"lineEdit_u5") - sizePolicy1.setHeightForWidth(self.lineEdit_u5.sizePolicy().hasHeightForWidth()) - self.lineEdit_u5.setSizePolicy(sizePolicy1) - self.lineEdit_u5.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_u5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u5, 4, 7, 1, 1) - - self.pushButton_set_p4 = QPushButton(self.frame_28) - self.pushButton_set_p4.setObjectName(u"pushButton_set_p4") - sizePolicy5.setHeightForWidth(self.pushButton_set_p4.sizePolicy().hasHeightForWidth()) - self.pushButton_set_p4.setSizePolicy(sizePolicy5) - self.pushButton_set_p4.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_set_p4, 3, 13, 1, 1) - - self.label_21 = QLabel(self.frame_28) - self.label_21.setObjectName(u"label_21") - sizePolicy4.setHeightForWidth(self.label_21.sizePolicy().hasHeightForWidth()) - self.label_21.setSizePolicy(sizePolicy4) - self.label_21.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_21, 2, 2, 1, 1) - - self.label_41 = QLabel(self.frame_28) - self.label_41.setObjectName(u"label_41") - sizePolicy4.setHeightForWidth(self.label_41.sizePolicy().hasHeightForWidth()) - self.label_41.setSizePolicy(sizePolicy4) - self.label_41.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_41, 1, 10, 1, 1) - - self.label_44 = QLabel(self.frame_28) - self.label_44.setObjectName(u"label_44") - sizePolicy4.setHeightForWidth(self.label_44.sizePolicy().hasHeightForWidth()) - self.label_44.setSizePolicy(sizePolicy4) - self.label_44.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_44, 2, 6, 1, 1) - - self.pushButton_get_p4 = QPushButton(self.frame_28) - self.pushButton_get_p4.setObjectName(u"pushButton_get_p4") - sizePolicy5.setHeightForWidth(self.pushButton_get_p4.sizePolicy().hasHeightForWidth()) - self.pushButton_get_p4.setSizePolicy(sizePolicy5) - self.pushButton_get_p4.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_get_p4, 3, 12, 1, 1) - - self.label_50 = QLabel(self.frame_28) - self.label_50.setObjectName(u"label_50") - sizePolicy4.setHeightForWidth(self.label_50.sizePolicy().hasHeightForWidth()) - self.label_50.setSizePolicy(sizePolicy4) - self.label_50.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_50, 4, 10, 1, 1) - - self.label_25 = QLabel(self.frame_28) - self.label_25.setObjectName(u"label_25") - sizePolicy4.setHeightForWidth(self.label_25.sizePolicy().hasHeightForWidth()) - self.label_25.setSizePolicy(sizePolicy4) - self.label_25.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_25, 4, 4, 1, 1) - - self.lineEdit_w1 = QLineEdit(self.frame_28) - self.lineEdit_w1.setObjectName(u"lineEdit_w1") - sizePolicy1.setHeightForWidth(self.lineEdit_w1.sizePolicy().hasHeightForWidth()) - self.lineEdit_w1.setSizePolicy(sizePolicy1) - self.lineEdit_w1.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_w1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w1, 0, 11, 1, 1) - - self.lineEdit_x5 = QLineEdit(self.frame_28) - self.lineEdit_x5.setObjectName(u"lineEdit_x5") - sizePolicy1.setHeightForWidth(self.lineEdit_x5.sizePolicy().hasHeightForWidth()) - self.lineEdit_x5.setSizePolicy(sizePolicy1) - self.lineEdit_x5.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_x5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x5, 4, 1, 1, 1) - - self.lineEdit_y5 = QLineEdit(self.frame_28) - self.lineEdit_y5.setObjectName(u"lineEdit_y5") - sizePolicy1.setHeightForWidth(self.lineEdit_y5.sizePolicy().hasHeightForWidth()) - self.lineEdit_y5.setSizePolicy(sizePolicy1) - self.lineEdit_y5.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_y5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y5, 4, 3, 1, 1) - - self.lineEdit_w4 = QLineEdit(self.frame_28) - self.lineEdit_w4.setObjectName(u"lineEdit_w4") - sizePolicy1.setHeightForWidth(self.lineEdit_w4.sizePolicy().hasHeightForWidth()) - self.lineEdit_w4.setSizePolicy(sizePolicy1) - self.lineEdit_w4.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_w4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w4, 3, 11, 1, 1) - - self.label_40 = QLabel(self.frame_28) - self.label_40.setObjectName(u"label_40") - sizePolicy4.setHeightForWidth(self.label_40.sizePolicy().hasHeightForWidth()) - self.label_40.setSizePolicy(sizePolicy4) - self.label_40.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_40, 1, 8, 1, 1) - - self.label_43 = QLabel(self.frame_28) - self.label_43.setObjectName(u"label_43") - sizePolicy4.setHeightForWidth(self.label_43.sizePolicy().hasHeightForWidth()) - self.label_43.setSizePolicy(sizePolicy4) - self.label_43.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_43, 2, 10, 1, 1) - - self.lineEdit_v4 = QLineEdit(self.frame_28) - self.lineEdit_v4.setObjectName(u"lineEdit_v4") - sizePolicy1.setHeightForWidth(self.lineEdit_v4.sizePolicy().hasHeightForWidth()) - self.lineEdit_v4.setSizePolicy(sizePolicy1) - self.lineEdit_v4.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_v4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v4, 3, 9, 1, 1) - - self.lineEdit_u1 = QLineEdit(self.frame_28) - self.lineEdit_u1.setObjectName(u"lineEdit_u1") - sizePolicy1.setHeightForWidth(self.lineEdit_u1.sizePolicy().hasHeightForWidth()) - self.lineEdit_u1.setSizePolicy(sizePolicy1) - self.lineEdit_u1.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_u1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u1, 0, 7, 1, 1) - - self.lineEdit_y1 = QLineEdit(self.frame_28) - self.lineEdit_y1.setObjectName(u"lineEdit_y1") - sizePolicy1.setHeightForWidth(self.lineEdit_y1.sizePolicy().hasHeightForWidth()) - self.lineEdit_y1.setSizePolicy(sizePolicy1) - self.lineEdit_y1.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_y1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y1, 0, 3, 1, 1) - - self.label_37 = QLabel(self.frame_28) - self.label_37.setObjectName(u"label_37") - sizePolicy4.setHeightForWidth(self.label_37.sizePolicy().hasHeightForWidth()) - self.label_37.setSizePolicy(sizePolicy4) - self.label_37.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_37, 0, 10, 1, 1) - - self.lineEdit_w2 = QLineEdit(self.frame_28) - self.lineEdit_w2.setObjectName(u"lineEdit_w2") - sizePolicy1.setHeightForWidth(self.lineEdit_w2.sizePolicy().hasHeightForWidth()) - self.lineEdit_w2.setSizePolicy(sizePolicy1) - self.lineEdit_w2.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_w2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w2, 1, 11, 1, 1) - - self.pushButton_set_p5 = QPushButton(self.frame_28) - self.pushButton_set_p5.setObjectName(u"pushButton_set_p5") - sizePolicy5.setHeightForWidth(self.pushButton_set_p5.sizePolicy().hasHeightForWidth()) - self.pushButton_set_p5.setSizePolicy(sizePolicy5) - self.pushButton_set_p5.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_set_p5, 4, 13, 1, 1) - - self.pushButton_set_p3 = QPushButton(self.frame_28) - self.pushButton_set_p3.setObjectName(u"pushButton_set_p3") - sizePolicy5.setHeightForWidth(self.pushButton_set_p3.sizePolicy().hasHeightForWidth()) - self.pushButton_set_p3.setSizePolicy(sizePolicy5) - self.pushButton_set_p3.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_set_p3, 2, 13, 1, 1) - - self.label_26 = QLabel(self.frame_28) - self.label_26.setObjectName(u"label_26") - sizePolicy4.setHeightForWidth(self.label_26.sizePolicy().hasHeightForWidth()) - self.label_26.setSizePolicy(sizePolicy4) - self.label_26.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_26, 4, 2, 1, 1) - - self.label_19 = QLabel(self.frame_28) - self.label_19.setObjectName(u"label_19") - sizePolicy4.setHeightForWidth(self.label_19.sizePolicy().hasHeightForWidth()) - self.label_19.setSizePolicy(sizePolicy4) - self.label_19.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_19, 2, 0, 1, 1) - - self.lineEdit_y4 = QLineEdit(self.frame_28) - self.lineEdit_y4.setObjectName(u"lineEdit_y4") - sizePolicy1.setHeightForWidth(self.lineEdit_y4.sizePolicy().hasHeightForWidth()) - self.lineEdit_y4.setSizePolicy(sizePolicy1) - self.lineEdit_y4.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_y4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y4, 3, 3, 1, 1) - - self.label_42 = QLabel(self.frame_28) - self.label_42.setObjectName(u"label_42") - sizePolicy4.setHeightForWidth(self.label_42.sizePolicy().hasHeightForWidth()) - self.label_42.setSizePolicy(sizePolicy4) - self.label_42.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_42, 2, 8, 1, 1) - - self.lineEdit_u4 = QLineEdit(self.frame_28) - self.lineEdit_u4.setObjectName(u"lineEdit_u4") - sizePolicy1.setHeightForWidth(self.lineEdit_u4.sizePolicy().hasHeightForWidth()) - self.lineEdit_u4.setSizePolicy(sizePolicy1) - self.lineEdit_u4.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_u4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u4, 3, 7, 1, 1) - - self.lineEdit_z4 = QLineEdit(self.frame_28) - self.lineEdit_z4.setObjectName(u"lineEdit_z4") - sizePolicy1.setHeightForWidth(self.lineEdit_z4.sizePolicy().hasHeightForWidth()) - self.lineEdit_z4.setSizePolicy(sizePolicy1) - self.lineEdit_z4.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_z4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z4, 3, 5, 1, 1) - - self.lineEdit_x3 = QLineEdit(self.frame_28) - self.lineEdit_x3.setObjectName(u"lineEdit_x3") - sizePolicy1.setHeightForWidth(self.lineEdit_x3.sizePolicy().hasHeightForWidth()) - self.lineEdit_x3.setSizePolicy(sizePolicy1) - self.lineEdit_x3.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_x3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x3, 2, 1, 1, 1) - - self.label_18 = QLabel(self.frame_28) - self.label_18.setObjectName(u"label_18") - sizePolicy4.setHeightForWidth(self.label_18.sizePolicy().hasHeightForWidth()) - self.label_18.setSizePolicy(sizePolicy4) - self.label_18.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_18, 1, 2, 1, 1) - - self.label_48 = QLabel(self.frame_28) - self.label_48.setObjectName(u"label_48") - sizePolicy4.setHeightForWidth(self.label_48.sizePolicy().hasHeightForWidth()) - self.label_48.setSizePolicy(sizePolicy4) - self.label_48.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_48, 4, 8, 1, 1) - - self.label_38 = QLabel(self.frame_28) - self.label_38.setObjectName(u"label_38") - sizePolicy4.setHeightForWidth(self.label_38.sizePolicy().hasHeightForWidth()) - self.label_38.setSizePolicy(sizePolicy4) - self.label_38.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_38, 0, 8, 1, 1) - - self.lineEdit_y3 = QLineEdit(self.frame_28) - self.lineEdit_y3.setObjectName(u"lineEdit_y3") - sizePolicy1.setHeightForWidth(self.lineEdit_y3.sizePolicy().hasHeightForWidth()) - self.lineEdit_y3.setSizePolicy(sizePolicy1) - self.lineEdit_y3.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_y3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y3, 2, 3, 1, 1) - - self.pushButton_get_p5 = QPushButton(self.frame_28) - self.pushButton_get_p5.setObjectName(u"pushButton_get_p5") - sizePolicy5.setHeightForWidth(self.pushButton_get_p5.sizePolicy().hasHeightForWidth()) - self.pushButton_get_p5.setSizePolicy(sizePolicy5) - self.pushButton_get_p5.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_get_p5, 4, 12, 1, 1) - - self.label_20 = QLabel(self.frame_28) - self.label_20.setObjectName(u"label_20") - sizePolicy4.setHeightForWidth(self.label_20.sizePolicy().hasHeightForWidth()) - self.label_20.setSizePolicy(sizePolicy4) - self.label_20.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_20, 2, 4, 1, 1) - - self.label_27 = QLabel(self.frame_28) - self.label_27.setObjectName(u"label_27") - sizePolicy4.setHeightForWidth(self.label_27.sizePolicy().hasHeightForWidth()) - self.label_27.setSizePolicy(sizePolicy4) - self.label_27.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_27, 4, 0, 1, 1) - - self.label_22 = QLabel(self.frame_28) - self.label_22.setObjectName(u"label_22") - sizePolicy4.setHeightForWidth(self.label_22.sizePolicy().hasHeightForWidth()) - self.label_22.setSizePolicy(sizePolicy4) - self.label_22.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_22, 3, 0, 1, 1) - - self.label_46 = QLabel(self.frame_28) - self.label_46.setObjectName(u"label_46") - sizePolicy4.setHeightForWidth(self.label_46.sizePolicy().hasHeightForWidth()) - self.label_46.setSizePolicy(sizePolicy4) - self.label_46.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_46, 3, 10, 1, 1) - - self.label_14 = QLabel(self.frame_28) - self.label_14.setObjectName(u"label_14") - sizePolicy4.setHeightForWidth(self.label_14.sizePolicy().hasHeightForWidth()) - self.label_14.setSizePolicy(sizePolicy4) - self.label_14.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_14, 0, 2, 1, 1) - - self.label_15 = QLabel(self.frame_28) - self.label_15.setObjectName(u"label_15") - sizePolicy4.setHeightForWidth(self.label_15.sizePolicy().hasHeightForWidth()) - self.label_15.setSizePolicy(sizePolicy4) - self.label_15.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_15, 0, 4, 1, 1) - - self.lineEdit_z3 = QLineEdit(self.frame_28) - self.lineEdit_z3.setObjectName(u"lineEdit_z3") - sizePolicy1.setHeightForWidth(self.lineEdit_z3.sizePolicy().hasHeightForWidth()) - self.lineEdit_z3.setSizePolicy(sizePolicy1) - self.lineEdit_z3.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_z3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z3, 2, 5, 1, 1) - - self.label_39 = QLabel(self.frame_28) - self.label_39.setObjectName(u"label_39") - sizePolicy4.setHeightForWidth(self.label_39.sizePolicy().hasHeightForWidth()) - self.label_39.setSizePolicy(sizePolicy4) - self.label_39.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_39, 1, 6, 1, 1) - - self.label_23 = QLabel(self.frame_28) - self.label_23.setObjectName(u"label_23") - sizePolicy4.setHeightForWidth(self.label_23.sizePolicy().hasHeightForWidth()) - self.label_23.setSizePolicy(sizePolicy4) - self.label_23.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_23, 3, 2, 1, 1) - - self.lineEdit_z2 = QLineEdit(self.frame_28) - self.lineEdit_z2.setObjectName(u"lineEdit_z2") - sizePolicy1.setHeightForWidth(self.lineEdit_z2.sizePolicy().hasHeightForWidth()) - self.lineEdit_z2.setSizePolicy(sizePolicy1) - self.lineEdit_z2.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_z2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z2, 1, 5, 1, 1) - - self.label_9 = QLabel(self.frame_28) - self.label_9.setObjectName(u"label_9") - sizePolicy4.setHeightForWidth(self.label_9.sizePolicy().hasHeightForWidth()) - self.label_9.setSizePolicy(sizePolicy4) - self.label_9.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_9, 0, 0, 1, 1) - - self.label_49 = QLabel(self.frame_28) - self.label_49.setObjectName(u"label_49") - sizePolicy4.setHeightForWidth(self.label_49.sizePolicy().hasHeightForWidth()) - self.label_49.setSizePolicy(sizePolicy4) - self.label_49.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_49, 4, 6, 1, 1) - - self.label_45 = QLabel(self.frame_28) - self.label_45.setObjectName(u"label_45") - sizePolicy4.setHeightForWidth(self.label_45.sizePolicy().hasHeightForWidth()) - self.label_45.setSizePolicy(sizePolicy4) - self.label_45.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_45, 3, 6, 1, 1) - - self.pushButton_get_p3 = QPushButton(self.frame_28) - self.pushButton_get_p3.setObjectName(u"pushButton_get_p3") - sizePolicy5.setHeightForWidth(self.pushButton_get_p3.sizePolicy().hasHeightForWidth()) - self.pushButton_get_p3.setSizePolicy(sizePolicy5) - self.pushButton_get_p3.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_get_p3, 2, 12, 1, 1) - - self.lineEdit_v3 = QLineEdit(self.frame_28) - self.lineEdit_v3.setObjectName(u"lineEdit_v3") - sizePolicy1.setHeightForWidth(self.lineEdit_v3.sizePolicy().hasHeightForWidth()) - self.lineEdit_v3.setSizePolicy(sizePolicy1) - self.lineEdit_v3.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_v3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v3, 2, 9, 1, 1) - - self.lineEdit_x4 = QLineEdit(self.frame_28) - self.lineEdit_x4.setObjectName(u"lineEdit_x4") - sizePolicy1.setHeightForWidth(self.lineEdit_x4.sizePolicy().hasHeightForWidth()) - self.lineEdit_x4.setSizePolicy(sizePolicy1) - self.lineEdit_x4.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_x4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x4, 3, 1, 1, 1) - - self.label_47 = QLabel(self.frame_28) - self.label_47.setObjectName(u"label_47") - sizePolicy4.setHeightForWidth(self.label_47.sizePolicy().hasHeightForWidth()) - self.label_47.setSizePolicy(sizePolicy4) - self.label_47.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_47, 3, 8, 1, 1) - - self.pushButton_get_p1 = QPushButton(self.frame_28) - self.pushButton_get_p1.setObjectName(u"pushButton_get_p1") - sizePolicy5.setHeightForWidth(self.pushButton_get_p1.sizePolicy().hasHeightForWidth()) - self.pushButton_get_p1.setSizePolicy(sizePolicy5) - self.pushButton_get_p1.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_get_p1, 0, 12, 1, 1) - - self.lineEdit_u2 = QLineEdit(self.frame_28) - self.lineEdit_u2.setObjectName(u"lineEdit_u2") - sizePolicy1.setHeightForWidth(self.lineEdit_u2.sizePolicy().hasHeightForWidth()) - self.lineEdit_u2.setSizePolicy(sizePolicy1) - self.lineEdit_u2.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_u2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u2, 1, 7, 1, 1) - - self.lineEdit_z1 = QLineEdit(self.frame_28) - self.lineEdit_z1.setObjectName(u"lineEdit_z1") - sizePolicy1.setHeightForWidth(self.lineEdit_z1.sizePolicy().hasHeightForWidth()) - self.lineEdit_z1.setSizePolicy(sizePolicy1) - self.lineEdit_z1.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_z1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z1, 0, 5, 1, 1) - - self.pushButton_set_p2 = QPushButton(self.frame_28) - self.pushButton_set_p2.setObjectName(u"pushButton_set_p2") - sizePolicy5.setHeightForWidth(self.pushButton_set_p2.sizePolicy().hasHeightForWidth()) - self.pushButton_set_p2.setSizePolicy(sizePolicy5) - self.pushButton_set_p2.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - - self.gridLayout_5.addWidget(self.pushButton_set_p2, 1, 13, 1, 1) - - self.label_24 = QLabel(self.frame_28) - self.label_24.setObjectName(u"label_24") - sizePolicy4.setHeightForWidth(self.label_24.sizePolicy().hasHeightForWidth()) - self.label_24.setSizePolicy(sizePolicy4) - self.label_24.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_24, 3, 4, 1, 1) - - self.lineEdit_w3 = QLineEdit(self.frame_28) - self.lineEdit_w3.setObjectName(u"lineEdit_w3") - sizePolicy1.setHeightForWidth(self.lineEdit_w3.sizePolicy().hasHeightForWidth()) - self.lineEdit_w3.setSizePolicy(sizePolicy1) - self.lineEdit_w3.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_w3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w3, 2, 11, 1, 1) - - self.lineEdit_u3 = QLineEdit(self.frame_28) - self.lineEdit_u3.setObjectName(u"lineEdit_u3") - sizePolicy1.setHeightForWidth(self.lineEdit_u3.sizePolicy().hasHeightForWidth()) - self.lineEdit_u3.setSizePolicy(sizePolicy1) - self.lineEdit_u3.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_u3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u3, 2, 7, 1, 1) - - self.label_36 = QLabel(self.frame_28) - self.label_36.setObjectName(u"label_36") - sizePolicy4.setHeightForWidth(self.label_36.sizePolicy().hasHeightForWidth()) - self.label_36.setSizePolicy(sizePolicy4) - self.label_36.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_36, 0, 6, 1, 1) - - self.label_17 = QLabel(self.frame_28) - self.label_17.setObjectName(u"label_17") - sizePolicy4.setHeightForWidth(self.label_17.sizePolicy().hasHeightForWidth()) - self.label_17.setSizePolicy(sizePolicy4) - self.label_17.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.gridLayout_5.addWidget(self.label_17, 1, 4, 1, 1) - - self.lineEdit_v2 = QLineEdit(self.frame_28) - self.lineEdit_v2.setObjectName(u"lineEdit_v2") - sizePolicy1.setHeightForWidth(self.lineEdit_v2.sizePolicy().hasHeightForWidth()) - self.lineEdit_v2.setSizePolicy(sizePolicy1) - self.lineEdit_v2.setStyleSheet(u"border:1px solid #FFFfff") - self.lineEdit_v2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v2, 1, 9, 1, 1) - - self.gridLayout_5.setRowStretch(0, 1) - self.gridLayout_5.setRowStretch(1, 1) - self.gridLayout_5.setRowStretch(2, 1) - self.gridLayout_5.setRowStretch(3, 1) - self.gridLayout_5.setRowStretch(4, 1) - self.gridLayout_5.setColumnStretch(0, 1) - self.gridLayout_5.setColumnStretch(1, 2) - self.gridLayout_5.setColumnStretch(2, 1) - self.gridLayout_5.setColumnStretch(3, 2) - self.gridLayout_5.setColumnStretch(4, 1) - self.gridLayout_5.setColumnStretch(5, 2) - self.gridLayout_5.setColumnStretch(6, 1) - self.gridLayout_5.setColumnStretch(7, 2) - self.gridLayout_5.setColumnStretch(8, 1) - self.gridLayout_5.setColumnStretch(9, 2) - self.gridLayout_5.setColumnStretch(10, 1) - self.gridLayout_5.setColumnStretch(11, 2) - self.gridLayout_5.setColumnStretch(12, 3) - self.gridLayout_5.setColumnStretch(13, 4) - - self.horizontalLayout_16.addWidget(self.frame_28) - - - self.verticalLayout_15.addWidget(self.frame_26) - - self.verticalLayout_15.setStretch(0, 1) - self.verticalLayout_15.setStretch(1, 1) - self.stackedWidget_view.addWidget(self.page_4) - self.page = QWidget() - self.page.setObjectName(u"page") - self.verticalLayout_17 = QVBoxLayout(self.page) - self.verticalLayout_17.setSpacing(0) - self.verticalLayout_17.setObjectName(u"verticalLayout_17") - self.verticalLayout_17.setContentsMargins(0, 0, 0, 0) - self.frame_8 = QFrame(self.page) - self.frame_8.setObjectName(u"frame_8") - self.frame_8.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_8.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_18 = QVBoxLayout(self.frame_8) - self.verticalLayout_18.setObjectName(u"verticalLayout_18") - self.lineEdit_setting_height1 = QFrame(self.frame_8) - self.lineEdit_setting_height1.setObjectName(u"lineEdit_setting_height1") - sizePolicy8 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum) - sizePolicy8.setHorizontalStretch(0) - sizePolicy8.setVerticalStretch(0) - sizePolicy8.setHeightForWidth(self.lineEdit_setting_height1.sizePolicy().hasHeightForWidth()) - self.lineEdit_setting_height1.setSizePolicy(sizePolicy8) - self.lineEdit_setting_height1.setFrameShape(QFrame.Shape.StyledPanel) - self.lineEdit_setting_height1.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_6 = QGridLayout(self.lineEdit_setting_height1) - self.gridLayout_6.setObjectName(u"gridLayout_6") - self.gridLayout_6.setHorizontalSpacing(0) - self.gridLayout_6.setVerticalSpacing(60) - self.gridLayout_6.setContentsMargins(0, 0, 0, 60) - self.pushButton_saveSeting = QPushButton(self.lineEdit_setting_height1) - self.pushButton_saveSeting.setObjectName(u"pushButton_saveSeting") - sizePolicy1.setHeightForWidth(self.pushButton_saveSeting.sizePolicy().hasHeightForWidth()) - self.pushButton_saveSeting.setSizePolicy(sizePolicy1) - self.pushButton_saveSeting.setStyleSheet(u"*{\n" -"background-color: #2196F3;\n" -"font: 20pt \"\u6977\u4f53\";\n" -"border:None;\n" -"color:#ffffff\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - self.pushButton_saveSeting.setFlat(False) - - self.gridLayout_6.addWidget(self.pushButton_saveSeting, 6, 0, 1, 4) - - self.lineEdit_speed_debug = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_speed_debug.setObjectName(u"lineEdit_speed_debug") - sizePolicy1.setHeightForWidth(self.lineEdit_speed_debug.sizePolicy().hasHeightForWidth()) - self.lineEdit_speed_debug.setSizePolicy(sizePolicy1) - self.lineEdit_speed_debug.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_speed_debug, 2, 1, 1, 1) - - self.label_51 = QLabel(self.lineEdit_setting_height1) - self.label_51.setObjectName(u"label_51") - sizePolicy4.setHeightForWidth(self.label_51.sizePolicy().hasHeightForWidth()) - self.label_51.setSizePolicy(sizePolicy4) - self.label_51.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_51, 0, 2, 1, 1) - - self.lineEdit_press_addr = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_press_addr.setObjectName(u"lineEdit_press_addr") - sizePolicy1.setHeightForWidth(self.lineEdit_press_addr.sizePolicy().hasHeightForWidth()) - self.lineEdit_press_addr.setSizePolicy(sizePolicy1) - self.lineEdit_press_addr.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_press_addr, 1, 3, 1, 1) - - self.label_54 = QLabel(self.lineEdit_setting_height1) - self.label_54.setObjectName(u"label_54") - sizePolicy4.setHeightForWidth(self.label_54.sizePolicy().hasHeightForWidth()) - self.label_54.setSizePolicy(sizePolicy4) - self.label_54.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_54, 2, 2, 1, 1) - - self.lineEdit_speed_run = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_speed_run.setObjectName(u"lineEdit_speed_run") - sizePolicy1.setHeightForWidth(self.lineEdit_speed_run.sizePolicy().hasHeightForWidth()) - self.lineEdit_speed_run.setSizePolicy(sizePolicy1) - self.lineEdit_speed_run.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_speed_run, 0, 1, 1, 1) - - self.lineEdit_speed_reset = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_speed_reset.setObjectName(u"lineEdit_speed_reset") - sizePolicy1.setHeightForWidth(self.lineEdit_speed_reset.sizePolicy().hasHeightForWidth()) - self.lineEdit_speed_reset.setSizePolicy(sizePolicy1) - self.lineEdit_speed_reset.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_speed_reset, 1, 1, 1, 1) - - self.lineEdit_shake_addr = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_shake_addr.setObjectName(u"lineEdit_shake_addr") - sizePolicy1.setHeightForWidth(self.lineEdit_shake_addr.sizePolicy().hasHeightForWidth()) - self.lineEdit_shake_addr.setSizePolicy(sizePolicy1) - self.lineEdit_shake_addr.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_shake_addr, 2, 3, 1, 1) - - self.lineEdit_timedelay_put = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_timedelay_put.setObjectName(u"lineEdit_timedelay_put") - sizePolicy1.setHeightForWidth(self.lineEdit_timedelay_put.sizePolicy().hasHeightForWidth()) - self.lineEdit_timedelay_put.setSizePolicy(sizePolicy1) - self.lineEdit_timedelay_put.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_timedelay_put, 4, 1, 1, 1) - - self.label_85 = QLabel(self.lineEdit_setting_height1) - self.label_85.setObjectName(u"label_85") - sizePolicy4.setHeightForWidth(self.label_85.sizePolicy().hasHeightForWidth()) - self.label_85.setSizePolicy(sizePolicy4) - self.label_85.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_85, 3, 2, 1, 1) - - self.label_94 = QLabel(self.lineEdit_setting_height1) - self.label_94.setObjectName(u"label_94") - sizePolicy4.setHeightForWidth(self.label_94.sizePolicy().hasHeightForWidth()) - self.label_94.setSizePolicy(sizePolicy4) - self.label_94.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_94, 1, 0, 1, 1) - - self.lineEdit_timedelay_shake = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_timedelay_shake.setObjectName(u"lineEdit_timedelay_shake") - sizePolicy1.setHeightForWidth(self.lineEdit_timedelay_shake.sizePolicy().hasHeightForWidth()) - self.lineEdit_timedelay_shake.setSizePolicy(sizePolicy1) - self.lineEdit_timedelay_shake.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_timedelay_shake, 3, 3, 1, 1) - - self.label_28 = QLabel(self.lineEdit_setting_height1) - self.label_28.setObjectName(u"label_28") - sizePolicy4.setHeightForWidth(self.label_28.sizePolicy().hasHeightForWidth()) - self.label_28.setSizePolicy(sizePolicy4) - self.label_28.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_28, 0, 0, 1, 1) - - self.lineEdit_setting_smooth = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_setting_smooth.setObjectName(u"lineEdit_setting_smooth") - sizePolicy1.setHeightForWidth(self.lineEdit_setting_smooth.sizePolicy().hasHeightForWidth()) - self.lineEdit_setting_smooth.setSizePolicy(sizePolicy1) - self.lineEdit_setting_smooth.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_setting_smooth, 4, 3, 1, 1) - - self.lineEdit_timedelay_take = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_timedelay_take.setObjectName(u"lineEdit_timedelay_take") - sizePolicy1.setHeightForWidth(self.lineEdit_timedelay_take.sizePolicy().hasHeightForWidth()) - self.lineEdit_timedelay_take.setSizePolicy(sizePolicy1) - self.lineEdit_timedelay_take.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_timedelay_take, 3, 1, 1, 1) - - self.lineEdit_setting_height = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_setting_height.setObjectName(u"lineEdit_setting_height") - sizePolicy1.setHeightForWidth(self.lineEdit_setting_height.sizePolicy().hasHeightForWidth()) - self.lineEdit_setting_height.setSizePolicy(sizePolicy1) - self.lineEdit_setting_height.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_setting_height, 5, 1, 1, 1) - - self.label_29 = QLabel(self.lineEdit_setting_height1) - self.label_29.setObjectName(u"label_29") - sizePolicy4.setHeightForWidth(self.label_29.sizePolicy().hasHeightForWidth()) - self.label_29.setSizePolicy(sizePolicy4) - self.label_29.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_29, 2, 0, 1, 1) - - self.label_87 = QLabel(self.lineEdit_setting_height1) - self.label_87.setObjectName(u"label_87") - sizePolicy4.setHeightForWidth(self.label_87.sizePolicy().hasHeightForWidth()) - self.label_87.setSizePolicy(sizePolicy4) - self.label_87.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_87, 3, 0, 1, 1) - - self.lineEdit_take_addr = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_take_addr.setObjectName(u"lineEdit_take_addr") - sizePolicy1.setHeightForWidth(self.lineEdit_take_addr.sizePolicy().hasHeightForWidth()) - self.lineEdit_take_addr.setSizePolicy(sizePolicy1) - self.lineEdit_take_addr.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_take_addr, 0, 3, 1, 1) - - self.label_52 = QLabel(self.lineEdit_setting_height1) - self.label_52.setObjectName(u"label_52") - sizePolicy4.setHeightForWidth(self.label_52.sizePolicy().hasHeightForWidth()) - self.label_52.setSizePolicy(sizePolicy4) - self.label_52.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_52, 1, 2, 1, 1) - - self.label_89 = QLabel(self.lineEdit_setting_height1) - self.label_89.setObjectName(u"label_89") - sizePolicy4.setHeightForWidth(self.label_89.sizePolicy().hasHeightForWidth()) - self.label_89.setSizePolicy(sizePolicy4) - self.label_89.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_89, 4, 2, 1, 1) - - self.label_86 = QLabel(self.lineEdit_setting_height1) - self.label_86.setObjectName(u"label_86") - sizePolicy4.setHeightForWidth(self.label_86.sizePolicy().hasHeightForWidth()) - self.label_86.setSizePolicy(sizePolicy4) - self.label_86.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_86, 4, 0, 1, 1) - - self.label_96 = QLabel(self.lineEdit_setting_height1) - self.label_96.setObjectName(u"label_96") - sizePolicy4.setHeightForWidth(self.label_96.sizePolicy().hasHeightForWidth()) - self.label_96.setSizePolicy(sizePolicy4) - self.label_96.setStyleSheet(u"color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_96, 5, 0, 1, 1) - - self.gridLayout_6.setRowStretch(0, 1) - self.gridLayout_6.setRowStretch(1, 1) - self.gridLayout_6.setRowStretch(2, 1) - self.gridLayout_6.setRowStretch(3, 1) - self.gridLayout_6.setRowStretch(4, 1) - self.gridLayout_6.setRowStretch(5, 1) - self.gridLayout_6.setRowStretch(6, 1) - - self.verticalLayout_18.addWidget(self.lineEdit_setting_height1) - - self.verticalLayout_18.setStretch(0, 7) - - self.verticalLayout_17.addWidget(self.frame_8) - - self.stackedWidget_view.addWidget(self.page) - self.page_2 = QWidget() - self.page_2.setObjectName(u"page_2") - self.verticalLayout_19 = QVBoxLayout(self.page_2) - self.verticalLayout_19.setSpacing(0) - self.verticalLayout_19.setObjectName(u"verticalLayout_19") - self.verticalLayout_19.setContentsMargins(0, 0, 0, 0) - self.frame_30 = QFrame(self.page_2) - self.frame_30.setObjectName(u"frame_30") - self.frame_30.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_30.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_17 = QHBoxLayout(self.frame_30) - self.horizontalLayout_17.setSpacing(0) - self.horizontalLayout_17.setObjectName(u"horizontalLayout_17") - self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0) - self.frame_31 = QFrame(self.frame_30) - self.frame_31.setObjectName(u"frame_31") - self.frame_31.setStyleSheet(u"background-color: rgb(85, 170, 255);") - self.frame_31.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_31.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_7 = QGridLayout(self.frame_31) - self.gridLayout_7.setObjectName(u"gridLayout_7") - self.lineEdit_j6 = QLineEdit(self.frame_31) - self.lineEdit_j6.setObjectName(u"lineEdit_j6") - - self.gridLayout_7.addWidget(self.lineEdit_j6, 14, 7, 1, 1) - - self.pushButton_j3_add = QPushButton(self.frame_31) - self.pushButton_j3_add.setObjectName(u"pushButton_j3_add") - self.pushButton_j3_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - icon6 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListAdd)) - self.pushButton_j3_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j3_add, 8, 6, 1, 1) - - self.lineEdit_j2 = QLineEdit(self.frame_31) - self.lineEdit_j2.setObjectName(u"lineEdit_j2") - - self.gridLayout_7.addWidget(self.lineEdit_j2, 6, 7, 1, 1) - - self.horizontalSlider_J3 = QSlider(self.frame_31) - self.horizontalSlider_J3.setObjectName(u"horizontalSlider_J3") - self.horizontalSlider_J3.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J3, 8, 2, 1, 4) - - self.pushButton_j5_add = QPushButton(self.frame_31) - self.pushButton_j5_add.setObjectName(u"pushButton_j5_add") - self.pushButton_j5_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j5_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j5_add, 12, 6, 1, 1) - - self.pushButton_j6_sub = QPushButton(self.frame_31) - self.pushButton_j6_sub.setObjectName(u"pushButton_j6_sub") - self.pushButton_j6_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - icon7 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListRemove)) - self.pushButton_j6_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j6_sub, 14, 1, 1, 1) - - self.label_34 = QLabel(self.frame_31) - self.label_34.setObjectName(u"label_34") - self.label_34.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - - self.gridLayout_7.addWidget(self.label_34, 12, 0, 1, 1) - - self.pushButton_j6_add = QPushButton(self.frame_31) - self.pushButton_j6_add.setObjectName(u"pushButton_j6_add") - self.pushButton_j6_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j6_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j6_add, 14, 6, 1, 1) - - self.label_j5_max = QLabel(self.frame_31) - self.label_j5_max.setObjectName(u"label_j5_max") - - self.gridLayout_7.addWidget(self.label_j5_max, 11, 5, 1, 1) - - self.lineEdit_j4 = QLineEdit(self.frame_31) - self.lineEdit_j4.setObjectName(u"lineEdit_j4") - - self.gridLayout_7.addWidget(self.lineEdit_j4, 10, 7, 1, 1) - - self.pushButton_j2_add = QPushButton(self.frame_31) - self.pushButton_j2_add.setObjectName(u"pushButton_j2_add") - self.pushButton_j2_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j2_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j2_add, 6, 6, 1, 1) - - self.lineEdit_j3 = QLineEdit(self.frame_31) - self.lineEdit_j3.setObjectName(u"lineEdit_j3") - - self.gridLayout_7.addWidget(self.lineEdit_j3, 8, 7, 1, 1) - - self.horizontalSlider_J1 = QSlider(self.frame_31) - self.horizontalSlider_J1.setObjectName(u"horizontalSlider_J1") - self.horizontalSlider_J1.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J1, 4, 2, 1, 4) - - self.label_j1 = QLabel(self.frame_31) - self.label_j1.setObjectName(u"label_j1") - - self.gridLayout_7.addWidget(self.label_j1, 3, 4, 1, 1) - - self.label_j2_min = QLabel(self.frame_31) - self.label_j2_min.setObjectName(u"label_j2_min") - - self.gridLayout_7.addWidget(self.label_j2_min, 5, 2, 1, 2) - - self.lineEdit_j5 = QLineEdit(self.frame_31) - self.lineEdit_j5.setObjectName(u"lineEdit_j5") - - self.gridLayout_7.addWidget(self.lineEdit_j5, 12, 7, 1, 1) - - self.label_j5_min = QLabel(self.frame_31) - self.label_j5_min.setObjectName(u"label_j5_min") - - self.gridLayout_7.addWidget(self.label_j5_min, 11, 2, 1, 2) - - self.label_30 = QLabel(self.frame_31) - self.label_30.setObjectName(u"label_30") - self.label_30.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - - self.gridLayout_7.addWidget(self.label_30, 4, 0, 1, 1) - - self.label_j6_min = QLabel(self.frame_31) - self.label_j6_min.setObjectName(u"label_j6_min") - - self.gridLayout_7.addWidget(self.label_j6_min, 13, 2, 1, 2) - - self.label_j3_min = QLabel(self.frame_31) - self.label_j3_min.setObjectName(u"label_j3_min") - - self.gridLayout_7.addWidget(self.label_j3_min, 7, 2, 1, 2) - - self.horizontalSlider_J4 = QSlider(self.frame_31) - self.horizontalSlider_J4.setObjectName(u"horizontalSlider_J4") - self.horizontalSlider_J4.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J4, 10, 2, 1, 4) - - self.label_j3_max = QLabel(self.frame_31) - self.label_j3_max.setObjectName(u"label_j3_max") - - self.gridLayout_7.addWidget(self.label_j3_max, 7, 5, 1, 1) - - self.pushButton_j3_sub = QPushButton(self.frame_31) - self.pushButton_j3_sub.setObjectName(u"pushButton_j3_sub") - self.pushButton_j3_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j3_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j3_sub, 8, 1, 1, 1) - - self.pushButton_j4_sub = QPushButton(self.frame_31) - self.pushButton_j4_sub.setObjectName(u"pushButton_j4_sub") - self.pushButton_j4_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j4_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j4_sub, 10, 1, 1, 1) - - self.pushButton_j1_add = QPushButton(self.frame_31) - self.pushButton_j1_add.setObjectName(u"pushButton_j1_add") - self.pushButton_j1_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(0, 255, 0);\n" -"}\n" -"") - self.pushButton_j1_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j1_add, 4, 6, 1, 1) - - self.label_j4_min = QLabel(self.frame_31) - self.label_j4_min.setObjectName(u"label_j4_min") - - self.gridLayout_7.addWidget(self.label_j4_min, 9, 2, 1, 2) - - self.pushButton_j1_sub = QPushButton(self.frame_31) - self.pushButton_j1_sub.setObjectName(u"pushButton_j1_sub") - self.pushButton_j1_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j1_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j1_sub, 4, 1, 1, 1) - - self.pushButton_sendMove = QPushButton(self.frame_31) - self.pushButton_sendMove.setObjectName(u"pushButton_sendMove") - self.pushButton_sendMove.setStyleSheet(u"*{\n" -"background-color: #007AD9;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border:6px solid #55AAFF;\n" -"color:#ffffff\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - - self.gridLayout_7.addWidget(self.pushButton_sendMove, 15, 0, 1, 8) - - self.horizontalSlider_J2 = QSlider(self.frame_31) - self.horizontalSlider_J2.setObjectName(u"horizontalSlider_J2") - self.horizontalSlider_J2.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J2, 6, 2, 1, 4) - - self.horizontalSlider_J5 = QSlider(self.frame_31) - self.horizontalSlider_J5.setObjectName(u"horizontalSlider_J5") - self.horizontalSlider_J5.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J5, 12, 2, 1, 4) - - self.label_j1_max = QLabel(self.frame_31) - self.label_j1_max.setObjectName(u"label_j1_max") - - self.gridLayout_7.addWidget(self.label_j1_max, 3, 5, 1, 1) - - self.label_j3 = QLabel(self.frame_31) - self.label_j3.setObjectName(u"label_j3") - - self.gridLayout_7.addWidget(self.label_j3, 7, 4, 1, 1) - - self.pushButton_j5_sub = QPushButton(self.frame_31) - self.pushButton_j5_sub.setObjectName(u"pushButton_j5_sub") - self.pushButton_j5_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j5_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j5_sub, 12, 1, 1, 1) - - self.label_j6_max = QLabel(self.frame_31) - self.label_j6_max.setObjectName(u"label_j6_max") - - self.gridLayout_7.addWidget(self.label_j6_max, 13, 5, 1, 1) - - self.label_j5 = QLabel(self.frame_31) - self.label_j5.setObjectName(u"label_j5") - - self.gridLayout_7.addWidget(self.label_j5, 11, 4, 1, 1) - - self.label_35 = QLabel(self.frame_31) - self.label_35.setObjectName(u"label_35") - self.label_35.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - - self.gridLayout_7.addWidget(self.label_35, 14, 0, 1, 1) - - self.lineEdit_j1 = QLineEdit(self.frame_31) - self.lineEdit_j1.setObjectName(u"lineEdit_j1") - - self.gridLayout_7.addWidget(self.lineEdit_j1, 4, 7, 1, 1) - - self.label_j2_max = QLabel(self.frame_31) - self.label_j2_max.setObjectName(u"label_j2_max") - - self.gridLayout_7.addWidget(self.label_j2_max, 5, 5, 1, 1) - - self.label_32 = QLabel(self.frame_31) - self.label_32.setObjectName(u"label_32") - self.label_32.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - - self.gridLayout_7.addWidget(self.label_32, 8, 0, 1, 1) - - self.pushButton_j4_add = QPushButton(self.frame_31) - self.pushButton_j4_add.setObjectName(u"pushButton_j4_add") - self.pushButton_j4_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j4_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j4_add, 10, 6, 1, 1) - - self.label_j6 = QLabel(self.frame_31) - self.label_j6.setObjectName(u"label_j6") - - self.gridLayout_7.addWidget(self.label_j6, 13, 4, 1, 1) - - self.label_j1_min = QLabel(self.frame_31) - self.label_j1_min.setObjectName(u"label_j1_min") - - self.gridLayout_7.addWidget(self.label_j1_min, 3, 2, 1, 1) - - self.label_j4 = QLabel(self.frame_31) - self.label_j4.setObjectName(u"label_j4") - - self.gridLayout_7.addWidget(self.label_j4, 9, 4, 1, 1) - - self.pushButton_j2_sub = QPushButton(self.frame_31) - self.pushButton_j2_sub.setObjectName(u"pushButton_j2_sub") - self.pushButton_j2_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j2_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j2_sub, 6, 1, 1, 1) - - self.label_j2 = QLabel(self.frame_31) - self.label_j2.setObjectName(u"label_j2") - - self.gridLayout_7.addWidget(self.label_j2, 5, 4, 1, 1) - - self.label_31 = QLabel(self.frame_31) - self.label_31.setObjectName(u"label_31") - self.label_31.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - - self.gridLayout_7.addWidget(self.label_31, 6, 0, 1, 1) - - self.label_manual_adjust_accuracy = QLabel(self.frame_31) - self.label_manual_adjust_accuracy.setObjectName(u"label_manual_adjust_accuracy") - - self.gridLayout_7.addWidget(self.label_manual_adjust_accuracy, 0, 2, 1, 1) - - self.label_j4_max = QLabel(self.frame_31) - self.label_j4_max.setObjectName(u"label_j4_max") - - self.gridLayout_7.addWidget(self.label_j4_max, 9, 5, 1, 1) - - self.label_33 = QLabel(self.frame_31) - self.label_33.setObjectName(u"label_33") - self.label_33.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - - self.gridLayout_7.addWidget(self.label_33, 10, 0, 1, 1) - - self.horizontalSlider_J6 = QSlider(self.frame_31) - self.horizontalSlider_J6.setObjectName(u"horizontalSlider_J6") - self.horizontalSlider_J6.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J6, 14, 2, 1, 4) - - self.lineEdit_manual_adjust_accuracy = QLineEdit(self.frame_31) - self.lineEdit_manual_adjust_accuracy.setObjectName(u"lineEdit_manual_adjust_accuracy") - - self.gridLayout_7.addWidget(self.lineEdit_manual_adjust_accuracy, 0, 3, 1, 1) - - self.gridLayout_7.setColumnStretch(0, 1) - self.gridLayout_7.setColumnStretch(1, 1) - self.gridLayout_7.setColumnStretch(2, 1) - self.gridLayout_7.setColumnStretch(3, 6) - self.gridLayout_7.setColumnStretch(4, 1) - self.gridLayout_7.setColumnStretch(5, 1) - self.gridLayout_7.setColumnStretch(6, 1) - self.gridLayout_7.setColumnStretch(7, 2) - - self.horizontalLayout_17.addWidget(self.frame_31) - - - self.verticalLayout_19.addWidget(self.frame_30) - - self.stackedWidget_view.addWidget(self.page_2) - self.page_8 = QWidget() - self.page_8.setObjectName(u"page_8") - self.verticalLayout_22 = QVBoxLayout(self.page_8) - self.verticalLayout_22.setSpacing(0) - self.verticalLayout_22.setObjectName(u"verticalLayout_22") - self.verticalLayout_22.setContentsMargins(0, 0, 0, 0) - self.frame_16 = QFrame(self.page_8) - self.frame_16.setObjectName(u"frame_16") - self.frame_16.setStyleSheet(u"color: rgb(255, 255, 255);") - self.frame_16.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_16.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_23 = QVBoxLayout(self.frame_16) - self.verticalLayout_23.setObjectName(u"verticalLayout_23") - self.pushButton_savePosition = QPushButton(self.frame_16) - self.pushButton_savePosition.setObjectName(u"pushButton_savePosition") - self.pushButton_savePosition.setStyleSheet(u"color: rgb(255, 255, 255);\n" -"background-color: rgb(0, 85, 0);") - - self.verticalLayout_23.addWidget(self.pushButton_savePosition) - - self.label_table_line_title = QLabel(self.frame_16) - self.label_table_line_title.setObjectName(u"label_table_line_title") - self.label_table_line_title.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.verticalLayout_23.addWidget(self.label_table_line_title) - - self.tableWidget_lines = QTableWidget(self.frame_16) - self.tableWidget_lines.setObjectName(u"tableWidget_lines") - self.tableWidget_lines.setStyleSheet(u" QHeaderView::section {\n" -" background-color: #2C2C2C; /* \u8868\u5934\u80cc\u666f\u8272 */\n" -" color: white; /* \u8868\u5934\u5b57\u4f53\u989c\u8272 */\n" -" font-size: 14px; /* \u5b57\u4f53\u5927\u5c0f */\n" -" font-weight: bold; /* \u5b57\u4f53\u52a0\u7c97 */\n" -" border: 1px solid black; /* \u8fb9\u6846\u989c\u8272 */\n" -" padding: 4px; /* \u5185\u8fb9\u8ddd */\n" -" }") - - self.verticalLayout_23.addWidget(self.tableWidget_lines) - - self.label_table_line_position_title = QLabel(self.frame_16) - self.label_table_line_position_title.setObjectName(u"label_table_line_position_title") - self.label_table_line_position_title.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.verticalLayout_23.addWidget(self.label_table_line_position_title) - - self.tableWidget_line_positions = QTableWidget(self.frame_16) - self.tableWidget_line_positions.setObjectName(u"tableWidget_line_positions") - self.tableWidget_line_positions.setStyleSheet(u" QHeaderView::section {\n" -" background-color: #2C2C2C; /* \u8868\u5934\u80cc\u666f\u8272 */\n" -" color: white; /* \u8868\u5934\u5b57\u4f53\u989c\u8272 */\n" -" font-size: 14px; /* \u5b57\u4f53\u5927\u5c0f */\n" -" font-weight: bold; /* \u5b57\u4f53\u52a0\u7c97 */\n" -" border: 1px solid black; /* \u8fb9\u6846\u989c\u8272 */\n" -" padding: 4px; /* \u5185\u8fb9\u8ddd */\n" -" }") - - self.verticalLayout_23.addWidget(self.tableWidget_line_positions) - - - self.verticalLayout_22.addWidget(self.frame_16) - - self.stackedWidget_view.addWidget(self.page_8) - - self.verticalLayout_8.addWidget(self.stackedWidget_view) - - - self.horizontalLayout_4.addWidget(self.frame_view) - - self.frame_right = QFrame(self.frame_main) - self.frame_right.setObjectName(u"frame_right") - sizePolicy1.setHeightForWidth(self.frame_right.sizePolicy().hasHeightForWidth()) - self.frame_right.setSizePolicy(sizePolicy1) - self.frame_right.setStyleSheet(u"background-color: rgb(16, 21, 49);\n" -"border: 1px solid #122041;") - self.frame_right.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_right.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_10 = QVBoxLayout(self.frame_right) - self.verticalLayout_10.setSpacing(0) - self.verticalLayout_10.setObjectName(u"verticalLayout_10") - self.verticalLayout_10.setContentsMargins(0, 0, 0, 0) - self.frame_19 = QFrame(self.frame_right) - self.frame_19.setObjectName(u"frame_19") - self.frame_19.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_19.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_10 = QHBoxLayout(self.frame_19) - self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") - self.label_3 = QLabel(self.frame_19) - self.label_3.setObjectName(u"label_3") - self.label_3.setStyleSheet(u"border-image: url(:/main/Image/calendar.svg);") - self.label_3.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_10.addWidget(self.label_3) - - self.label_date = QLabel(self.frame_19) - self.label_date.setObjectName(u"label_date") - self.label_date.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_date.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_10.addWidget(self.label_date) - - self.label_time = QLabel(self.frame_19) - self.label_time.setObjectName(u"label_time") - self.label_time.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - - self.horizontalLayout_10.addWidget(self.label_time) - - self.horizontalLayout_10.setStretch(0, 1) - self.horizontalLayout_10.setStretch(1, 5) - self.horizontalLayout_10.setStretch(2, 5) - - self.verticalLayout_10.addWidget(self.frame_19) - - self.frame_20 = QFrame(self.frame_right) - self.frame_20.setObjectName(u"frame_20") - self.frame_20.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_20.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_11 = QVBoxLayout(self.frame_20) - self.verticalLayout_11.setObjectName(u"verticalLayout_11") - self.comboBox_lineIndex = QComboBox(self.frame_20) - self.comboBox_lineIndex.addItem("") - self.comboBox_lineIndex.addItem("") - self.comboBox_lineIndex.setObjectName(u"comboBox_lineIndex") - self.comboBox_lineIndex.setStyleSheet(u"QComboBox {\n" -" border-radius: 10px;\n" -" padding: 5px 5px 5px 5px;\n" -" background-color: #2c2c2c;\n" -" color: white;\n" -" border: 1px solid #474747;\n" -" min-width: 80px;\n" -"}\n" -"\n" -"\n" -"QComboBox::drop-down {\n" -" width: 0px;\n" -" border: none;\n" -"\n" -"}\n" -"\n" -"QComboBox::down-arrow {\n" -" image: none;\n" -"}\n" -"\n" -"QComboBox QAbstractItemView {\n" -" border-bottom-right-radius: 10px;\n" -" border-bottom-left-radius: 10px;\n" -" background-color: #D3D3D3;\n" -" border: 1px solid gray;\n" -" padding: 4px 4px 4px 4px;\n" -" outline: none;\n" -"}") - - self.verticalLayout_11.addWidget(self.comboBox_lineIndex) - - self.stackedWidget_num = QStackedWidget(self.frame_20) - self.stackedWidget_num.setObjectName(u"stackedWidget_num") - self.stackedWidget_num.setStyleSheet(u"border:none;") - self.page_5 = QWidget() - self.page_5.setObjectName(u"page_5") - self.horizontalLayout_18 = QHBoxLayout(self.page_5) - self.horizontalLayout_18.setSpacing(0) - self.horizontalLayout_18.setObjectName(u"horizontalLayout_18") - self.horizontalLayout_18.setContentsMargins(0, 0, 0, 0) - self.frame_23 = QFrame(self.page_5) - self.frame_23.setObjectName(u"frame_23") - self.frame_23.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_23.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout = QGridLayout(self.frame_23) - self.gridLayout.setObjectName(u"gridLayout") - self.pushButton_num1 = QPushButton(self.frame_23) - self.pushButton_num1.setObjectName(u"pushButton_num1") - sizePolicy1.setHeightForWidth(self.pushButton_num1.sizePolicy().hasHeightForWidth()) - self.pushButton_num1.setSizePolicy(sizePolicy1) - self.pushButton_num1.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num1, 0, 0, 1, 1) - - self.pushButton_num2 = QPushButton(self.frame_23) - self.pushButton_num2.setObjectName(u"pushButton_num2") - sizePolicy1.setHeightForWidth(self.pushButton_num2.sizePolicy().hasHeightForWidth()) - self.pushButton_num2.setSizePolicy(sizePolicy1) - self.pushButton_num2.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num2, 0, 1, 1, 1) - - self.pushButton_num3 = QPushButton(self.frame_23) - self.pushButton_num3.setObjectName(u"pushButton_num3") - sizePolicy1.setHeightForWidth(self.pushButton_num3.sizePolicy().hasHeightForWidth()) - self.pushButton_num3.setSizePolicy(sizePolicy1) - self.pushButton_num3.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num3, 0, 2, 1, 1) - - self.pushButton_num4 = QPushButton(self.frame_23) - self.pushButton_num4.setObjectName(u"pushButton_num4") - sizePolicy1.setHeightForWidth(self.pushButton_num4.sizePolicy().hasHeightForWidth()) - self.pushButton_num4.setSizePolicy(sizePolicy1) - self.pushButton_num4.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num4, 1, 0, 1, 1) - - self.pushButton_num5 = QPushButton(self.frame_23) - self.pushButton_num5.setObjectName(u"pushButton_num5") - sizePolicy1.setHeightForWidth(self.pushButton_num5.sizePolicy().hasHeightForWidth()) - self.pushButton_num5.setSizePolicy(sizePolicy1) - self.pushButton_num5.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num5, 1, 1, 1, 1) - - self.pushButton_num6 = QPushButton(self.frame_23) - self.pushButton_num6.setObjectName(u"pushButton_num6") - sizePolicy1.setHeightForWidth(self.pushButton_num6.sizePolicy().hasHeightForWidth()) - self.pushButton_num6.setSizePolicy(sizePolicy1) - self.pushButton_num6.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num6, 1, 2, 1, 1) - - self.lineEdit_num = QLineEdit(self.frame_23) - self.lineEdit_num.setObjectName(u"lineEdit_num") - sizePolicy1.setHeightForWidth(self.lineEdit_num.sizePolicy().hasHeightForWidth()) - self.lineEdit_num.setSizePolicy(sizePolicy1) - self.lineEdit_num.setStyleSheet(u"color: rgb(255, 255, 255);\n" -"border: 1px solid #dcdfe6;\n" -"font: 8pt \"Microsoft YaHei UI\";") - - self.gridLayout.addWidget(self.lineEdit_num, 2, 0, 1, 1) - - self.pushButton_num_confirm = QPushButton(self.frame_23) - self.pushButton_num_confirm.setObjectName(u"pushButton_num_confirm") - sizePolicy1.setHeightForWidth(self.pushButton_num_confirm.sizePolicy().hasHeightForWidth()) - self.pushButton_num_confirm.setSizePolicy(sizePolicy1) - self.pushButton_num_confirm.setStyleSheet(u"\n" -"*{background-color: #101F3F;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"color:#ffffff\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - - self.gridLayout.addWidget(self.pushButton_num_confirm, 2, 1, 1, 2) - - self.gridLayout.setColumnStretch(0, 1) - self.gridLayout.setColumnStretch(1, 1) - self.gridLayout.setColumnStretch(2, 1) - - self.horizontalLayout_18.addWidget(self.frame_23) - - self.stackedWidget_num.addWidget(self.page_5) - self.page_6 = QWidget() - self.page_6.setObjectName(u"page_6") - self.verticalLayout_20 = QVBoxLayout(self.page_6) - self.verticalLayout_20.setSpacing(0) - self.verticalLayout_20.setObjectName(u"verticalLayout_20") - self.verticalLayout_20.setContentsMargins(0, 0, 0, 0) - self.frame_32 = QFrame(self.page_6) - self.frame_32.setObjectName(u"frame_32") - self.frame_32.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_32.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_21 = QVBoxLayout(self.frame_32) - self.verticalLayout_21.setObjectName(u"verticalLayout_21") - self.pushButton_AddNum = QPushButton(self.frame_32) - self.pushButton_AddNum.setObjectName(u"pushButton_AddNum") - sizePolicy5.setHeightForWidth(self.pushButton_AddNum.sizePolicy().hasHeightForWidth()) - self.pushButton_AddNum.setSizePolicy(sizePolicy5) - self.pushButton_AddNum.setStyleSheet(u"*{\n" -"background-color: #499C54;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - self.pushButton_AddNum.setIcon(icon6) - - self.verticalLayout_21.addWidget(self.pushButton_AddNum) - - self.pushButton_SubNum = QPushButton(self.frame_32) - self.pushButton_SubNum.setObjectName(u"pushButton_SubNum") - sizePolicy5.setHeightForWidth(self.pushButton_SubNum.sizePolicy().hasHeightForWidth()) - self.pushButton_SubNum.setSizePolicy(sizePolicy5) - self.pushButton_SubNum.setStyleSheet(u"*{\n" -"background-color: rgb(255, 0, 0);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - self.pushButton_SubNum.setIcon(icon7) - - self.verticalLayout_21.addWidget(self.pushButton_SubNum) - - - self.verticalLayout_20.addWidget(self.frame_32) - - self.stackedWidget_num.addWidget(self.page_6) - - self.verticalLayout_11.addWidget(self.stackedWidget_num) - - - self.verticalLayout_10.addWidget(self.frame_20) - - self.frame_21 = QFrame(self.frame_right) - self.frame_21.setObjectName(u"frame_21") - sizePolicy4.setHeightForWidth(self.frame_21.sizePolicy().hasHeightForWidth()) - self.frame_21.setSizePolicy(sizePolicy4) - self.frame_21.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_21.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_2 = QGridLayout(self.frame_21) - self.gridLayout_2.setObjectName(u"gridLayout_2") - self.pushButton_reset = QPushButton(self.frame_21) - self.pushButton_reset.setObjectName(u"pushButton_reset") - sizePolicy5.setHeightForWidth(self.pushButton_reset.sizePolicy().hasHeightForWidth()) - self.pushButton_reset.setSizePolicy(sizePolicy5) - self.pushButton_reset.setStyleSheet(u"*{\n" -"background-color: #FFFFBF;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #FFF000;\n" -"}\n" -"") - icon8 = QIcon(QIcon.fromTheme(u"media-optical")) - self.pushButton_reset.setIcon(icon8) - - self.gridLayout_2.addWidget(self.pushButton_reset, 2, 1, 1, 2) - - self.pushButton_emergency = QPushButton(self.frame_21) - self.pushButton_emergency.setObjectName(u"pushButton_emergency") - sizePolicy5.setHeightForWidth(self.pushButton_emergency.sizePolicy().hasHeightForWidth()) - self.pushButton_emergency.setSizePolicy(sizePolicy5) - self.pushButton_emergency.setStyleSheet(u"*{\n" -"background-color: #FFF000;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.WindowClose)) - self.pushButton_emergency.setIcon(icon9) - - self.gridLayout_2.addWidget(self.pushButton_emergency, 3, 0, 1, 1) - - self.pushButton_stopFeed = QPushButton(self.frame_21) - self.pushButton_stopFeed.setObjectName(u"pushButton_stopFeed") - sizePolicy5.setHeightForWidth(self.pushButton_stopFeed.sizePolicy().hasHeightForWidth()) - self.pushButton_stopFeed.setSizePolicy(sizePolicy5) - self.pushButton_stopFeed.setStyleSheet(u"*{\n" -"background-color: #FF0000;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon10 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemShutdown)) - self.pushButton_stopFeed.setIcon(icon10) - - self.gridLayout_2.addWidget(self.pushButton_stopFeed, 2, 0, 1, 1) - - self.pushButton_pauseFeed = QPushButton(self.frame_21) - self.pushButton_pauseFeed.setObjectName(u"pushButton_pauseFeed") - sizePolicy5.setHeightForWidth(self.pushButton_pauseFeed.sizePolicy().hasHeightForWidth()) - self.pushButton_pauseFeed.setSizePolicy(sizePolicy5) - self.pushButton_pauseFeed.setStyleSheet(u"*{\n" -"background-color: #2196F3;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon11 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) - self.pushButton_pauseFeed.setIcon(icon11) - - self.gridLayout_2.addWidget(self.pushButton_pauseFeed, 1, 1, 1, 2) - - self.pushButton_startFeed = QPushButton(self.frame_21) - self.pushButton_startFeed.setObjectName(u"pushButton_startFeed") - sizePolicy5.setHeightForWidth(self.pushButton_startFeed.sizePolicy().hasHeightForWidth()) - self.pushButton_startFeed.setSizePolicy(sizePolicy5) - self.pushButton_startFeed.setStyleSheet(u"*{\n" -"background-color: #499C54;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon12 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackStart)) - self.pushButton_startFeed.setIcon(icon12) - - self.gridLayout_2.addWidget(self.pushButton_startFeed, 1, 0, 1, 1) - - self.pushButton_clearAlarm = QPushButton(self.frame_21) - self.pushButton_clearAlarm.setObjectName(u"pushButton_clearAlarm") - sizePolicy5.setHeightForWidth(self.pushButton_clearAlarm.sizePolicy().hasHeightForWidth()) - self.pushButton_clearAlarm.setSizePolicy(sizePolicy5) - self.pushButton_clearAlarm.setStyleSheet(u"*{\n" -"background-color: #1CB2B1;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color:#1cb052;\n" -"}\n" -"\n" -"") - icon13 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemReboot)) - self.pushButton_clearAlarm.setIcon(icon13) - - self.gridLayout_2.addWidget(self.pushButton_clearAlarm, 3, 1, 1, 2) - - self.pushButton_onekeyfeed = QPushButton(self.frame_21) - self.pushButton_onekeyfeed.setObjectName(u"pushButton_onekeyfeed") - sizePolicy5.setHeightForWidth(self.pushButton_onekeyfeed.sizePolicy().hasHeightForWidth()) - self.pushButton_onekeyfeed.setSizePolicy(sizePolicy5) - self.pushButton_onekeyfeed.setStyleSheet(u"*{\n" -"background-color: rgb(0, 170, 0);\n" -"\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color:#1cb052;\n" -"}\n" -"\n" -"") - icon14 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.DocumentSend)) - self.pushButton_onekeyfeed.setIcon(icon14) - self.pushButton_onekeyfeed.setIconSize(QSize(20, 20)) - - self.gridLayout_2.addWidget(self.pushButton_onekeyfeed, 0, 0, 1, 2) - - self.gridLayout_2.setRowStretch(0, 2) - self.gridLayout_2.setRowStretch(1, 2) - self.gridLayout_2.setRowStretch(2, 2) - self.gridLayout_2.setRowStretch(3, 2) - self.gridLayout_2.setColumnStretch(0, 1) - self.gridLayout_2.setColumnStretch(1, 1) - self.gridLayout_2.setRowMinimumHeight(0, 2) - self.gridLayout_2.setRowMinimumHeight(1, 2) - self.gridLayout_2.setRowMinimumHeight(2, 2) - - self.verticalLayout_10.addWidget(self.frame_21) - - self.frame_22 = QFrame(self.frame_right) - self.frame_22.setObjectName(u"frame_22") - self.frame_22.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_22.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_12 = QVBoxLayout(self.frame_22) - self.verticalLayout_12.setObjectName(u"verticalLayout_12") - self.horizontalSlider_feedingNum = QSlider(self.frame_22) - self.horizontalSlider_feedingNum.setObjectName(u"horizontalSlider_feedingNum") - self.horizontalSlider_feedingNum.setStyleSheet(u"/**QSlider\n" -"{\n" -" background-color: #FFFFFF; \n" -" border-style: outset; \n" -" border-radius:5px; \n" -"}\n" -" \n" -"QSlider::groove:horizontal\n" -"{\n" -" height: 10px;\n" -" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);\n" -" margin: 10px 0\n" -"}\n" -" \n" -"QSlider::handle:horizontal \n" -"{\n" -" background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green);\n" -" width: 10px;\n" -" height: 16px;\n" -" margin: -5px 3px -5px 6px;\n" -" border-radius:5px; \n" -" border: 3px solid #007900;\n" -"}\n" -"**/\n" -"/*\u7b2c\u4e00\u79cd\u98ce\u683c*/\n" -"/**\n" -" groove\u8868\u793a\u69fd\u7684\u90e8\u5206\n" -" handle\u8868\u793a\u6ed1\u5757\n" -" add-page\u8868\u793a\u672a\u6ed1\u8fc7\u7684\u69fd\u90e8\u5206\n" -" sub-page\u8868\u793a\u5df2\u6ed1\u8fc7\u7684\u69fd\u90e8\u5206\n" -" \u5728\u8f85\u52a9\u63a7\u5236\u5668\u540e\u9762\u53ef\u4ee5\u8bbe\u7f6e\u72b6\u6001\uff0chorizontal\u5c31\u662fQSS\u751f\u6548\u7684QSlider\u7684\u72b6\u6001\n" -"*" - "*/\n" -"\n" -"QSlider::groove:horizontal\n" -"{\n" -" height:10px;\n" -" border-radius: 5px;\n" -" background-color:rgb(219,219,219);\n" -"}\n" -"\n" -"\n" -"QSlider::handle:horizontal \n" -"{\n" -" background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green);\n" -" width: 5px;\n" -" height: 5px;\n" -" margin: -5px 3px -5px 6px;\n" -" border-radius:5px; \n" -" border: 3px solid #007900;\n" -"}\n" -"\n" -"QSlider::add-page:horizontal\n" -"{\n" -" border-radius: 5px;\n" -" background-color: rgb(219,219,219);\n" -"}\n" -" \n" -"QSlider::sub-page:horizontal\n" -"{\n" -" border-radius: 5px;\n" -" background-color: rgb(80,166,234);\n" -"}\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"") - self.horizontalSlider_feedingNum.setOrientation(Qt.Orientation.Horizontal) - - self.verticalLayout_12.addWidget(self.horizontalSlider_feedingNum) - - self.frame_7 = QFrame(self.frame_22) - self.frame_7.setObjectName(u"frame_7") - self.frame_7.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_7.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_11 = QHBoxLayout(self.frame_7) - self.horizontalLayout_11.setObjectName(u"horizontalLayout_11") - self.label_4 = QLabel(self.frame_7) - self.label_4.setObjectName(u"label_4") - self.label_4.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_4.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.horizontalLayout_11.addWidget(self.label_4) - - self.label_maxNum = QLabel(self.frame_7) - self.label_maxNum.setObjectName(u"label_maxNum") - self.label_maxNum.setStyleSheet(u"color: rgb(255, 0, 0);\n" -"font: 36pt \"Microsoft YaHei UI\";") - self.label_maxNum.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_11.addWidget(self.label_maxNum) - - self.horizontalLayout_11.setStretch(0, 1) - self.horizontalLayout_11.setStretch(1, 5) - - self.verticalLayout_12.addWidget(self.frame_7) - - self.frame_24 = QFrame(self.frame_22) - self.frame_24.setObjectName(u"frame_24") - self.frame_24.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_24.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_12 = QHBoxLayout(self.frame_24) - self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") - self.label_6 = QLabel(self.frame_24) - self.label_6.setObjectName(u"label_6") - self.label_6.setStyleSheet(u"color: rgb(255, 255, 255);") - self.label_6.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - - self.horizontalLayout_12.addWidget(self.label_6) - - self.label_remain_num = QLabel(self.frame_24) - self.label_remain_num.setObjectName(u"label_remain_num") - self.label_remain_num.setStyleSheet(u"color: rgb(0, 255, 0);\n" -"font: 36pt \"Microsoft YaHei UI\";") - self.label_remain_num.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_12.addWidget(self.label_remain_num) - - self.horizontalLayout_12.setStretch(0, 1) - self.horizontalLayout_12.setStretch(1, 5) - - self.verticalLayout_12.addWidget(self.frame_24) - - - self.verticalLayout_10.addWidget(self.frame_22) - - self.verticalLayout_10.setStretch(0, 1) - self.verticalLayout_10.setStretch(1, 6) - self.verticalLayout_10.setStretch(2, 6) - self.verticalLayout_10.setStretch(3, 1) - - self.horizontalLayout_4.addWidget(self.frame_right) - - self.horizontalLayout_4.setStretch(0, 45) - self.horizontalLayout_4.setStretch(1, 137) - self.horizontalLayout_4.setStretch(2, 59) - - self.verticalLayout.addWidget(self.frame_main) - - self.verticalLayout.setStretch(0, 1) - self.verticalLayout.setStretch(1, 11) - MainWindow.setCentralWidget(self.centralwidget) - - self.retranslateUi(MainWindow) - - self.stackedWidget_view.setCurrentIndex(3) - self.tabWidget.setCurrentIndex(0) - self.stackedWidget_num.setCurrentIndex(0) - - - QMetaObject.connectSlotsByName(MainWindow) - # setupUi - - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u7231\u6765\u7c73\u4e1a", None)) - self.label.setText("") - self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u7231\u6765\u7c73\u4e1a\u7801\u579b\u7cfb\u7edf", None)) - self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u6295\u6599\u4e2d\u5fc3", None)) - self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"\u634f\u5408\u4e2d\u5fc3", None)) - self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"\u6210\u54c1", None)) - self.pushButton_4.setText(QCoreApplication.translate("MainWindow", u"\u63a7\u5236\u4e2d\u5fc3", None)) - self.pushButton_5.setText(QCoreApplication.translate("MainWindow", u"\u767b\u5f55", None)) - self.pushButton_exit.setText(QCoreApplication.translate("MainWindow", u"\u9000\u51fa", None)) - self.pushButton_sysseting.setText(QCoreApplication.translate("MainWindow", u"\u7cfb\u7edf\u8bbe\u7f6e", None)) - self.pushButton_leftmenu_produce.setText(QCoreApplication.translate("MainWindow", u"\u751f\u4ea7\u754c\u9762", None)) - self.pushButton_leftmenu_robot_seting.setText(QCoreApplication.translate("MainWindow", u"\u673a\u68b0\u81c2\u57fa\u7840\u8bbe\u7f6e", None)) - self.pushButton_leftmenu_IO.setText(QCoreApplication.translate("MainWindow", u"IO\u9762\u677f", None)) - self.pushButton_leftmenu_position.setText(QCoreApplication.translate("MainWindow", u"\u4f4d\u7f6e\u8bbe\u5b9a", None)) - self.pushButton_leftmenu_baseSeting.setText(QCoreApplication.translate("MainWindow", u"\u57fa\u7840\u8bbe\u7f6e", None)) - self.pushButton_leftmenu_posDebug.setText(QCoreApplication.translate("MainWindow", u"\u70b9\u4f4d\u8c03\u8bd5", None)) - self.pushButton_11.setText(QCoreApplication.translate("MainWindow", u"\u5176\u4ed6\u8bbe\u7f6e", None)) - self.pushButton_sign_go.setText("") - self.label_sign_go.setText(QCoreApplication.translate("MainWindow", u"\u53d6\u6599\u4e2d...", None)) - self.pushButton_sign_photo.setText("") - self.label_sign_photo.setText(QCoreApplication.translate("MainWindow", u"\u62cd\u7167\u4e2d...", None)) - self.pushButton_sign_take.setText("") - self.label_sign_take.setText(QCoreApplication.translate("MainWindow", u"\u6293\u6599\u4e2d...", None)) - self.pushButton_sign_feed.setText("") - self.label_sign_feed.setText(QCoreApplication.translate("MainWindow", u"\u6295\u6599\u4e2d...", None)) - self.label_showDetection.setText("") - self.label_move_sign.setText(QCoreApplication.translate("MainWindow", u"\u6b63\u5728\u79fb\u52a8", None)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QCoreApplication.translate("MainWindow", u"\u65e5\u5fd7", None)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("MainWindow", u"\u62a5\u8b66", None)) - self.label_53.setText(QCoreApplication.translate("MainWindow", u"\u8fde\u63a5\u72b6\u6001\uff1a", None)) - self.label_connect_status.setText("") - self.label_8.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u6a21\u5f0f\uff1a", None)) - self.label_status_model.setText(QCoreApplication.translate("MainWindow", u"\u81ea\u52a8", None)) - self.label_10.setText(QCoreApplication.translate("MainWindow", u"\u8fdc\u7a0b\u6307\u4ee4\u6570\u91cf\uff1a", None)) - self.label_status_remoteCmdLen.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.label_13.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u901f\u5ea6\uff1a", None)) - self.label_status_speed.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.label_11.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u5de5\u5177\u53f7\uff1a", None)) - self.label_status_toolIndex.setText(QCoreApplication.translate("MainWindow", u"1", None)) - self.label_12.setText(QCoreApplication.translate("MainWindow", u"\u62a5\u8b66\u4ee3\u7801\uff1a", None)) - self.label_status_alarmcode.setText(QCoreApplication.translate("MainWindow", u"200", None)) - self.label_5.setText(QCoreApplication.translate("MainWindow", u"Y1", None)) - self.label_57.setText(QCoreApplication.translate("MainWindow", u"2", None)) - self.label_58.setText(QCoreApplication.translate("MainWindow", u"3", None)) - self.label_59.setText(QCoreApplication.translate("MainWindow", u"4", None)) - self.label_7.setText(QCoreApplication.translate("MainWindow", u"5", None)) - self.label_61.setText(QCoreApplication.translate("MainWindow", u"6", None)) - self.label_62.setText(QCoreApplication.translate("MainWindow", u"7", None)) - self.label_60.setText(QCoreApplication.translate("MainWindow", u"8", None)) - self.label_55.setText(QCoreApplication.translate("MainWindow", u"9", None)) - self.label_65.setText(QCoreApplication.translate("MainWindow", u"10", None)) - self.label_64.setText(QCoreApplication.translate("MainWindow", u"11", None)) - self.label_63.setText(QCoreApplication.translate("MainWindow", u"12", None)) - self.label_56.setText(QCoreApplication.translate("MainWindow", u"13", None)) - self.label_68.setText(QCoreApplication.translate("MainWindow", u"14", None)) - self.label_67.setText(QCoreApplication.translate("MainWindow", u"15", None)) - self.label_66.setText(QCoreApplication.translate("MainWindow", u"16", None)) - self.label_69.setText(QCoreApplication.translate("MainWindow", u"17", None)) - self.label_81.setText(QCoreApplication.translate("MainWindow", u"18", None)) - self.label_82.setText(QCoreApplication.translate("MainWindow", u"19", None)) - self.label_78.setText(QCoreApplication.translate("MainWindow", u"20", None)) - self.label_72.setText(QCoreApplication.translate("MainWindow", u"21", None)) - self.label_84.setText(QCoreApplication.translate("MainWindow", u"22", None)) - self.label_77.setText(QCoreApplication.translate("MainWindow", u"23", None)) - self.label_71.setText(QCoreApplication.translate("MainWindow", u"24", None)) - self.label_70.setText(QCoreApplication.translate("MainWindow", u"25", None)) - self.label_80.setText(QCoreApplication.translate("MainWindow", u"26", None)) - self.label_74.setText(QCoreApplication.translate("MainWindow", u"27", None)) - self.label_73.setText(QCoreApplication.translate("MainWindow", u"28", None)) - self.label_75.setText(QCoreApplication.translate("MainWindow", u"29", None)) - self.label_76.setText(QCoreApplication.translate("MainWindow", u"30", None)) - self.label_83.setText(QCoreApplication.translate("MainWindow", u"31", None)) - self.label_79.setText(QCoreApplication.translate("MainWindow", u"32", None)) - self.label_92.setText(QCoreApplication.translate("MainWindow", u"V1:", None)) - self.label_88.setText(QCoreApplication.translate("MainWindow", u"Z1:", None)) - self.label_93.setText(QCoreApplication.translate("MainWindow", u"Y1:", None)) - self.label_95.setText(QCoreApplication.translate("MainWindow", u"U1:", None)) - self.label_90.setText(QCoreApplication.translate("MainWindow", u"X1:", None)) - self.label_91.setText(QCoreApplication.translate("MainWindow", u"W1:", None)) - self.pushButton_get_origin.setText(QCoreApplication.translate("MainWindow", u"\u83b7\u53d6\u539f\u70b9", None)) - self.pushButton_set_origin.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58\u539f\u70b9", None)) - self.pushButton_get_p2.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d2", None)) - self.pushButton_set_p1.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d1", None)) - self.label_16.setText(QCoreApplication.translate("MainWindow", u"X2:", None)) - self.pushButton_set_p4.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d4", None)) - self.label_21.setText(QCoreApplication.translate("MainWindow", u"Y3:", None)) - self.label_41.setText(QCoreApplication.translate("MainWindow", u"W2:", None)) - self.label_44.setText(QCoreApplication.translate("MainWindow", u"U3:", None)) - self.pushButton_get_p4.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d4", None)) - self.label_50.setText(QCoreApplication.translate("MainWindow", u"W5:", None)) - self.label_25.setText(QCoreApplication.translate("MainWindow", u"Z5:", None)) - self.label_40.setText(QCoreApplication.translate("MainWindow", u"V2:", None)) - self.label_43.setText(QCoreApplication.translate("MainWindow", u"W3:", None)) - self.label_37.setText(QCoreApplication.translate("MainWindow", u"W1:", None)) - self.pushButton_set_p5.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d5", None)) - self.pushButton_set_p3.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d3", None)) - self.label_26.setText(QCoreApplication.translate("MainWindow", u"Y5:", None)) - self.label_19.setText(QCoreApplication.translate("MainWindow", u"X3:", None)) - self.label_42.setText(QCoreApplication.translate("MainWindow", u"V3:", None)) - self.label_18.setText(QCoreApplication.translate("MainWindow", u"Y2:", None)) - self.label_48.setText(QCoreApplication.translate("MainWindow", u"V5:", None)) - self.label_38.setText(QCoreApplication.translate("MainWindow", u"V1:", None)) - self.pushButton_get_p5.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d5", None)) - self.label_20.setText(QCoreApplication.translate("MainWindow", u"Z3:", None)) - self.label_27.setText(QCoreApplication.translate("MainWindow", u"X5:", None)) - self.label_22.setText(QCoreApplication.translate("MainWindow", u"X4:", None)) - self.label_46.setText(QCoreApplication.translate("MainWindow", u"W4:", None)) - self.label_14.setText(QCoreApplication.translate("MainWindow", u"Y1:", None)) - self.label_15.setText(QCoreApplication.translate("MainWindow", u"Z1:", None)) - self.label_39.setText(QCoreApplication.translate("MainWindow", u"U2:", None)) - self.label_23.setText(QCoreApplication.translate("MainWindow", u"Y4:", None)) - self.label_9.setText(QCoreApplication.translate("MainWindow", u"X1:", None)) - self.label_49.setText(QCoreApplication.translate("MainWindow", u"U5:", None)) - self.label_45.setText(QCoreApplication.translate("MainWindow", u"U4:", None)) - self.pushButton_get_p3.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d3", None)) - self.label_47.setText(QCoreApplication.translate("MainWindow", u"V4:", None)) - self.pushButton_get_p1.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d1", None)) - self.pushButton_set_p2.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d2", None)) - self.label_24.setText(QCoreApplication.translate("MainWindow", u"Z4:", None)) - self.label_36.setText(QCoreApplication.translate("MainWindow", u"U1:", None)) - self.label_17.setText(QCoreApplication.translate("MainWindow", u"Z2:", None)) - self.pushButton_saveSeting.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58\u8bbe\u7f6e", None)) - self.label_51.setText(QCoreApplication.translate("MainWindow", u"\u6293\u53d6\u70b9\u4f4d:", None)) - self.label_54.setText(QCoreApplication.translate("MainWindow", u"\u6447\u6643\u70b9\u4f4d:", None)) - self.label_85.setText(QCoreApplication.translate("MainWindow", u"\u6447\u6643\u5ef6\u65f6\uff1a", None)) - self.label_94.setText(QCoreApplication.translate("MainWindow", u"\u590d\u4f4d\u901f\u5ea6\uff1a", None)) - self.label_28.setText(QCoreApplication.translate("MainWindow", u"\u751f\u4ea7\u901f\u5ea6\uff1a", None)) - self.label_29.setText(QCoreApplication.translate("MainWindow", u"\u8c03\u8bd5\u901f\u5ea6\uff1a", None)) - self.label_87.setText(QCoreApplication.translate("MainWindow", u"\u6293\u53d6\u5ef6\u65f6\uff1a", None)) - self.label_52.setText(QCoreApplication.translate("MainWindow", u"\u629b\u888b\u70b9\u4f4d\uff1a", None)) - self.label_89.setText(QCoreApplication.translate("MainWindow", u"\u5e73\u6ed1\u7cfb\u6570\uff1a", None)) - self.label_86.setText(QCoreApplication.translate("MainWindow", u"\u629b\u888b\u5ef6\u65f6\uff1a", None)) - self.label_96.setText(QCoreApplication.translate("MainWindow", u"\u52a8\u6001\u9ad8\u5ea6\uff1a", None)) - self.pushButton_j3_add.setText("") - self.pushButton_j5_add.setText("") - self.pushButton_j6_sub.setText("") - self.label_34.setText(QCoreApplication.translate("MainWindow", u"J5", None)) - self.pushButton_j6_add.setText("") - self.label_j5_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.pushButton_j2_add.setText("") - self.label_j1.setText("") - self.label_j2_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j5_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_30.setText(QCoreApplication.translate("MainWindow", u"J1", None)) - self.label_j6_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j3_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j3_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.pushButton_j3_sub.setText("") - self.pushButton_j4_sub.setText("") - self.pushButton_j1_add.setText("") - self.label_j4_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.pushButton_j1_sub.setText("") - self.pushButton_sendMove.setText(QCoreApplication.translate("MainWindow", u"\u786e\u5b9a\u79fb\u52a8", None)) - self.label_j1_max.setText(QCoreApplication.translate("MainWindow", u"+10", None)) - self.label_j3.setText("") - self.pushButton_j5_sub.setText("") - self.label_j6_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_j5.setText("") - self.label_35.setText(QCoreApplication.translate("MainWindow", u"J6", None)) - self.label_j2_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_32.setText(QCoreApplication.translate("MainWindow", u"J3", None)) - self.pushButton_j4_add.setText("") - self.label_j6.setText("") - self.label_j1_min.setText(QCoreApplication.translate("MainWindow", u"-10", None)) - self.label_j4.setText("") - self.pushButton_j2_sub.setText("") - self.label_j2.setText("") - self.label_31.setText(QCoreApplication.translate("MainWindow", u"J2", None)) - self.label_manual_adjust_accuracy.setText(QCoreApplication.translate("MainWindow", u"\u8c03\u6574\u95f4\u9694\uff1a", None)) - self.label_j4_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_33.setText(QCoreApplication.translate("MainWindow", u"J4", None)) - self.lineEdit_manual_adjust_accuracy.setText(QCoreApplication.translate("MainWindow", u"1", None)) - self.lineEdit_manual_adjust_accuracy.setPlaceholderText(QCoreApplication.translate("MainWindow", u"0.001-20", None)) - self.pushButton_savePosition.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58", None)) - self.label_table_line_title.setText(QCoreApplication.translate("MainWindow", u"\u751f\u4ea7\u7ebf", None)) - self.label_table_line_position_title.setText(QCoreApplication.translate("MainWindow", u"TextLabel", None)) - self.label_3.setText("") - self.label_date.setText(QCoreApplication.translate("MainWindow", u"2024-08-01", None)) - self.label_time.setText(QCoreApplication.translate("MainWindow", u"08:00:00", None)) - self.comboBox_lineIndex.setItemText(0, QCoreApplication.translate("MainWindow", u"1\u53f7\u7ebf", None)) - self.comboBox_lineIndex.setItemText(1, QCoreApplication.translate("MainWindow", u"\u65b0\u5efa\u7ebf", None)) - - self.comboBox_lineIndex.setCurrentText(QCoreApplication.translate("MainWindow", u"1\u53f7\u7ebf", None)) - self.pushButton_num1.setText(QCoreApplication.translate("MainWindow", u"10", None)) - self.pushButton_num2.setText(QCoreApplication.translate("MainWindow", u"20", None)) - self.pushButton_num3.setText(QCoreApplication.translate("MainWindow", u"30", None)) - self.pushButton_num4.setText(QCoreApplication.translate("MainWindow", u"40", None)) - self.pushButton_num5.setText(QCoreApplication.translate("MainWindow", u"50", None)) - self.pushButton_num6.setText(QCoreApplication.translate("MainWindow", u"60", None)) - self.lineEdit_num.setPlaceholderText(QCoreApplication.translate("MainWindow", u"\u4ece\u7b2c\u51e0\u5305\u5f00\u59cb", None)) - self.pushButton_num_confirm.setText(QCoreApplication.translate("MainWindow", u"\u786e\u5b9a", None)) - self.pushButton_AddNum.setText(QCoreApplication.translate("MainWindow", u"\u8865\u4e00\u888b", None)) - self.pushButton_SubNum.setText(QCoreApplication.translate("MainWindow", u"\u6263\u4e00\u888b", None)) - self.pushButton_reset.setText(QCoreApplication.translate("MainWindow", u"\u590d\u4f4d", None)) - self.pushButton_emergency.setText(QCoreApplication.translate("MainWindow", u"\u6025\u505c", None)) - self.pushButton_stopFeed.setText(QCoreApplication.translate("MainWindow", u"\u505c\u6b62", None)) - self.pushButton_pauseFeed.setText(QCoreApplication.translate("MainWindow", u"\u6682\u505c", None)) - self.pushButton_startFeed.setText(QCoreApplication.translate("MainWindow", u"\u542f\u52a8", None)) - self.pushButton_clearAlarm.setText(QCoreApplication.translate("MainWindow", u"\u6e05\u9664\u62a5\u8b66", None)) - self.pushButton_onekeyfeed.setText(QCoreApplication.translate("MainWindow", u"\u4e00\u952e\u6295\u6599", None)) - self.label_4.setText(QCoreApplication.translate("MainWindow", u"\u7801\u579b\u888b\u6570\uff1a", None)) - self.label_maxNum.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.label_6.setText(QCoreApplication.translate("MainWindow", u"\u5df2\u6295\u888b\u6570\uff1a", None)) - self.label_remain_num.setText(QCoreApplication.translate("MainWindow", u"0", None)) - # retranslateUi - diff --git a/Mv3D/CameraUtil.py b/Mv3D/CameraUtil.py index 2cd588c..767a94d 100644 --- a/Mv3D/CameraUtil.py +++ b/Mv3D/CameraUtil.py @@ -14,7 +14,7 @@ class CameraUtil: def __init__(self): self.camera = None self.camera_type = "ip" - self.camera_ip = "192.168.0.234" + self.camera_ip = "192.168.0.125" self.camera_port = 554 self.camera_username = "admin" self.camera_password = "ailaimiye123" @@ -73,13 +73,13 @@ class CameraUtil: # 跳20帧,获取最新图像 frames_skipped = 0 - while frames_skipped < 20: + while frames_skipped < 1: # 检查总超时 if time.time() - start_time > total_timeout: print("捕获图像总超时") return None self.camera.grab() - time.sleep(0.05) # 稍微增加延迟,确保有新帧到达 + # time.sleep(0.05) # 稍微增加延迟,确保有新帧到达 frames_skipped += 1 # 尝试读取帧,使用同一超时计时器 diff --git a/Mv3D/Mv3dRgbdImport/Mv3dRgbdApi.py b/Mv3D/Mv3dRgbdImport/Mv3dRgbdApi.py index 41e5a04..ed37144 100644 --- a/Mv3D/Mv3dRgbdImport/Mv3dRgbdApi.py +++ b/Mv3D/Mv3dRgbdImport/Mv3dRgbdApi.py @@ -13,7 +13,8 @@ import platform Mv3dRgbdDll = None if platform.system() == "Linux": try: - Mv3dRgbdDll = cdll.LoadLibrary("/opt/Mv3dRgbdSDK/lib/aarch64/libMv3dRgbd.so") + print('未启用SDK') + # Mv3dRgbdDll = cdll.LoadLibrary("/opt/Mv3dRgbdSDK/lib/aarch64/libMv3dRgbd.so") except Exception as e: print(f"加载Linux库文件失败: {e}") else: diff --git a/Mv3D/calculate_diff2.py b/Mv3D/calculate_diff2.py index dca4129..fdd760c 100644 --- a/Mv3D/calculate_diff2.py +++ b/Mv3D/calculate_diff2.py @@ -1,6 +1,7 @@ import cv2 import numpy as np import os +#from rknnlite.api import RKNNLite # ====================== 配置区 ====================== @@ -23,6 +24,34 @@ print(f"Scale factors: SCALE_X={SCALE_X:.3f} mm/px, SCALE_Y={SCALE_Y:.3f} mm/px" # 输入尺寸 IMG_SIZE = (640, 640) +# ====================== RKNN 单例管理 ====================== +_rknn_instance = None + +def init_rknn_once(model_path): + """只加载一次 RKNN 模型""" + global _rknn_instance + if _rknn_instance is None: + _rknn_instance = RKNNLite(verbose=False) + ret = _rknn_instance.load_rknn(model_path) + if ret != 0: + print(f"[ERROR] Failed to load RKNN: {ret}") + _rknn_instance = None + return None + ret = _rknn_instance.init_runtime() + if ret != 0: + print(f"[ERROR] Failed to init RKNN runtime: {ret}") + _rknn_instance = None + return None + return _rknn_instance + +def release_rknn(): + """释放 RKNN 单例""" + global _rknn_instance + if _rknn_instance: + _rknn_instance.release() + _rknn_instance = None + +# ====================== 工具函数 ====================== def letterbox_resize(image, size, bg_color=114): target_w, target_h = size @@ -35,63 +64,43 @@ def letterbox_resize(image, size, bg_color=114): canvas[dy:dy + new_h, dx:dx + new_w] = resized return canvas, scale, dx, dy - def safe_sigmoid(x): x = np.clip(x, -50, 50) return 1.0 / (1.0 + np.exp(-x)) - def softmax(x): x = x - np.max(x) e = np.exp(x) return e / e.sum() - def dfl_to_xywh(loc, grid_x, grid_y, stride): - """将 DFL 输出解析为 xywh""" xywh_ = np.zeros(4) xywh = np.zeros(4) - - # 每个维度 16 bins 做 softmax for i in range(4): l = loc[i * 16:(i + 1) * 16] l = softmax(l) xywh_[i] = sum([j * l[j] for j in range(16)]) - - # 对应公式 xywh_[0] = (grid_x + 0.5) - xywh_[0] xywh_[1] = (grid_y + 0.5) - xywh_[1] xywh_[2] = (grid_x + 0.5) + xywh_[2] xywh_[3] = (grid_y + 0.5) + xywh_[3] - - # 转成中心点 + 宽高 xywh[0] = ((xywh_[0] + xywh_[2]) / 2) * stride xywh[1] = ((xywh_[1] + xywh_[3]) / 2) * stride xywh[2] = (xywh_[2] - xywh_[0]) * stride xywh[3] = (xywh_[3] - xywh_[1]) * stride - - # 转为左上角坐标 xywh[0] = xywh[0] - xywh[2] / 2 xywh[1] = xywh[1] - xywh[3] / 2 return xywh - def parse_pose_outputs(outputs, conf_threshold=0.5, dx=0, dy=0, scale=1.0): - """ - 完整解析 RKNN YOLO-Pose 输出 - 返回 keypoints, class_id, obj_conf, bbox(已映射回原图) - """ boxes = [] obj_confs = [] class_ids = [] - - # 遍历前三个输出 tensor (det 输出) for idx in range(3): - det = np.array(outputs[idx])[0] # (C,H,W) + det = np.array(outputs[idx])[0] C, H, W = det.shape - num_classes = C - 64 # 前64通道为 DFL bbox + num_classes = C - 64 stride = 640 // H - for h in range(H): for w in range(W): for c in range(num_classes): @@ -102,7 +111,6 @@ def parse_pose_outputs(outputs, conf_threshold=0.5, dx=0, dy=0, scale=1.0): boxes.append(xywh) obj_confs.append(conf) class_ids.append(c) - if not obj_confs: best_box = np.array([0, 0, 0, 0]) class_id = -1 @@ -112,21 +120,16 @@ def parse_pose_outputs(outputs, conf_threshold=0.5, dx=0, dy=0, scale=1.0): best_box = boxes[max_idx] class_id = class_ids[max_idx] obj_conf = obj_confs[max_idx] - - # 🔹 bbox 坐标映射回原图 x, y, w, h = best_box x = (x - dx) / scale y = (y - dy) / scale w = w / scale h = h / scale best_box = np.array([x, y, w, h]) - - # 🔹 关键点解析 - kpt_output = np.array(outputs[3])[0] # (num_kpts, 3, num_anchor) + kpt_output = np.array(outputs[3])[0] confs = kpt_output[:, 2, :] best_anchor_idx = np.argmax(np.mean(confs, axis=0)) kpt_data = kpt_output[:, :, best_anchor_idx] - keypoints = [] for i in range(kpt_data.shape[0]): x_img, y_img, vis_conf_raw = kpt_data[i] @@ -134,10 +137,8 @@ def parse_pose_outputs(outputs, conf_threshold=0.5, dx=0, dy=0, scale=1.0): x_orig = (x_img - dx) / scale y_orig = (y_img - dy) / scale keypoints.append([x_orig, y_orig, vis_prob]) - return np.array(keypoints), class_id, obj_conf, best_box - def compute_offset(keypoints, fixed_point, scale_x, scale_y): if len(keypoints) < 2: return None @@ -148,28 +149,19 @@ def compute_offset(keypoints, fixed_point, scale_x, scale_y): dy_mm = (cy - fixed_point[1]) * scale_y return cx, cy, dx_mm, dy_mm - def visualize_result(image, keypoints, bbox, fixed_point, offset_info, save_path): vis = image.copy() colors = [(0, 0, 255), (0, 255, 255)] cx, cy, dx_mm, dy_mm = offset_info fx, fy = map(int, fixed_point) - - # 绘制关键点 for i, (x, y, conf) in enumerate(keypoints[:2]): if conf > 0.5: cv2.circle(vis, (int(x), int(y)), 6, colors[i], -1) if len(keypoints) >= 2: - cv2.line(vis, - (int(keypoints[0][0]), int(keypoints[0][1])), - (int(keypoints[1][0]), int(keypoints[1][1])), - (0, 255, 0), 2) - - # 绘制 bbox + cv2.line(vis, (int(keypoints[0][0]), int(keypoints[0][1])), + (int(keypoints[1][0]), int(keypoints[1][1])), (0, 255, 0), 2) x, y, w, h = bbox cv2.rectangle(vis, (int(x), int(y)), (int(x + w), int(y + h)), (255, 0, 0), 2) - - # 绘制中心点 cv2.circle(vis, (int(cx), int(cy)), 10, (0, 255, 0), 3) cv2.circle(vis, (fx, fy), 12, (255, 255, 0), 3) cv2.arrowedLine(vis, (fx, fy), (int(cx), int(cy)), (255, 255, 0), 2, tipLength=0.05) @@ -177,30 +169,26 @@ def visualize_result(image, keypoints, bbox, fixed_point, offset_info, save_path cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2) cv2.putText(vis, f"DeltaY={dy_mm:+.1f}mm", (fx + 30, fy + 30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 255), 2) - cv2.imwrite(save_path, vis) +# ====================== 主函数 ====================== def calculate_offset_from_image(image_path, visualize=False): - from rknnlite.api import RKNNLite - - orig = cv2.imread(image_path) + orig=cv2.imread(image_path) if orig is None: return {'success': False, 'message': f'Failed to load image: {image_path}'} img_resized, scale, dx, dy = letterbox_resize(orig, IMG_SIZE) infer_img = np.expand_dims(img_resized[..., ::-1], 0).astype(np.uint8) - rknn = RKNNLite(verbose=False) - ret = rknn.load_rknn(MODEL_PATH) - if ret != 0: - return {'success': False, 'message': 'Failed to load RKNN model'} + rknn = init_rknn_once(MODEL_PATH) + if rknn is None: + return {'success': False, 'message': 'Failed to init RKNN'} try: - rknn.init_runtime(core_mask=RKNNLite.NPU_CORE_0) outputs = rknn.inference([infer_img]) - finally: - rknn.release() + except Exception as e: + return {'success': False, 'message': f'RKNN inference error: {str(e)}'} try: keypoints, class_id, obj_conf, bbox = parse_pose_outputs(outputs, dx=dx, dy=dy, scale=scale) @@ -222,16 +210,40 @@ def calculate_offset_from_image(image_path, visualize=False): 'obj_conf': obj_conf, 'bbox': bbox, 'message': 'Success'} - -# ====================== 使用示例 ====================== +# ====================== 示例调用 ====================== if __name__ == "__main__": - image_path = "11.jpg" - result = calculate_offset_from_image(image_path, visualize=True) - if result['success']: - print(f"Center point: ({result['cx']:.1f}, {result['cy']:.1f})") - print(f"Offset: DeltaX={result['dx_mm']:+.2f} mm, DeltaY={result['dy_mm']:+.2f} mm") - print(f"Class ID: {result['class_id']}, Confidence: {result['obj_conf']:.3f}") - print(f"BBox: {result['bbox']}") - else: - print("Error:", result['message']) + time_start = time.time() + camera = CameraUtil() + + for i in range(5): + time_start = time.time() + image_path=camera.save_img() + time_end = time.time() + print(f"Time cost22: {time_end - time_start:.3f} s") + + # image_path = "11.jpg" + result = calculate_offset_from_image(image_path, visualize=False) + + + if result['success']: + print(f"Center point: ({result['cx']:.1f}, {result['cy']:.1f})") + print(f"Offset: DeltaX={result['dx_mm']:+.2f} mm, DeltaY={result['dy_mm']:+.2f} mm") + print(f"Class ID: {result['class_id']}, Confidence: {result['obj_conf']:.3f}") + print(f"BBox: {result['bbox']}") + else: + print("Error:", result['message']) + time_end = time.time() + print(f"Time cost: {time_end - time_start:.3f} s") + + # image_path = "11.jpg" + # orig = cv2.imread(image_path) + # result = calculate_offset_from_image(orig, visualize=False) + # if result['success']: + # print(f"Center point: ({result['cx']:.1f}, {result['cy']:.1f})") + # print(f"Offset: DeltaX={result['dx_mm']:+.2f} mm, DeltaY={result['dy_mm']:+.2f} mm") + # print(f"Class ID: {result['class_id']}, Confidence: {result['obj_conf']:.3f}") + # print(f"BBox: {result['bbox']}") + # else: + # print("Error:", result['message']) + diff --git a/Mv3D/point.rknn b/Mv3D/point.rknn index 64d89cc..8239f09 100644 Binary files a/Mv3D/point.rknn and b/Mv3D/point.rknn differ diff --git a/Seting.ini b/Seting.ini index 2aca66a..971790a 100644 --- a/Seting.ini +++ b/Seting.ini @@ -47,8 +47,9 @@ photo_v5 = 0.0 photo_w5 = 1.0 linecount = 2 remain_linename = 1 -remain_count = 3 +remain_count = 2 maduo_count = 30 +remain_dropweight_kg = 50 io_take_addr = 8 io_zip_addr = 11 io_shake_addr = 12 diff --git a/TEST3.py b/TEST3.py deleted file mode 100644 index 7884bb6..0000000 --- a/TEST3.py +++ /dev/null @@ -1,90 +0,0 @@ -from PySide6.QtWidgets import QApplication, QPushButton, QMainWindow -from PySide6.QtGui import QPainter, QRadialGradient, QColor, QFont -from PySide6.QtCore import Qt, QRectF, QPropertyAnimation, QEasingCurve -import sys - -class GradientButton(QPushButton): - def __init__(self, text, parent=None): - super().__init__(text, parent) - self.setFlat(True) - self.setFont(QFont("Arial", 14, QFont.Bold)) - self.setMouseTracking(True) - self.hover = False - self.animation = QPropertyAnimation(self, b"geometry") - self.animation.setDuration(100) - self.animation.setEasingCurve(QEasingCurve.OutQuad) - - def paintEvent(self, event): - painter = QPainter(self) - painter.setRenderHint(QPainter.Antialiasing) - - rect = self.rect() - - gradient = QRadialGradient(rect.width()/2,rect.top(), rect.width()) - gradient.setColorAt(0, QColor(0, 0, 0)) - gradient.setColorAt(1, QColor(255, 255, 255)) - - if self.hover: - gradient.setColorAt(0, QColor(30, 30, 30)) - gradient.setColorAt(1, QColor(220, 220, 220)) - - brush = gradient - painter.setBrush(brush) - painter.setPen(Qt.NoPen) - - radius = 10 - painter.drawRoundedRect(QRectF(rect), radius, radius) - - painter.setPen(QColor(0, 0, 0) if not self.hover else QColor(50, 50, 50)) - painter.drawText(rect, Qt.AlignCenter, self.text()) - - def enterEvent(self, event): - self.hover = True - self.update() - super().enterEvent(event) - - def leaveEvent(self, event): - self.hover = False - self.update() - super().leaveEvent(event) - - def mousePressEvent(self, event): - if event.button() == Qt.LeftButton: - # 开始缩放动画(缩小) - geom = self.geometry() - new_geom = geom.adjusted(5, 5, -5, -5) - self.animation.stop() - self.animation.setStartValue(geom) - self.animation.setEndValue(new_geom) - self.animation.start() - super().mousePressEvent(event) - - def mouseReleaseEvent(self, event): - if event.button() == Qt.LeftButton: - # 恢复原始大小 - geom = self.geometry() - new_geom = geom.adjusted(-5, -5, 5, 5) - self.animation.stop() - self.animation.setStartValue(geom) - self.animation.setEndValue(new_geom) - self.animation.start() - super().mouseReleaseEvent(event) - -class MainWindow(QMainWindow): - def __init__(self): - super().__init__() - self.setWindowTitle("带动画的渐变按钮示例") - self.setFixedSize(400, 300) - - self.button = GradientButton("点击我", self) - self.button.setGeometry(150, 130, 100, 40) - self.button.clicked.connect(self.on_button_click) - - def on_button_click(self): - print("按钮被点击了!") - -if __name__ == "__main__": - app = QApplication(sys.argv) - window = MainWindow() - window.show() - sys.exit(app.exec()) diff --git a/Util/util_log.py b/Util/util_log.py index 11ce0e7..fa92f9f 100644 --- a/Util/util_log.py +++ b/Util/util_log.py @@ -35,6 +35,7 @@ class Logger(QObject): self.pre_message = '' self.lock = threading.Lock() # 创建锁 self.log_queue = queue.Queue() + self._running = True # 线程运行标志 self.logger_thread = threading.Thread(target=self._process_logs, daemon=True,name="util_log") self.logger_thread.start() @@ -65,21 +66,27 @@ class Logger(QObject): self.logger_file_info.addHandler(error_handler) def _process_logs(self): - while True: - time.sleep(0.1) - level, message = self.log_queue.get() - if level == logging.INFO: - self.log_info_signal.emit(message) - # self.logger_textEdit_info.info(message) - self.logger_file_info.info(message) - elif level == logging.ERROR: - # self.logger_textEdit_info.error(message) - self.logger_file_info.error(message) - # self.logger_textEdit_warning.error(message) - self.log_error_signal.emit(message) - elif level == logging.WARNING: - self.logger_file_info.warning(message) - self.log_warning_signal.emit(message) + while self._running: + try: + item = self.log_queue.get(timeout=0.5) + level, message = item + + if level == logging.INFO: + self.log_info_signal.emit(message) + # self.logger_textEdit_info.info(message) + self.logger_file_info.info(message) + elif level == logging.ERROR: + # self.logger_textEdit_info.error(message) + self.logger_file_info.error(message) + # self.logger_textEdit_warning.error(message) + self.log_error_signal.emit(message) + elif level == logging.WARNING: + self.logger_file_info.warning(message) + self.log_warning_signal.emit(message) + except queue.Empty: + continue + except RuntimeError: + break def log_message(self,level,message): self.log_queue.put((level, message)) return diff --git a/app.py b/app.py deleted file mode 100644 index f33e28d..0000000 --- a/app.py +++ /dev/null @@ -1,1045 +0,0 @@ -import configparser -import json -import logging -import queue -import sys -from multiprocessing import Process - -from PyQt5.uic.properties import QtWidgets -from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent -from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt, QMovie -from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QHeaderView, QTableWidget, \ - QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView, QMessageBox -from datetime import datetime - -import Util.util_pic -from Util.util_ini import writeFeedLine_to_ini -import Constant -from CU.Command import FeedCommand -from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus -from Util.util_log import QTextEditLogger -from Vision.camera_coordinate_dete import Detection -from COM.COM_Robot import RobotClient -from Expection import Error_Code -from queue import Queue -from Model.RobotModel import * -import time -from queue import Queue -from Model.Position import Real_Position, Detection_Position -from threading import Thread -from CU.Command import Status -from Util.util_log import log -from ui_untitled import Ui_MainWindow - - -class MainWindow(QMainWindow, Ui_MainWindow): - def __init__(self): - super(MainWindow, self).__init__() - self.setupUi(self) - self.init_qss() - self.init_UI() - self.init_Run() - self.init_robot_info() - self.init_FeedLine() - self.start_Runing() - self.init_log() - - - def init_qss(self): - self.active_status_Qss = """ - - background-color: #A2EF4D; - color: #ffffff; - border-radius: 8px; - border: 1px solid #A2EF4D; - qproperty-alignment: 'AlignCenter'; - - """ - self.noActive_status_Qss = """ - - background-color: #FD3251; - color: #ffffff; - border-radius: 8px; - border: 1px solid #FD3251; - qproperty-alignment: 'AlignCenter'; - - """ - - self.active_label_sign_Qss = """ - - background-color: rgba(255, 255, 255, 0); - font: 700 12pt "Microsoft YaHei UI"; - color: red; - - - """ - self.active_btn_sign_Qss = """ - - background-color: rgb(255, 0, 0); - font: 9pt "楷体"; - border: 1px solid #dcdfe6; - border-radius: 5px; - - - - """ - self.noactive_label_sign_Qss = """ - - background-color: rgba(255, 255, 255, 0); - font: 700 12pt "Microsoft YaHei UI"; - color: #7A7A7A; - """ - self.noactive_btn_sign_Qss = """ - - background-color: #7A7A7A; - font: 9pt "楷体"; - border: 1px solid #dcdfe6; - border-radius: 5px; - - - """ - - def init_log(self): - log.init_log(self.textEdit_log_info, self.textEdit_log_error, Constant.log_file_path) - - - def init_UI(self): - self.pushButton_num1.clicked.connect(self.send_num_button_click) - self.pushButton_num2.clicked.connect(self.send_num_button_click) - self.pushButton_num3.clicked.connect(self.send_num_button_click) - self.pushButton_num4.clicked.connect(self.send_num_button_click) - self.pushButton_num5.clicked.connect(self.send_num_button_click) - self.pushButton_num6.clicked.connect(self.send_num_button_click) - self.pushButton_AddNum.clicked.connect(self.send_addNum_button_click) - self.pushButton_SubNum.clicked.connect(self.send_subNum_button_click) - self.pushButton_num_free.clicked.connect(self.send_num_button_click) - self.lineEdit_j1.returnPressed.connect(self.send_position_returnPressed) - self.lineEdit_j2.returnPressed.connect(self.send_position_returnPressed) - self.lineEdit_j3.returnPressed.connect(self.send_position_returnPressed) - self.lineEdit_j4.returnPressed.connect(self.send_position_returnPressed) - self.lineEdit_j5.returnPressed.connect(self.send_position_returnPressed) - self.lineEdit_j6.returnPressed.connect(self.send_position_returnPressed) - - self.pushButton_j1_sub.clicked.connect(self.send_subOneAsix_button_click) - self.pushButton_j2_sub.clicked.connect(self.send_subOneAsix_button_click) - self.pushButton_j3_sub.clicked.connect(self.send_subOneAsix_button_click) - self.pushButton_j4_sub.clicked.connect(self.send_subOneAsix_button_click) - self.pushButton_j5_sub.clicked.connect(self.send_subOneAsix_button_click) - self.pushButton_j6_sub.clicked.connect(self.send_subOneAsix_button_click) - - self.pushButton_j1_add.clicked.connect(self.send_addOneAsix_button_click) - self.pushButton_j2_add.clicked.connect(self.send_addOneAsix_button_click) - self.pushButton_j3_add.clicked.connect(self.send_addOneAsix_button_click) - self.pushButton_j4_add.clicked.connect(self.send_addOneAsix_button_click) - self.pushButton_j5_add.clicked.connect(self.send_addOneAsix_button_click) - self.pushButton_j6_add.clicked.connect(self.send_addOneAsix_button_click) - - self.pushButton_stopFeed.clicked.connect(self.send_stopFeed_button_click) - self.pushButton_pauseFeed.clicked.connect(self.send_pauseFeed_button_click) - - self.pushButton_get_p1.clicked.connect(self.get_p1_button_click) - self.pushButton_get_p2.clicked.connect(self.get_p2_button_click) - self.pushButton_get_p3.clicked.connect(self.get_p3_button_click) - self.pushButton_set_p1.clicked.connect(self.set_p1_button_click) - self.pushButton_set_p2.clicked.connect(self.set_p2_button_click) - self.pushButton_set_p3.clicked.connect(self.set_p3_button_click) - - self.pushButton_clearAlarm.clicked.connect(self.send_clear_alarm_command) - self.pushButton_reset.clicked.connect(self.send_reset_button_click) - self.pushButton_speed.setText(str(Constant.speed)) - self.pushButton_speed.clicked.connect(self.send_setSpeed_label_doubelClick) - self.lineEdit_speed.returnPressed.connect(self.send_setSpeed_lineEdit_returePressed) - - self.lineEdit_num.returnPressed.connect(self.send_custom_num_returnPressed) - - self.tabWidget_control.currentChanged.connect(self.send_tabWidget_control_change) - - int_validator = QIntValidator(0, 100, self.lineEdit_num) - self.lineEdit_num.setValidator(int_validator) - - # self.horizontalSlider_J1.sliderReleased - self.pushButton_startFeed.clicked.connect(self.send_startFeed_button_click) - self.pushButton_stack_feedControl.clicked.connect( - lambda _, index=0: self.send_stack_feedSet_button_click(index)) - self.pushButton_stack_feedSet.clicked.connect(lambda _, index=1: self.send_stack_feedSet_button_click(index)) - - self.horizontalSlider_feedingNum.blockSignals(True) - self.horizontalSlider_feedingNum.setMinimum(0) - - - self.lineEdit_speed.hide() - self.pushButton_stopFeed.hide() - self.pushButton_pauseFeed.hide() - - def init_Run(self): - self.robotClient = None - self.configReader = configparser.ConfigParser() - self.detection = Detection() - self.command_position_quene = Queue() - self.status_address = DataAddress() - self.feedLine_dict = {} - self.command_quene = Queue() - self.main_threading = None - - self.configReader.read(Constant.set_ini) - ip = self.configReader.get('Robot_Feed', 'IPAddress') - port = int(self.configReader.get('Robot_Feed', 'Port')) - photo_locs = [(int(self.configReader.get('Robot_Feed', 'photo_x1')), - int(self.configReader.get('Robot_Feed', 'photo_y1')), int(self.configReader.get('Robot_Feed', 'photo_z1'))), - (int(self.configReader.get('Robot_Feed', 'photo_x2')), - int(self.configReader.get('Robot_Feed', 'photo_y2')), int(self.configReader.get('Robot_Feed', 'photo_z2'))), - (int(self.configReader.get('Robot_Feed', 'photo_x3')), - int(self.configReader.get('Robot_Feed', 'photo_y3')),int(self.configReader.get('Robot_Feed', 'photo_z3'))) - ] - dropDelay_time = int(self.configReader.get('Robot_Feed', 'dropDelay_time')) - self.robotClient = RobotClient(ip, port, photo_locs, self.command_position_quene, self.status_address) - self.feeding = Feeding(self.robotClient, self.detection) # 临时 - self.last_time = time.time() - - try: - self.robotClient.CreatConnect() - except: - self.set_label_status_style(False) - return Error_Code.SYS_NETERROR - if self.robotClient.connected: - return 0 - else: - return Error_Code.SYS_NETERROR - - def init_seting_frame(self): - - rows = len(self.feedLine_dict.keys()) + 1 - self.tableWidget_feedSeting.setRowCount(rows) - self.tableWidget_feedSeting.setColumnCount(20) - # 设置第一重表头的合并 (三列一组) - self.tableWidget_feedSeting_addtional_col_num = 2 - - self.tableWidget_feedSeting.setSpan(0, 0 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并前3列 - self.tableWidget_feedSeting.setSpan(0, 6 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并后3列 - self.tableWidget_feedSeting.setSpan(0, 12 + self.tableWidget_feedSeting_addtional_col_num, 1, 6) # 合并后3列 - self.tableWidget_feedSeting.itemChanged.connect(self.send_tabelFeedSet_itemChanged) - - btn_safe = QPushButton("获取安全位置") - - widget_safe = QWidget() - layout_safe = QHBoxLayout() - layout_safe.addWidget(btn_safe) - # 调整布局的间距,使之更紧凑 - layout_safe.setContentsMargins(0, 0, 0, 0) - # 将布局设置到 QWidget 容器中 - widget_safe.setLayout(layout_safe) - - btn_photo = QPushButton("获取拍照位置") - widget_photo = QWidget() - layout_photo = QHBoxLayout() - layout_photo.addWidget(btn_photo) - # 调整布局的间距,使之更紧凑 - layout_photo.setContentsMargins(0, 0, 0, 0) - # 将布局设置到 QWidget 容器中 - widget_photo.setLayout(layout_photo) - - btn_feed = QPushButton("获取投料位置") - widget_feed = QWidget() - layout_feed = QHBoxLayout() - layout_feed.addWidget(btn_feed) - # 调整布局的间距,使之更紧凑 - layout_feed.setContentsMargins(0, 0, 0, 0) - # 将布局设置到 QWidget 容器中 - widget_feed.setLayout(layout_feed) - - btn_safe.clicked.connect(self.send_get_safe_position_button_click) - btn_photo.clicked.connect(self.send_get_photo_position_button_click) - btn_feed.clicked.connect(self.send_get_feed_position_button_click) - # 添加第一重表头项 - - self.tableWidget_feedSeting.setCellWidget(0, 0 + self.tableWidget_feedSeting_addtional_col_num, widget_safe) - self.tableWidget_feedSeting.setCellWidget(0, 6 + self.tableWidget_feedSeting_addtional_col_num, widget_photo) - self.tableWidget_feedSeting.setCellWidget(0, 12 + self.tableWidget_feedSeting_addtional_col_num, - widget_feed) # 设置在合并的第2组 - - self.tableWidget_feedSeting.setSelectionBehavior(QTableWidget.SelectRows) - self.tableWidget_feedSeting.setAutoScroll(True) - # 添加第二重表头 - self.tableWidget_feedSeting.setHorizontalHeaderLabels( - ['header', '线名', 'X1', 'Y1', 'Z1', 'U1', 'V1', 'W1', 'X2', 'Y2', 'Z2', 'U2', 'V2', 'W2', 'X3', 'Y3', 'Z3', - 'U3', 'V3', 'W3']) - - self.tableWidget_feedSeting.hideColumn(0) - # 填充数据行 - for row, (feed_line_key, feed_line) in enumerate(self.feedLine_dict.items()): - self.tableWidget_feedSeting.setItem(row + 1, 0, QTableWidgetItem(feed_line_key)) - self.tableWidget_feedSeting.setItem(row + 1, 1, QTableWidgetItem(feed_line.name)) - self.set_position_to_tabel(row + 1, 0, feed_line.safe_position) - self.set_position_to_tabel(row + 1, 1, feed_line.photo_position) - self.set_position_to_tabel(row + 1, 2, feed_line.feed_position) - - # 禁用自动表头 - self.tableWidget_feedSeting.verticalHeader().setVisible(True) - self.pushButton_tableFeedSet_addRow.clicked.connect(self.send_tabelFeedSet_addRow) - self.pushButton_tableFeedSet_deleRow.clicked.connect(self.send_tabelFeedSet_delRow) - self.pushButton_tableFeedSet_save.clicked.connect(self.send_tabelFeedSet_save) - - def init_FeedLine(self): - line_count = self.configReader.get('Robot_Feed', 'LineCount', fallback=0) - self.configReader.read(Constant.feedLine_set_file, encoding='utf-8') - for i in range(int(line_count)): - line_str = f'FeedLine{i + 1}' - safe_position = Real_Position() - photo_position = Real_Position() - mid_position = Real_Position() - broken_position1 = Real_Position() - broken_position2 = Real_Position() - feed_position = Real_Position() - dropBag_position = Real_Position() - zipBag_poistion = Real_Position() - - - safe_position.X = float(self.configReader.get(line_str, 'SafePosition_x', fallback=0)) - safe_position.Y = float(self.configReader.get(line_str, 'SafePosition_y', fallback=0)) - safe_position.Z = float(self.configReader.get(line_str, 'SafePosition_z', fallback=0)) - safe_position.U = float(self.configReader.get(line_str, 'SafePosition_u', fallback=0)) - safe_position.V = float(self.configReader.get(line_str, 'SafePosition_v', fallback=0)) - safe_position.W = float(self.configReader.get(line_str, 'SafePosition_w', fallback=0)) - - photo_position.X = float(self.configReader.get(line_str, 'PhotoPosition_x', fallback=0)) - photo_position.Y = float(self.configReader.get(line_str, 'PhotoPosition_y', fallback=0)) - photo_position.Z = float(self.configReader.get(line_str, 'PhotoPosition_z', fallback=0)) - photo_position.U = float(self.configReader.get(line_str, 'PhotoPosition_u', fallback=0)) - photo_position.V = float(self.configReader.get(line_str, 'PhotoPosition_v', fallback=0)) - photo_position.W = float(self.configReader.get(line_str, 'PhotoPosition_w', fallback=0)) - - mid_position.X = float(self.configReader.get(line_str, 'MidPosition_x', fallback=0)) - mid_position.Y = float(self.configReader.get(line_str, 'MidPosition_y', fallback=0)) - mid_position.Z = float(self.configReader.get(line_str, 'MidPosition_z', fallback=0)) - mid_position.U = float(self.configReader.get(line_str, 'MidPosition_u', fallback=0)) - mid_position.V = float(self.configReader.get(line_str, 'MidPosition_v', fallback=0)) - mid_position.W = float(self.configReader.get(line_str, 'MidPosition_w', fallback=0)) - - broken_position1.X = float(self.configReader.get(line_str, 'BrokenPosition_x', fallback=0)) - broken_position1.Y = float(self.configReader.get(line_str, 'BrokenPosition_y', fallback=0)) - broken_position1.Z = float(self.configReader.get(line_str, 'BrokenPosition_z', fallback=0)) - broken_position1.U = float(self.configReader.get(line_str, 'BrokenPosition_u', fallback=0)) - broken_position1.V = float(self.configReader.get(line_str, 'BrokenPosition_v', fallback=0)) - broken_position1.W = float(self.configReader.get(line_str, 'BrokenPosition_w', fallback=0)) - broken_position2.X = float(self.configReader.get(line_str, 'BrokenPosition2_x', fallback=0)) - broken_position2.Y = float(self.configReader.get(line_str, 'BrokenPosition2_y', fallback=0)) - broken_position2.Z = float(self.configReader.get(line_str, 'BrokenPosition2_z', fallback=0)) - broken_position2.U = float(self.configReader.get(line_str, 'BrokenPosition2_u', fallback=0)) - broken_position2.V = float(self.configReader.get(line_str, 'BrokenPosition2_v', fallback=0)) - broken_position2.W = float(self.configReader.get(line_str, 'BrokenPosition2_w', fallback=0)) - - dropBag_position.X = float(self.configReader.get(line_str, 'DropBagPosition_x', fallback=0)) - dropBag_position.Y = float(self.configReader.get(line_str, 'DropBagPosition_y', fallback=0)) - dropBag_position.Z = float(self.configReader.get(line_str, 'DropBagPosition_z', fallback=0)) - dropBag_position.U = float(self.configReader.get(line_str, 'DropBagPosition_u', fallback=0)) - dropBag_position.V = float(self.configReader.get(line_str, 'DropBagPosition_v', fallback=0)) - dropBag_position.W = float(self.configReader.get(line_str, 'DropBagPosition_w', fallback=0)) - zipBag_poistion.X = float(self.configReader.get(line_str, 'ZipBagPosition_x', fallback=0)) - zipBag_poistion.Y = float(self.configReader.get(line_str, 'ZipBagPosition_y', fallback=0)) - zipBag_poistion.Z = float(self.configReader.get(line_str, 'ZipBagPosition_z', fallback=0)) - zipBag_poistion.U = float(self.configReader.get(line_str, 'ZipBagPosition_u', fallback=0)) - zipBag_poistion.V = float(self.configReader.get(line_str, 'ZipBagPosition_v', fallback=0)) - zipBag_poistion.W = float(self.configReader.get(line_str, 'ZipBagPosition_w', fallback=0)) - - - feed_position.X = float(self.configReader.get(line_str, 'FeedPosition_x', fallback=0)) - feed_position.Y = float(self.configReader.get(line_str, 'FeedPosition_y', fallback=0)) - feed_position.Z = float(self.configReader.get(line_str, 'FeedPosition_z', fallback=0)) - feed_position.U = float(self.configReader.get(line_str, 'FeedPosition_u', fallback=0)) - feed_position.V = float(self.configReader.get(line_str, 'FeedPosition_v', fallback=0)) - feed_position.W = float(self.configReader.get(line_str, 'FeedPosition_w', fallback=0)) - - - - name = self.configReader.get(line_str, 'Name', fallback='未命名') - self.feedLine_dict[f'{Constant.feedLine_set_section}{i + 1}'] = FeedLine(i + 1,name, safe_position, - photo_position, mid_position, - broken_position1,broken_position2,dropBag_position,zipBag_poistion,feed_position) - self.init_seting_frame() - self.updateUI_Select_Line() - pass - - def init_robot_info(self): - j1_min = int(self.configReader.get('Robot_Feed', 'j1_min')) - j1_max = int(self.configReader.get('Robot_Feed', 'j1_max')) - j2_min = int(self.configReader.get('Robot_Feed', 'j2_min')) - j2_max = int(self.configReader.get('Robot_Feed', 'j2_max')) - j3_min = int(self.configReader.get('Robot_Feed', 'j3_min')) - j3_max = int(self.configReader.get('Robot_Feed', 'j3_max')) - j4_min = int(self.configReader.get('Robot_Feed', 'j4_min')) - j4_max = int(self.configReader.get('Robot_Feed', 'j4_max')) - j5_min = int(self.configReader.get('Robot_Feed', 'j5_min')) - j5_max = int(self.configReader.get('Robot_Feed', 'j5_max')) - j6_min = int(self.configReader.get('Robot_Feed', 'j6_min')) - j6_max = int(self.configReader.get('Robot_Feed', 'j6_max')) - self.horizontalSlider_J1.setMinimum(j1_min) - self.horizontalSlider_J1.setMaximum(j1_max) - self.horizontalSlider_J2.setMinimum(j2_min) - self.horizontalSlider_J2.setMaximum(j2_max) - self.horizontalSlider_J3.setMinimum(j3_min) - self.horizontalSlider_J3.setMaximum(j3_max) - self.horizontalSlider_J4.setMinimum(j4_min) - self.horizontalSlider_J4.setMaximum(j4_max) - self.horizontalSlider_J5.setMinimum(j5_min) - self.horizontalSlider_J5.setMaximum(j5_max) - self.horizontalSlider_J6.setMinimum(j6_min) - self.horizontalSlider_J6.setMaximum(j6_max) - self.label_j1_min.setText(j1_min.__str__()) - self.label_j1_max.setText(j1_max.__str__()) - self.label_j2_min.setText(j2_min.__str__()) - self.label_j2_max.setText(j2_max.__str__()) - self.label_j3_min.setText(j3_min.__str__()) - self.label_j3_max.setText(j3_max.__str__()) - self.label_j4_min.setText(j4_min.__str__()) - self.label_j4_max.setText(j4_max.__str__()) - self.label_j5_min.setText(j5_min.__str__()) - self.label_j5_max.setText(j5_max.__str__()) - self.label_j6_min.setText(j6_min.__str__()) - self.label_j6_max.setText(str(j6_max)) - - def start_Runing(self): - self.main_threading = Thread(target=self.run) - self.robot_connect_threading = Thread(target=self.robotClient.run) - self.main_threading.start() - self.robot_connect_threading.start() - pass - - def send_startFeed_button_click(self): - # 触发自动运行 - if self.robotClient.status_model.curMode != 7: - self.send_switch_tool_command() - log.log_message(logging.INFO, Constant.str_sys_switch_tool) - self.send_start_tool_command() - log.log_message(logging.INFO, Constant.str_sys_start_tool) - num = self.horizontalSlider_feedingNum.maximum() - line_head = self.comboBox_lineIndex.currentData() - self.command_quene.put(FeedCommand(FeedingConfig(num, self.feedLine_dict[line_head]))) - self.stackedWidget_num.setCurrentIndex(1) - self.set_run_status_button(True) - log.log_message(logging.INFO, f'{self.feedLine_dict[line_head].name}:{Constant.str_feed_start}') - - def send_num_button_click(self): - button = self.sender() - if button.text() != "自定义": - num = int(button.text()) - self.horizontalSlider_feedingNum.setMaximum(num) - self.label_maxNum.setText(str(num)) - self.horizontalSlider_feedingNum.setValue(0) - else: - self.pushButton_num_free.hide() - self.lineEdit_num.show() - - def send_subOneAsix_button_click(self): - btn_str = self.sender().objectName() - Constant.manual_adjust_accuracy = float(self.lineEdit_manual_adjust_accuracy.text()) - x1 = self.horizontalSlider_J1.value() - x2 = self.horizontalSlider_J2.value() - x3 = self.horizontalSlider_J3.value() - x4 = self.horizontalSlider_J4.value() - x5 = self.horizontalSlider_J5.value() - x6 = self.horizontalSlider_J6.value() - if 'j1' in btn_str: - x1 = x1 - Constant.manual_adjust_accuracy - elif 'j2' in btn_str: - x2 = x2 - Constant.manual_adjust_accuracy - pass - elif 'j3' in btn_str: - x3 = x3 - Constant.manual_adjust_accuracy - pass - elif 'j4' in btn_str: - x4 = x4 - Constant.manual_adjust_accuracy - pass - elif 'j5' in btn_str: - x5 = x5 - Constant.manual_adjust_accuracy - pass - elif 'j6' in btn_str: - x6 = x6 - Constant.manual_adjust_accuracy - self.send_position_command(x1, x2, x3, x4, x5, x6, MoveType.AXIS) - - def send_addOneAsix_button_click(self, btn): - btn_str = self.sender().objectName() - Constant.manual_adjust_accuracy = float(self.lineEdit_manual_adjust_accuracy.text()) - x1 = self.horizontalSlider_J1.value() - x2 = self.horizontalSlider_J2.value() - x3 = self.horizontalSlider_J3.value() - x4 = self.horizontalSlider_J4.value() - x5 = self.horizontalSlider_J5.value() - x6 = self.horizontalSlider_J6.value() - if 'j1' in btn_str: - x1 = x1 + Constant.manual_adjust_accuracy - elif 'j2' in btn_str: - x2 = x2 + Constant.manual_adjust_accuracy - pass - elif 'j3' in btn_str: - x3 = x3 + Constant.manual_adjust_accuracy - pass - elif 'j4' in btn_str: - x4 = x4 + Constant.manual_adjust_accuracy - pass - elif 'j5' in btn_str: - x5 = x5 + Constant.manual_adjust_accuracy - pass - elif 'j6' in btn_str: - x6 = x6 + Constant.manual_adjust_accuracy - self.send_position_command(x1, x2, x3, x4, x5, x6, move_type=MoveType.AXIS) - - def send_addNum_button_click(self): - self.feeding.feedConfig.num += 1 - - log.log_message(logging.INFO, Constant.str_sys_feedNum_add) - max_num = int(self.label_maxNum.text()) + 1 - self.horizontalSlider_feedingNum.setMaximum(max_num) - self.label_maxNum.setText(str(max_num)) - def send_subNum_button_click(self): - if self.feeding.feedConfig.num <= 1: - #self.send_stopFeed_button_click() - self.feeding.feedStatus = FeedStatus.FNone - # 清空运行命令 - self.send_clear_auto_command() - log.log_message(logging.INFO, Constant.str_feed_stop) - return - self.feeding.feedConfig.num -= 1 - log.log_message(logging.INFO, Constant.str_sys_feedNum_sub) - max_num = int(self.label_maxNum.text())-1 - self.horizontalSlider_feedingNum.setMaximum(max_num) - self.label_maxNum.setText(str(max_num)) - - def send_custom_num_returnPressed(self): - self.pushButton_num_free.show() - self.lineEdit_num.hide() - self.horizontalSlider_feedingNum.setMaximum(int(self.lineEdit_num.text())) - self.horizontalSlider_feedingNum.setValue(0) - self.label_maxNum.setText(self.lineEdit_num.text()) - log.log_message(logging.INFO, f'{Constant.str_sys_setFeedNum}:{self.label_maxNum.text()} ') - - def send_stack_feedSet_button_click(self, index): - # self.logger.info("This is an info message") - self.stackedWidget_feed.setCurrentIndex(index) - if index == 0: - self.updateUI_Select_Line() - if index == 1: - self.updateUI_Photo_Set() - - def on_button_click(self): - self.button.setText("Clicked!") - - def send_position_button_click(self): - # if True: - # cmd_command = CMDRequest() - # cmd_command.cmdData = ['rewriteData', '800', f'{position_instruction.m0}', 0] - # request_command = vars(cmd_command) - # self.robotClient.add_sendQuene(request_command) - return - - def send_position_returnPressed(self): - log.log_message(logging.INFO, Constant.str_sys_manualPosition) - self.send_position_command(float(self.lineEdit_j1.text()), - float(self.lineEdit_j2.text()), - float(self.lineEdit_j3.text()), - float(self.lineEdit_j4.text()), - float(self.lineEdit_j5.text()), - float(self.lineEdit_j6.text())) - - def send_setSpeed_label_doubelClick(self): - self.pushButton_speed.hide() - self.lineEdit_speed.show() - pass - - def send_setSpeed_lineEdit_returePressed(self): - Constant.speed = int(self.lineEdit_speed.text()) - self.lineEdit_speed.hide() - self.pushButton_speed.setText(str(Constant.speed)) - self.pushButton_speed.show() - log.log_message(logging.INFO, Constant.str_sys_setSpeed + str(Constant.speed)) - pass - - def send_get_safe_position_button_click(self): - real_position = self.robotClient.status_model.getRealPosition() - row_i = self.tableWidget_feedSeting.currentRow() - head = self.tableWidget_feedSeting.item(row_i, 0).text() - self.feedLine_dict[head].safe_position.init_position(real_position.X, real_position.Y, real_position.Z, - real_position.U, real_position.V, real_position.W) - self.set_position_to_tabel(row_i, 0, real_position) - - def send_get_photo_position_button_click(self): - real_position = self.robotClient.status_model.getRealPosition() - row_i = self.tableWidget_feedSeting.currentRow() - head = self.tableWidget_feedSeting.item(row_i, 0).text() - self.feedLine_dict[head].photo_position.init_position(real_position.X, real_position.Y, real_position.Z, - real_position.U, real_position.V, real_position.W) - self.set_position_to_tabel(row_i, 1, real_position) - - def send_get_feed_position_button_click(self): - real_position = self.robotClient.status_model.getRealPosition() - row_i = self.tableWidget_feedSeting.currentRow() - head = self.tableWidget_feedSeting.item(row_i, 0).text() - self.feedLine_dict[head].feed_position.init_position(real_position.X, real_position.Y, real_position.Z, - real_position.U, real_position.V, real_position.W) - self.set_position_to_tabel(row_i, 2, real_position) - - def send_tabelFeedSet_addRow(self): - for i in range(1, 20): - head = f'{Constant.feedLine_set_section}{i}' - if head not in self.feedLine_dict: - row_position = self.tableWidget_feedSeting.rowCount() # 当前行数 - self.tableWidget_feedSeting.insertRow(row_position) - safe_position = Real_Position() - photo_position = Real_Position() - feed_position = Real_Position() - self.feedLine_dict[head] = FeedLine('新建', safe_position, photo_position, feed_position) - self.tableWidget_feedSeting.setItem(self.tableWidget_feedSeting.rowCount() - 1, 0, - QTableWidgetItem(head)) - self.tableWidget_feedSeting.setItem(self.tableWidget_feedSeting.rowCount() - 1, 1, - QTableWidgetItem('新建')) - self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 0, safe_position) - self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 1, photo_position) - self.set_position_to_tabel(self.tableWidget_feedSeting.rowCount() - 1, 2, feed_position) - break - - def send_tabelFeedSet_delRow(self): - selectRow = self.tableWidget_feedSeting.currentRow() - if selectRow >= 0: - for feed_line_key, feed_line in self.feedLine_dict.items(): - if feed_line_key == self.tableWidget_feedSeting.item(selectRow, 0).text(): - self.feedLine_dict.pop(feed_line_key) - self.tableWidget_feedSeting.removeRow(selectRow) - break - else: - QMessageBox.information(self, "提示", "请选择要删除的行") - - def send_tabelFeedSet_save(self): - count = len(self.feedLine_dict.keys()) - self.configReader.read(Constant.set_ini) - self.configReader.set('Robot_Feed', 'LineCount', str(count)) - writeFeedLine_to_ini(self.feedLine_dict, Constant.feedLine_set_file) - pass - - def send_stopFeed_button_click(self): - # 清空状态 - self.feeding.feedStatus = FeedStatus.FNone - # 清空运行命令 - self.send_clear_auto_command() - log.log_message(logging.INFO, Constant.str_feed_stop) - - def send_pauseFeed_button_click(self): - if self.pushButton_pauseFeed.text() == '暂停': - self.pushButton_pauseFeed.setText('继续') - log.log_message(logging.INFO, Constant.str_feed_pause) - self.send_pause_command(True) - self.feeding.pause = True - else: - self.pushButton_pauseFeed.setText('暂停') - self.send_pause_command(False) - log.log_message(logging.INFO, Constant.str_feed_continue) - self.send_start_tool_command() - log.log_message(logging.INFO, Constant.str_sys_start_tool) - self.feeding.pause = False - - pass - def send_tabWidget_control_change(self): - if self.robotClient.status_model.curMode != 7: - self.send_switch_tool_command() - log.log_message(logging.INFO, Constant.str_sys_switch_tool) - self.send_start_tool_command() - - def send_reset_button_click(self): - line_head = self.comboBox_lineIndex.currentData() - safe_position = self.feedLine_dict[line_head].safe_position - self.send_position_command(safe_position.X, safe_position.Y, safe_position.Z, safe_position.U, safe_position.V, safe_position.W,move_type=MoveType.WORLD) - - def send_tabelFeedSet_itemChanged(self, item): - row = item.row() - column = item.column() - value = item.text() - head = self.tableWidget_feedSeting.item(row, 0).text() - if column == 1: - self.feedLine_dict[head].name = value - elif column == (0 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].safe_position.X = float(value) - elif column == (1 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].safe_position.Y = float(value) - elif column == (2 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].safe_position.Z = float(value) - elif column == (3 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].safe_position.U = float(value) - elif column == (4 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].safe_position.V = float(value) - elif column == (5 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].safe_position.W = float(value) - # elif column == 7: - elif column == (6 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].photo_position.X = float(value) - elif column == (7 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].photo_position.Y = float(value) - elif column == (8 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].photo_position.Z = float(value) - elif column == (9 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].photo_position.U = float(value) - elif column == (10 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].photo_position.V = float(value) - elif column == (11 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].photo_position.W = float(value) - - elif column == (12 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].feed_position.X = float(value) - elif column == (13 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].feed_position.Y = float(value) - elif column == (14 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].feed_position.Z = float(value) - elif column == (15 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].feed_position.U = float(value) - elif column == (16 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].feed_position.V = float(value) - elif column == (17 + self.tableWidget_feedSeting_addtional_col_num): - self.feedLine_dict[head].feed_position.W = float(value) - - def run(self): - while True: - time.sleep(0.1) - if not self.command_quene.empty(): - command = self.command_quene.get() - if isinstance(command, FeedCommand) and command.status == Status.Prepareing: - if self.feeding.feedStatus == FeedStatus.FNone: - self.feeding.feedConfig = command.feed_config - self.feeding.feedStatus = FeedStatus.FStart - command.status = Status.Runing - - try: - self.feeding.run() - except: - print(Error_Code.SYS_NONEPoint) - self.updateUI() - - # pass #主线程 - - def updateUI(self): - if self.robotClient.connected: - self.set_label_status_style(True) - else: - self.set_label_status_style(False) - if self.feeding.feedStatus != FeedStatus.FNone: - self.horizontalSlider_feedingNum.setValue( - self.horizontalSlider_feedingNum.maximum() - self.feeding.feedConfig.num) - else: - self.set_run_status_button(False) - if self.feeding.feedStatus == FeedStatus.FNone: - self.stackedWidget_num.setCurrentIndex(0) - else: - self.stackedWidget_num.setCurrentIndex(1) - - # if self.feeding.feedConfig.num==2: - # self.feeding.pause=True - # self.send_pause_command(True) - # self.show_messagebox_of_person() - # log.log_message(logging.ERROR, '人员进入安全区') - self.label_date.setText(datetime.now().strftime("%Y-%m-%d")) - self.label_time.setText(datetime.now().strftime("%H:%M:%S")) - - self.updateUI_Position() - self.updateUI_label_detection() - self.updateUI_label_status() - self.updateUI_frame_sign(self.feeding.feedStatus) - - def updateUI_label_detection(self): - backgroud_img = Util.util_pic.cv2_to_qpixmap(self.feeding.detection_image) - self.label_showDetection.setPixmap(backgroud_img) - - def updateUI_Select_Line(self): - self.comboBox_lineIndex.clear() - for key, value in self.feedLine_dict.items(): - self.comboBox_lineIndex.addItem(value.name, key) - def updateUI_label_status(self): - if self.robotClient.status_model.isMoving==1: - self.label_move_sign.show() - if self.label_move_sign.text() == '正在移动.': - self.label_move_sign.setText('正在移动..') - else: - self.label_move_sign.setText('正在移动.') - else: - self.label_move_sign.hide() - if self.robotClient.status_model.curMode >= 0: - try: - self.label_status_model.setText(Constant.mode_array[self.robotClient.status_model.curMode]) - except: - self.label_status_model.setText('未知模式') - self.label_status_remoteCmdLen.setText(str(self.robotClient.status_model.RemoteCmdLen)) - - - def updateUI_Position(self): - self.horizontalSlider_J1.setValue(self.status_address.axis_0) - self.horizontalSlider_J2.setValue(self.status_address.axis_1) - self.horizontalSlider_J3.setValue(self.status_address.axis_2) - self.horizontalSlider_J4.setValue(self.status_address.axis_3) - self.horizontalSlider_J5.setValue(self.status_address.axis_4) - self.horizontalSlider_J6.setValue(self.status_address.axis_5) - - self.label_j1.setText(str(self.status_address.axis_0)) - self.label_j2.setText(str(self.status_address.axis_1)) - self.label_j3.setText(str(self.status_address.axis_2)) - self.label_j4.setText(str(self.status_address.axis_3)) - self.label_j5.setText(str(self.status_address.axis_4)) - self.label_j6.setText(str(self.status_address.axis_5)) - - def set_position_to_tabel(self, row_i, position_j, real_Position: Real_Position): - self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + self.tableWidget_feedSeting_addtional_col_num, - QTableWidgetItem(str(real_Position.X))) - self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 1 + self.tableWidget_feedSeting_addtional_col_num, - QTableWidgetItem(str(real_Position.Y))) - self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 2 + self.tableWidget_feedSeting_addtional_col_num, - QTableWidgetItem(str(real_Position.Z))) - self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 3 + self.tableWidget_feedSeting_addtional_col_num, - QTableWidgetItem(str(real_Position.U))) - self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 4 + self.tableWidget_feedSeting_addtional_col_num, - QTableWidgetItem(str(real_Position.V))) - self.tableWidget_feedSeting.setItem(row_i, position_j * 6 + 5 + self.tableWidget_feedSeting_addtional_col_num, - QTableWidgetItem(str(real_Position.W))) - def updateUI_frame_sign(self,sign:FeedStatus): - # print("start") - if sign == FeedStatus.FNone: - self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) - self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) - self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) - self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) - return - if sign < FeedStatus.FPhoto: - self.set_sign_status(self.label_sign_go,self.pushButton_sign_go,True) - self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) - self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) - self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) - return - if sign <= FeedStatus.FPhoto: - self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) - self.set_sign_status(self.label_sign_photo,self.pushButton_sign_photo,True) - self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) - self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) - return - if sign <= FeedStatus.FTake: - self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) - self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) - self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, True) - self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, False) - return - if sign <= FeedStatus.FBroken: - self.set_sign_status(self.label_sign_go, self.pushButton_sign_go, False) - self.set_sign_status(self.label_sign_photo, self.pushButton_sign_photo, False) - self.set_sign_status(self.label_sign_take, self.pushButton_sign_take, False) - self.set_sign_status(self.label_sign_feed, self.pushButton_sign_feed, True) - return - pass - - - def set_label_status_style(self, connected: bool): - - if connected: - if self.label_connect_status.styleSheet().strip() != self.active_status_Qss: - self.label_connect_status.setStyleSheet(self.active_status_Qss) - self.active_status_Qss = self.label_connect_status.styleSheet().strip() - - else: - if self.label_connect_status.styleSheet().strip() != self.noActive_status_Qss: - self.label_connect_status.setStyleSheet(self.noActive_status_Qss) - self.noActive_status_Qss = self.label_connect_status.styleSheet().strip() - def set_sign_status(self,label,btn,signed:bool): - - try : - if signed: - if label.styleSheet().strip() != self.active_label_sign_Qss: - label.setStyleSheet(self.active_label_sign_Qss) - self.active_label_sign_Qss = label.styleSheet().strip() - - if btn.styleSheet().strip() != self.active_btn_sign_Qss: - btn.setStyleSheet(self.active_btn_sign_Qss) - self.active_btn_sign_Qss = btn.styleSheet().strip() - else: - if label.styleSheet().strip() != self.noactive_label_sign_Qss: - label.setStyleSheet(self.noactive_label_sign_Qss) - self.noactive_label_sign_Qss = label.styleSheet().strip() - if btn.styleSheet().strip() != self.noactive_btn_sign_Qss: - btn.setStyleSheet(self.noactive_btn_sign_Qss) - self.noactive_btn_sign_Qss = btn.styleSheet().strip() - except Exception as e: - print(e) - - - - def set_run_status_button(self, isRuning: bool): - self.pushButton_pauseFeed.setText("暂停") - if isRuning: - self.pushButton_pauseFeed.show() - self.pushButton_stopFeed.show() - self.pushButton_startFeed.hide() - else: - self.pushButton_pauseFeed.hide() - self.pushButton_stopFeed.hide() - self.pushButton_startFeed.show() - - def send_clear_auto_command(self): - clear_command = CMDInstructRequest() - request_command = clear_command.toString() - log.log_message(logging.INFO, Constant.str_sys_clearAlarm) - self.command_quene.put(request_command) - - def send_position_command(self, x1, x2, x3, x4, x5, x6, move_type: MoveType = MoveType.WORLD): - - position_instruction = Instruction() - position_instruction.m0 = float(x1) - position_instruction.m1 = float(x2) - position_instruction.m2 = float(x3) - position_instruction.m3 = float(x4) - position_instruction.m4 = float(x5) - position_instruction.m5 = float(x6) - position_instruction.action = move_type.value - instruction_command = CMDInstructRequest() - instruction_command.instructions.append(position_instruction) - request_command = instruction_command.toString() - log_str = f'移动到位置:{"自由路径" if move_type == MoveType.AXIS else "姿势直线"}:' \ - f'm0:{position_instruction.m0}-' \ - f'm2:{position_instruction.m1}-' \ - f'm3:{position_instruction.m2}-' \ - f'm4:{position_instruction.m3}-' \ - f'm5:{position_instruction.m4}-' \ - f'm6:{position_instruction.m5}' - log.log_message(logging.INFO,log_str) - self.robotClient.add_sendQuene(request_command) - - def send_pause_command(self, pause: bool): - pause_command = CMDRequest() - pause_command.cmdData.append("actionPause") - if pause: - pause_command.cmdData.append("1") - else: - pause_command.cmdData.append("0") - request_command = pause_command.toString() - self.robotClient.add_sendQuene(request_command) - - def send_clear_alarm_command(self, pause: bool): - pause_command = CMDRequest() - pause_command.cmdData.append("clearAlarmContinue") - pause_command.cmdData.append("1") - request_command = pause_command.toString() - log_str = f'暂停:{pause}' - self.robotClient.add_sendQuene(request_command) - - def send_switch_tool_command(self): - switch_command = CMDRequest() - switch_command.cmdData.append("switchTool") - switch_command.cmdData.append("2") - request_command = switch_command.toString() - - self.robotClient.add_sendQuene(request_command) - - def send_start_tool_command(self): - switch_command = CMDRequest() - switch_command.cmdData.append("startButton") - switch_command.cmdData.append("1") - request_command = switch_command.toString() - print(request_command) - - self.robotClient.add_sendQuene(request_command) - - def show_messagebox_of_person(self): - - msg_box = QMessageBox(self) - msg_box.setWindowTitle("提示") - msg_box.setText("当前有人是否继续") - msg_box.setIcon(QMessageBox.Question) - msg_box.setStandardButtons(QMessageBox.Yes) - msg_box.setDefaultButton(QMessageBox.Yes) - - - result = msg_box.exec() - - - - if result == QMessageBox.Yes: - self.feeding.pause = False - self.send_pause_command(False) - - ### 设置界面 - def get_p1_button_click(self): - realPosition = self.robotClient.status_model.getRealPosition() - self.lineEdit_x1.setText(realPosition.X) - self.lineEdit_y1.setText(realPosition.Y) - self.lineEdit_z1.setText(realPosition.Z) - - def get_p2_button_click(self): - realPosition = self.robotClient.status_model.getRealPosition() - self.lineEdit_x2.setText(realPosition.X) - self.lineEdit_y2.setText(realPosition.Y) - self.lineEdit_z2.setText(realPosition.Z) - - def get_p3_button_click(self): - realPosition = self.robotClient.status_model.getRealPosition() - self.lineEdit_x3.setText(realPosition.X) - self.lineEdit_y3.setText(realPosition.Y) - self.lineEdit_z3.setText(realPosition.Z) - - def set_p1_button_click(self): - try: - x1 = float(self.lineEdit_x1.text()) - y1 = float(self.lineEdit_y1.text()) - z1 = float(self.lineEdit_z1.text()) - self.robotClient.photo_locs[0] = (x1, y1, z1) - self.configReader.read(Constant.set_ini) - self.configReader.set('Robot_Feed', 'photo_x1', str(x1)) - self.configReader.set('Robot_Feed', 'photo_y1', str(y1)) - self.configReader.set('Robot_Feed', 'photo_z1', str(z1)) - log.log_message(logging.INFO, f'设置拍照点1:{x1},{y1},{z1}') - except: - self.show_infomessage_box("设置拍照点1失败") - - def set_p2_button_click(self): - try: - x2 = float(self.lineEdit_x2.text()) - y2 = float(self.lineEdit_y2.text()) - z2 = float(self.lineEdit_z2.text()) - self.robotClient.photo_locs[1] = (x2, y2, z2) - self.configReader.read(Constant.set_ini) - self.configReader.set('Robot_Feed', 'photo_x2', str(x2)) - self.configReader.set('Robot_Feed', 'photo_y2', str(y2)) - self.configReader.set('Robot_Feed', 'photo_z2', str(z2)) - log.log_message(logging.INFO, f'设置拍照点2:{x2},{y2},{z2}') - except: - self.show_infomessage_box("设置拍照点2失败") - - - def set_p3_button_click(self): - try: - x3 = float(self.lineEdit_x3.text()) - y3 = float(self.lineEdit_y3.text()) - z3 = float(self.lineEdit_z3.text()) - self.robotClient.photo_locs[2] = (x3, y3, z3) - self.configReader.read(Constant.set_ini) - self.configReader.set('Robot_Feed', 'photo_x3', str(x3)) - self.configReader.set('Robot_Feed', 'photo_y3', str(y3)) - self.configReader.set('Robot_Feed', 'photo_z3', str(z3)) - log.log_message(logging.INFO, f'设置拍照点3:{x3},{y3},{z3}') - except: - self.show_infomessage_box("设置拍照点3失败") - - - def updateUI_Photo_Set(self): - self.lineEdit_x1.setText(str(self.robotClient.photo_locs[0][0])) - self.lineEdit_y1.setText(str(self.robotClient.photo_locs[0][1])) - self.lineEdit_z1.setText(str(self.robotClient.photo_locs[0][2])) - self.lineEdit_x2.setText(str(self.robotClient.photo_locs[1][0])) - self.lineEdit_y2.setText(str(self.robotClient.photo_locs[1][1])) - self.lineEdit_z2.setText(str(self.robotClient.photo_locs[1][2])) - self.lineEdit_x3.setText(str(self.robotClient.photo_locs[2][0])) - self.lineEdit_y3.setText(str(self.robotClient.photo_locs[2][1])) - self.lineEdit_z3.setText(str(self.robotClient.photo_locs[2][2])) - pass - - def show_infomessage_box(self,message): - msg_box = QMessageBox(self) - msg_box.setWindowTitle("提示") - msg_box.setText(message) - msg_box.setIcon(QMessageBox.Information) - msg_box.setStandardButtons(QMessageBox.OK) - - -if __name__ == "__main__": - app = QApplication(sys.argv) - window = MainWindow() - window.show() - sys.exit(app.exec()) diff --git a/main.py b/main.py index 0414334..28051fa 100644 --- a/main.py +++ b/main.py @@ -48,6 +48,7 @@ from ui_MainWin import Ui_MainWindow from view.ResetView import StopDialog from EMV.EMV import RelayController from CU.drop import DropPositionManager +import re class MainWindow(QMainWindow, Ui_MainWindow): @@ -58,7 +59,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.setupUi(self) #传感器继电器加入变量 self.relay_controller = RelayController() - self.drop_position_manager = DropPositionManager() + self.drop_position_manager = DropPositionManager(Constant.dropLine_set_file) self.feed_reset_obj=None self.sensor_thread = None self.sensor2_thread = None @@ -248,7 +249,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): line_model.save_line_model(config_reader) config_reader.write(open(Constant.feedLine_set_file, 'w', encoding='utf-8')) elif section.startswith(Constant.dropLine_set_section): - self.drop_position_manager.save_path_points(line_model) + loc_dropline_file=Constant.dropLine_set_file + if section.endswith('-35'): + loc_dropline_file=Constant.dropLine_set_file_35 + DropPositionManager(loc_dropline_file).save_path_points(line_model) self.init_FeedLine() break self.init_table_lines_data() @@ -414,7 +418,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.tableWidget_line_positions.removeRow(self.tableWidget_line_positions.currentRow()) if self.selected_line_section.startswith(Constant.dropLine_set_section): - self.drop_position_manager.del_drop_point(section) + loc_dropline_file=Constant.dropLine_set_file + if self.selected_line_section.endswith('-35'): + loc_dropline_file=Constant.dropLine_set_file_35 + DropPositionManager(loc_dropline_file).del_drop_point(section) else: config_writer = configparser.ConfigParser() config_writer.read(Constant.feedLine_set_file, encoding = 'utf-8') @@ -603,6 +610,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): } """) self.label_showDetection.setScaledContents(True) + self.comboBox_dropWeight.wheelEvent=lambda e:None if self.label_showDetection.size().width() < 100 or self.label_showDetection.size().height() < 100: self.label_showDetection.setMinimumSize(541, 321) @@ -767,14 +775,15 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.last_time = time.time() self.remain_lineName = self.configReader.get('Robot_Feed', 'remain_lineName') + self.remain_drop_weight = self.configReader.get("Robot_Feed", "remain_dropweight_kg") # 9/29 投料重量, 单位kg self.remain_Count = int(self.configReader.get('Robot_Feed', 'remain_Count')) self.maduo_Count = int(self.configReader.get('Robot_Feed', 'maduo_Count')) self.label_remain_num.setText(str(self.remain_Count)) self.label_maxNum.setText(str(self.maduo_Count)) - _cur_sel_button=[button for button in self.frame_23.findChildren(QPushButton) if button.text()==str(self.maduo_Count)] - if _cur_sel_button: - _cur_sel_button[0].setStyleSheet(self.pushbutton_num_style_select) - self.cur_pushbutton_num = _cur_sel_button[0] + # _cur_sel_button=[button for button in self.frame_23.findChildren(QPushButton) if button.text()==str(self.maduo_Count)] + # if _cur_sel_button: + # _cur_sel_button[0].setStyleSheet(self.pushbutton_num_style_select) + # self.cur_pushbutton_num = _cur_sel_button[0] self.horizontalSlider_feedingNum.setMaximum(self.maduo_Count) self.updateUI_seting.connect(self.update_seting_frame) try: @@ -915,11 +924,21 @@ class MainWindow(QMainWindow, Ui_MainWindow): feed_line.read_line_model(config_reader=configReader,index=i) self.feedLine_dict[f'{Constant.feedLine_set_section}{i}'] = feed_line #加载所有码垛的路径信息 - for i in range(1,Constant.MAX_Line_num): - line_model = self.drop_position_manager.load_path_points(i) - if line_model: - self.feedLine_dict[f'{Constant.dropLine_set_section}{i}'] = line_model - self.updateUI_Select_Line() + # for i in range(1,Constant.MAX_Line_num): + # line_model = self.drop_position_manager.load_path_points(i) + # if line_model: + # self.feedLine_dict[f'{Constant.dropLine_set_section}{i}'] = line_model + line_model = DropPositionManager(Constant.dropLine_set_file).load_path_points(1) + if line_model: + self.feedLine_dict[f'{Constant.dropLine_set_section}-50'] = line_model + line_model = DropPositionManager(Constant.dropLine_set_file_35).load_path_points(1) + if line_model: + self.feedLine_dict[f'{Constant.dropLine_set_section}-35'] = line_model + + # self.updateUI_Select_Line() + # 9/29 初始化线名选择框 和 重量选择框 + self.updateui_select_line_by_feedLine_ini() + self.updateui_select_dropweight_by_drop_ini() pass def init_robot_info(self): @@ -987,18 +1006,18 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.relay_controller._running=True self.relay_controller.pause_start_sensor(True) - self.detect_person_thread = Thread(target=self.run_detect_persion,name="run_detect_persion") + #self.detect_person_thread = Thread(target=self.run_detect_persion,name="run_detect_persion") # self.camera_threading = Thread(target=self.camera_img.run,name="camera",daemon=True) self.main_threading.start() self.reset_threading.start() if not Constant.DebugPosition: self.robot_connect_threading.start() # self.main_UI_threading.start() - self.detect_person_thread.start() - self.emergency_thread.start() + #self.detect_person_thread.start() + self.emergency_thread.start() #启动传感器线程 - self.sensor_thread.start() - self.sensor2_thread.start() + self.sensor_thread.start() + self.sensor2_thread.start() # self.camera_threading.start() @@ -1070,18 +1089,22 @@ class MainWindow(QMainWindow, Ui_MainWindow): return log.log_message(logging.INFO, '第一层确认生产') - has_person = False - # has_person, _ = self.detection_person.get_person() # TODO - if has_person: # TODO - # self.feeding.pause = True - # self.send_pause_command(True) - # - # self.show_messagebox_of_person() - msg_box_person.setText("检测到安全区域后人是否继续生产?") - result = msg_box_person.exec() - if msg_box_person.clickedButton() == cancel_button: - return - log.log_message(logging.ERROR, '人员进入安全区') + # has_person = False + # # has_person, _ = self.detection_person.get_person() # TODO + # if has_person: # TODO + # # self.feeding.pause = True + # # self.send_pause_command(True) + # # + # # self.show_messagebox_of_person() + # msg_box_person.setText("检测到安全区域后人是否继续生产?") + # result = msg_box_person.exec() + # if msg_box_person.clickedButton() == cancel_button: + # return + # log.log_message(logging.ERROR, '人员进入安全区') + msg_box_person.setText(f"确认当前码垛重量是 {self.remain_drop_weight}KG!!") + result = msg_box_person.exec() + if msg_box_person.clickedButton() == cancel_button: + return #QSlide控件默认的最大值为99 num = self.horizontalSlider_feedingNum.maximum() # if num==99: @@ -1089,14 +1112,32 @@ class MainWindow(QMainWindow, Ui_MainWindow): line_head = self.comboBox_lineIndex.currentData() if self.feeding.feedConfig: self.remain_Count=self.feeding.feedConfig.remain_count + msg_box_person.setText(f"当前是从第{self.remain_Count+1}袋开始,总共需要{num}袋") result = msg_box_person.exec() if msg_box_person.clickedButton() == cancel_button: return self.label_button_status.setText("运行中...") + if self.remain_drop_weight == '35': + self.drop_position_manager=DropPositionManager(Constant.dropLine_set_file_35) + self.relay_controller.set_drop_35(True) + else: + self.drop_position_manager=DropPositionManager(Constant.dropLine_set_file) + self.relay_controller.set_drop_35(False) # num=25 #先默认30包码垛 - self.command_quene.put(FeedCommand(FeedingConfig(num, FeedLine(self.feedLine_dict[line_head].id,self.feedLine_dict[line_head].name,self.feedLine_dict[line_head].positions,self.remain_Count), self.feeding.robotClient.photo_locs[:],self.remain_Count))) + self.command_quene.put( + FeedCommand( + FeedingConfig(num, + FeedLine( + self.feedLine_dict[line_head].id, + self.feedLine_dict[line_head].name, + self.feedLine_dict[line_head].positions, + self.remain_Count, + self.drop_position_manager + ) + , self.feeding.robotClient.photo_locs[:],self.remain_Count + ))) # self.stackedWidget_num.setCurrentIndex(1) self.set_run_status_button(True) self.feeding.pause = False @@ -1184,7 +1225,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): def send_numkeybord_click(self): # 创建数字键盘对话框 num_dialog = QDialog(self) - num_dialog.setWindowTitle("数字键盘") + num_dialog.setWindowTitle("选择已码垛数") num_dialog.setWindowFlags(num_dialog.windowFlags() & ~Qt.WindowCloseButtonHint) num_dialog.setFixedSize(400, 500) @@ -1454,14 +1495,14 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.show_infomessage_box("急停按钮已按下,不能暂停,请先松开急停按钮") return if self.feeding.feedStatus == FeedStatus.FNone: - self.show_infomessage_box("当前没有运行中的工作,不能暂停") + self.show_infomessage_box("没有启动,不能暂停") return self.send_pauseFeed_click() pass def send_pauseFeed_click(self): """暂停/继续工作""" - if self.pushButton_pauseFeed.text() == '暂停': + if self.pushButton_pauseFeed.text() == '暂停': self.relay_controller.pause_start_sensor(True) icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemReboot)) self.pushButton_pauseFeed.setIcon(icon9) @@ -1471,16 +1512,24 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.send_pause_command(True) self.feeding.pause = True else: - self.relay_controller.pause_start_sensor(False) - icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) - self.pushButton_pauseFeed.setIcon(icon9) - self.pushButton_pauseFeed.setText('暂停') - self.label_button_status.setText("运行中...") - self.send_pause_command(False) - log.log_message(logging.INFO, Constant.str_feed_continue) - self.send_start_tool_command() - log.log_message(logging.INFO, Constant.str_sys_start_tool) - self.feeding.pause = False + #暂停后pushButton_pauseFeed的值是继续,再按急停,停止传感器和机械臂 + #is_emergency_pressed True没按下,False按下 + if self.is_emergency_pressed: + #已暂停,按急停 + self.relay_controller.pause_start_sensor(True) + self.send_pause_command(True) + self.feeding.pause = True + else: + self.relay_controller.pause_start_sensor(False) + icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) + self.pushButton_pauseFeed.setIcon(icon9) + self.pushButton_pauseFeed.setText('暂停') + self.label_button_status.setText("运行中...") + self.send_pause_command(False) + log.log_message(logging.INFO, Constant.str_feed_continue) + self.send_start_tool_command() + log.log_message(logging.INFO, Constant.str_sys_start_tool) + self.feeding.pause = False def send_tabWidget_control_change(self): @@ -1727,8 +1776,10 @@ class MainWindow(QMainWindow, Ui_MainWindow): else: if self.feeding.feedStatus == FeedStatus.FNone: self.stackedWidget_num.setCurrentIndex(0) + self.comboBox_dropWeight.setDisabled(False) else: self.stackedWidget_num.setCurrentIndex(1) + self.comboBox_dropWeight.setDisabled(True) self.label_date.setText(datetime.now().strftime("%Y-%m-%d")) @@ -1766,6 +1817,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): # self.feeding.pause = True # self.relay_controller.pause_start_sensor(True) self.stop_all_work() + self.relay_controller.close(blow_sensor2=True) msg_box_finish = QMessageBox() msg_box_finish.setIcon(QMessageBox.Icon.Warning) msg_box_finish.setText("码垛完成,请移走拖板") @@ -1816,8 +1868,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): if emergency_pressed: if not self.is_emergency_pressed: print('急停按钮按下') - self.send_pauseFeed_click() self.is_emergency_pressed = True + self.send_pauseFeed_click() self.label_button_status.setText("急停中,禁止操作") else: if self.is_emergency_pressed: @@ -1873,6 +1925,127 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.comboBox_lineIndex.clear() for key, value in self.feedLine_dict.items(): self.comboBox_lineIndex.addItem(value.name, key) + + + # 9/29: 只需要加载FeedLine.ini中的name 作为comboBox_lineIndex的选项 + def updateui_select_line_by_feedLine_ini(self): + self.comboBox_lineIndex.clear() + configReader = configparser.ConfigParser() + configReader.read(Constant.feedLine_set_file, encoding="utf-8") + for index in range(1, Constant.MAX_Line_num): + section = f"{Constant.feedLine_set_section}{index}" + if configReader.has_section(section): + line_name = configReader.get(section, "name") + self.comboBox_lineIndex.addItem(line_name, section) + + # 设置初始化选中,初始选中 f'{Constant.feedLine_set_section}{self.remain_linename}' + if self.remain_lineName: + selected_value = f"{Constant.feedLine_set_section}{self.remain_lineName}" + selected_index = self.comboBox_lineIndex.findData(selected_value) + if selected_index >= 0: + self.comboBox_lineIndex.setCurrentIndex(selected_index) + + # 9/29 初始化加载 drop.ini 中的name,获取预先设置的重量 + def updateui_select_dropweight_by_drop_ini(self): + self.comboBox_dropWeight.clear() + configReader = configparser.ConfigParser() + # 读取重量路径配置文件 drop.ini + configReader.read(Constant.dropLine_set_file, encoding="utf-8") + + # drop_name匹配xxxkg获取重量 + weight_pattern = re.compile(r'(\d+kg)') + + for index in range(1, Constant.MAX_Line_num): + section = f"{Constant.dropLine_set_section}{index}" + if configReader.has_section(section): + drop_name = configReader.get(section, "name") + match = weight_pattern.search(drop_name) + if match: + # 提取匹配到的内容(如"50kg") + weight_text = match.group(1) + else: + # 无法匹配xxxkg, 则使用"未知重量" + weight_text = "未知重量" + # userData: 如 DropLine50kg + userData = f"{Constant.dropLine_set_section}{weight_text}" + self.comboBox_dropWeight.addItem(weight_text, userData) + + # 连接槽函数 + self.comboBox_dropWeight.activated.connect(self.on_drop_weight_changed) + + # 设置初始化选中的重量 + if self.remain_drop_weight: + # selected_value: 如 DropLine50kg + selected_value = f"{Constant.dropLine_set_section}{self.remain_drop_weight}kg" + selected_index = self.comboBox_dropWeight.findData(selected_value) + if selected_index >= 0: + self.comboBox_dropWeight.setCurrentIndex(selected_index) + self.drop_weight_index=selected_index + # 初始化重量提示标签 + self.weight_label_info.setText(f"{self.remain_drop_weight}kg码垛") + + + """9/29 重量下拉框选中项变化时, 更新self.remain_drop_weight""" + def on_drop_weight_changed(self, index): + #提示 + msgBox = QMessageBox(self) + msgBox.setIcon(QMessageBox.Icon.Information) + msgBox.setText("会从第1包开始,是否继续?") + msgBox.setWindowTitle("提示") + font=QFont("Microsoft YaHei UI",40) + msgBox.setFont(font) + ok_button = msgBox.addButton("是", PySide6.QtWidgets.QMessageBox.ButtonRole.AcceptRole) + cancel_button = msgBox.addButton("否", PySide6.QtWidgets.QMessageBox.ButtonRole.RejectRole) + + ok_button.setStyleSheet("QPushButton { color: #fff; background-color: red;margin-right: 80px;padding:15px;font-size:40px }") + cancel_button.setStyleSheet("QPushButton { margin-right: 10px;padding:15px;font-size:40px }") + # msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) + result = msgBox.exec() + if msgBox.clickedButton() == cancel_button: + self.comboBox_dropWeight.setCurrentIndex(self.drop_weight_index) + return + else: + self.drop_weight_index=index + # 默认的重量为 50 kg + default_weight = '50' + + if index < 0: # 没有选中项时(如下拉框为空) + self.remain_drop_weight = default_weight + return + + # 获取当前选中项的显示文本(如"50kg") + selected_text = self.comboBox_dropWeight.currentText() + + # 提取重量数值(从"50kg"中提取"50") + weight_pattern = re.compile(r'(\d+)kg') + match = weight_pattern.search(selected_text) + if match: + # 提取数字部分(如"50") + self.remain_drop_weight = match.group(1) + else: + # 若为"未知重量",remain_drop_weight 也为 default_weight + self.remain_drop_weight = default_weight + + # 更新上方的码垛重量提示Tips: + self.weight_label_info.setText(f"{selected_text}码垛") + self.remain_Count=0 + if self.feeding.feedConfig: + self.feeding.feedConfig.remain_count = 0 + + self.label_remain_num.setText('0') + + #35KG + if self.remain_drop_weight=='35': + self.label_maxNum.setText('40') + self.horizontalSlider_feedingNum.setMaximum(40) + self.maduo_Count=40 + else: + self.label_maxNum.setText('30') + self.horizontalSlider_feedingNum.setMaximum(30) + self.maduo_Count=30 + self.record_weight_ini(self.remain_Count,self.maduo_Count,self.remain_drop_weight) + + def updateUI_label_status(self): if self.robotClient.status_model.isMoving==1: self.label_move_sign.show() @@ -2369,6 +2542,9 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.feeding.onekey = True def send_exit_button_click(self): + if self.feeding.feedStatus != FeedStatus.FNone: + self.show_infomessage_box("请先停止后,再退出程序") + return self.close() # self.closeEvent(None) # QApplication.quit() @@ -2426,6 +2602,18 @@ class MainWindow(QMainWindow, Ui_MainWindow): except: log.log_message(logging.ERROR, Constant.str_sys_log_feedNum) + #记录投料袋数 + def record_weight_ini(self,remain_count,maduo_count,drop_weight): + try: + self.configReader = configparser.ConfigParser() + self.configReader.read(Constant.set_ini) + self.configReader.set('Robot_Feed', 'remain_count', str(remain_count)) + self.configReader.set('Robot_Feed', 'maduo_count', str(maduo_count)) + self.configReader.set('Robot_Feed', 'remain_dropweight_kg', str(drop_weight)) + self.configReader.write(open(Constant.set_ini, 'w', encoding='utf-8')) + except: + log.log_message(logging.ERROR, Constant.str_sys_log_feedNum+"2") + class MyApplication(QApplication): def __init__(self, argv): diff --git a/test.py b/test.py deleted file mode 100644 index 941d1a2..0000000 --- a/test.py +++ /dev/null @@ -1,51 +0,0 @@ -from PySide6.QtCore import QThread, Signal, Slot -from PySide6.QtWidgets import QApplication, QDialog, QLabel, QVBoxLayout, QPushButton -import sys -import time - -# 定义子线程类 -class WorkerThread(QThread): - # 创建信号,子线程处理完成后通知主线程弹窗 - show_dialog_signal = Signal(str) - - def run(self): - # 模拟子线程的工作 - time.sleep(3) # 假设任务执行需要 3 秒钟 - self.show_dialog_signal.emit("任务完成,弹出对话框") # 发出信号,通知主线程弹窗 - print("子线程") - -# 定义主窗口类 -class MainWindow(QDialog): - def __init__(self): - super().__init__() - self.setWindowTitle("主窗口") - self.setGeometry(100, 100, 300, 200) - - self.button = QPushButton("开始任务", self) - self.button.clicked.connect(self.start_task) - - layout = QVBoxLayout(self) - layout.addWidget(self.button) - - @Slot(str) - def show_dialog(self, message): - # 接收到信号后显示弹窗 - dialog = QDialog(self) - dialog.setWindowTitle("子线程通知") - label = QLabel(message, dialog) - dialog_layout = QVBoxLayout(dialog) - dialog_layout.addWidget(label) - dialog.exec() - - def start_task(self): - # 创建并启动子线程 - self.thread = WorkerThread() - self.thread.show_dialog_signal.connect(self.show_dialog) # 连接信号到主线程的槽函数 - self.thread.start() - -# 创建应用程序 -app = QApplication(sys.argv) -window = MainWindow() -window.show() - -sys.exit(app.exec()) diff --git a/test2.py b/test2.py deleted file mode 100644 index be5297b..0000000 --- a/test2.py +++ /dev/null @@ -1,54 +0,0 @@ -import threading - -from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox -from PySide6.QtCore import QThread, Signal, QObject - -class Worker: - # 定义一个类属性的信号 - - def __init__(self): - self.task_done_signal = Signal(str) - def run_task(self): - import time - time.sleep(2) # 模拟耗时操作 - # 发送信号 - self.task_done_signal.emit("子线程任务完成!") - - -class MainWindow(QMainWindow): - def __init__(self): - super().__init__() - self.setWindowTitle("子线程信号示例") - self.setGeometry(200, 200, 400, 300) - - # 添加按钮 - self.button = QPushButton("启动子线程", self) - self.button.setGeometry(100, 100, 200, 50) - self.button.clicked.connect(self.run_task) - - # 创建子线程和工作者对象 - self.worker_thread = threading.Thread(target=self.run_task) - self.worker = Worker() - - # 连接信号和槽 - self.worker.task_done_signal.connect(self.show_message) - - def run_task(self): - # 启动子线程 - self.worker_thread.start() - - def show_message(self, message): - # 显示来自子线程的消息 - QMessageBox.information(self, "任务完成", message) - - # 停止子线程 - self.worker_thread.quit() - self.worker_thread.wait() - -if __name__ == "__main__": - app = QApplication([]) - - window = MainWindow() - window.show() - - app.exec() diff --git a/test6.py b/test6.py deleted file mode 100644 index 59f4bc6..0000000 --- a/test6.py +++ /dev/null @@ -1,37 +0,0 @@ -import os -import sys -import time -from Mv3D.CameraUtil import CameraUtil -from Mv3D.calculate_diff2 import calculate_offset_from_image - -if __name__=='__main__': - - camera_img=CameraUtil() - loc_image_path=camera_img.save_img() - print(f"保存图片路径:{loc_image_path}") - try: - loc_model_result = calculate_offset_from_image(loc_image_path, visualize=False) - if loc_model_result['success']: - #置信度 - if loc_model_result['obj_conf']>0.5: - loc_offsetX=loc_model_result['dx_mm'] - if abs(loc_model_result['dx_mm'])<200: - loc_is_next=True - print(f'{loc_image_path}:料带偏移{loc_offsetX}mm') - else: - print(f"{loc_image_path}:料带偏移过大,报警") - # self.feed_error_signal.emit(1,f"{loc_image_path}:料带偏移过大,报警") - else: - print(f"{loc_image_path}:未检测到料带,置信度低") - # self.feed_error_signal.emit(2,f"{loc_image_path}:未检测到料带,置信度低") - else: - print(f"{loc_image_path}:计算偏移失败,视觉返回False") - # self.feed_error_signal.emit(2,f"{loc_image_path}:计算偏移失败,视觉返回False") - # loc_is_next=False - loc_offsetX=0 - except Exception as e: - print(f"{loc_image_path}:计算偏移失败:{e}") - - time.sleep(10) - - diff --git a/test_ui.py b/test_ui.py deleted file mode 100644 index f9a01cd..0000000 --- a/test_ui.py +++ /dev/null @@ -1,39 +0,0 @@ -import sys -import cv2 -from PyQt5.QtGui import QImage, QPixmap -from PySide6.QtWidgets import QApplication, QLabel, QMainWindow - - -def cv2_to_qimage(cv_img): - """Convert an OpenCV image to QImage.""" - height, width, channel = cv_img.shape - bytes_per_line = 3 * width - q_img = QImage(cv_img.data, width, height, bytes_per_line, QImage.Format_BGR888) - return q_img - - -class MainWindow(QMainWindow): - def __init__(self): - super().__init__() - self.setWindowTitle("Display Image with PySide6") - self.resize(800, 600) - - - # 使用 OpenCV 读取图像 - cv_img = cv2.imread("./Image/1.png") # 替换为实际路径 - img = cv_img.copy() - # 转换为 QImage img = cv_img.copy() - q_img = cv2_to_qimage(cv_img) - - # 创建 QLabel 并设置图像 - label = QLabel(self) - label.setPixmap(QPixmap.fromImage(q_img)) - label.setScaledContents(True) - label.setGeometry(50, 50, 700, 500) # 调整位置和大小 - - -if __name__ == "__main__": - app = QApplication(sys.argv) - window = MainWindow() - window.show() - sys.exit(app.exec()) diff --git a/ui_MainWin - 副本 (2).py b/ui_MainWin - 副本 (2).py deleted file mode 100644 index 85e0082..0000000 --- a/ui_MainWin - 副本 (2).py +++ /dev/null @@ -1,4889 +0,0 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'MainWin.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import ( - QCoreApplication, - QDate, - QDateTime, - QLocale, - QMetaObject, - QObject, - QPoint, - QRect, - QSize, - QTime, - QUrl, - Qt, -) -from PySide6.QtGui import ( - QBrush, - QColor, - QConicalGradient, - QCursor, - QFont, - QFontDatabase, - QGradient, - QIcon, - QImage, - QKeySequence, - QLinearGradient, - QPainter, - QPalette, - QPixmap, - QRadialGradient, - QTransform, -) -from PySide6.QtWidgets import ( - QApplication, - QComboBox, - QFrame, - QGridLayout, - QHBoxLayout, - QHeaderView, - QLabel, - QLayout, - QLineEdit, - QMainWindow, - QPushButton, - QSizePolicy, - QSlider, - QStackedWidget, - QTabWidget, - QTableWidget, - QTableWidgetItem, - QTextEdit, - QVBoxLayout, - QWidget, -) - -from toggleswitch import ToggleSwitch -import MainRecources_rc - - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName("MainWindow") - MainWindow.resize(995, 733) - sizePolicy = QSizePolicy( - QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred - ) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) - MainWindow.setSizePolicy(sizePolicy) - self.centralwidget = QWidget(MainWindow) - self.centralwidget.setObjectName("centralwidget") - self.verticalLayout = QVBoxLayout(self.centralwidget) - self.verticalLayout.setSpacing(0) - self.verticalLayout.setObjectName("verticalLayout") - self.verticalLayout.setContentsMargins(0, 0, 0, 0) - self.frame_head = QFrame(self.centralwidget) - self.frame_head.setObjectName("frame_head") - sizePolicy1 = QSizePolicy( - QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding - ) - sizePolicy1.setHorizontalStretch(0) - sizePolicy1.setVerticalStretch(0) - sizePolicy1.setHeightForWidth(self.frame_head.sizePolicy().hasHeightForWidth()) - self.frame_head.setSizePolicy(sizePolicy1) - self.frame_head.setStyleSheet("background-color: #0D1128;") - self.frame_head.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_head.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout = QHBoxLayout(self.frame_head) - self.horizontalLayout.setSpacing(0) - self.horizontalLayout.setObjectName("horizontalLayout") - self.horizontalLayout.setContentsMargins(0, 0, 0, 0) - self.frame_4 = QFrame(self.frame_head) - self.frame_4.setObjectName("frame_4") - sizePolicy1.setHeightForWidth(self.frame_4.sizePolicy().hasHeightForWidth()) - self.frame_4.setSizePolicy(sizePolicy1) - self.frame_4.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_4.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_2 = QHBoxLayout(self.frame_4) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.label = QLabel(self.frame_4) - self.label.setObjectName("label") - sizePolicy1.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth()) - self.label.setSizePolicy(sizePolicy1) - self.label.setStyleSheet( - "border-image: url(:/main/Image/title_ico.png) 0 0 0 0 strech;\n" - "border-width: 5px 1px 3px 4px; \n" - "border-style: solid; " - ) - self.label.setScaledContents(False) - - self.horizontalLayout_2.addWidget(self.label) - - self.label_2 = QLabel(self.frame_4) - self.label_2.setObjectName("label_2") - sizePolicy1.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth()) - self.label_2.setSizePolicy(sizePolicy1) - self.label_2.setStyleSheet( - "color: #DBF4F5;\n" 'font: 700 12pt "Microsoft YaHei UI";' - ) - - self.horizontalLayout_2.addWidget(self.label_2) - - self.horizontalLayout_2.setStretch(0, 2) - self.horizontalLayout_2.setStretch(1, 10) - - self.horizontalLayout.addWidget(self.frame_4) - - self.frame = QFrame(self.frame_head) - self.frame.setObjectName("frame") - sizePolicy1.setHeightForWidth(self.frame.sizePolicy().hasHeightForWidth()) - self.frame.setSizePolicy(sizePolicy1) - self.frame.setStyleSheet( - "background-color: rgb(16, 21, 49);\n" "border: 1px solid #122041;" - ) - self.frame.setFrameShape(QFrame.Shape.StyledPanel) - self.frame.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_3 = QHBoxLayout(self.frame) - self.horizontalLayout_3.setSpacing(0) - self.horizontalLayout_3.setObjectName("horizontalLayout_3") - self.horizontalLayout_3.setSizeConstraint( - QLayout.SizeConstraint.SetDefaultConstraint - ) - self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) - self.pushButton = QPushButton(self.frame) - self.pushButton.setObjectName("pushButton") - sizePolicy1.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth()) - self.pushButton.setSizePolicy(sizePolicy1) - self.pushButton.setStyleSheet( - "\n" - "*{\n" - "color:#3479BE;\n" - "background-color: #111633;\n" - 'font: 12pt "Microsoft YaHei UI";\n' - "border: 1px;\n" - "padding:18px;\n" - "\n" - "}\n" - "*:hover{\n" - "color:#ffffff;\n" - "border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" - "background-color: #1A3E79;\n" - "}\n" - "*:pressed\n" - "{\n" - "color:#ffffff;\n" - "border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" - "background-color: #1A3E79;\n" - "}\n" - "" - ) - - self.horizontalLayout_3.addWidget(self.pushButton) - - self.pushButton_2 = QPushButton(self.frame) - self.pushButton_2.setObjectName("pushButton_2") - sizePolicy1.setHeightForWidth( - self.pushButton_2.sizePolicy().hasHeightForWidth() - ) - self.pushButton_2.setSizePolicy(sizePolicy1) - self.pushButton_2.setStyleSheet( - "\n" - "*{\n" - "color:#3479BE;\n" - "background-color: #111633;\n" - 'font: 12pt "Microsoft YaHei UI";\n' - "border: 1px;\n" - "padding:18px;\n" - "\n" - "}\n" - "*:pressed\n" - "{\n" - "color:#ffffff;\n" - "border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" - "background-color: #1A3E79;\n" - "}\n" - "" - ) - - self.horizontalLayout_3.addWidget(self.pushButton_2) - - self.pushButton_3 = QPushButton(self.frame) - self.pushButton_3.setObjectName("pushButton_3") - sizePolicy1.setHeightForWidth( - self.pushButton_3.sizePolicy().hasHeightForWidth() - ) - self.pushButton_3.setSizePolicy(sizePolicy1) - self.pushButton_3.setStyleSheet( - "\n" - "*{\n" - "color:#3479BE;\n" - "background-color: #111633;\n" - 'font: 12pt "Microsoft YaHei UI";\n' - "border: 1px;\n" - "padding:18px;\n" - "\n" - "}\n" - "*:pressed\n" - "{\n" - "color:#ffffff;\n" - "border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" - "background-color: #1A3E79;\n" - "}\n" - "" - ) - - self.horizontalLayout_3.addWidget(self.pushButton_3) - - self.pushButton_4 = QPushButton(self.frame) - self.pushButton_4.setObjectName("pushButton_4") - sizePolicy1.setHeightForWidth( - self.pushButton_4.sizePolicy().hasHeightForWidth() - ) - self.pushButton_4.setSizePolicy(sizePolicy1) - self.pushButton_4.setStyleSheet( - "\n" - "*{\n" - "color:#3479BE;\n" - "background-color: #111633;\n" - 'font: 12pt "Microsoft YaHei UI";\n' - "border: 1px;\n" - "padding:18px;\n" - "\n" - "}\n" - "*:pressed\n" - "{\n" - "color:#ffffff;\n" - "border-image: url(:/main/Image/backgroud_head_btn.jpg);\n" - "background-color: #1A3E79;\n" - "}\n" - "" - ) - - self.horizontalLayout_3.addWidget(self.pushButton_4) - - self.horizontalLayout.addWidget(self.frame) - - self.frame_3 = QFrame(self.frame_head) - self.frame_3.setObjectName("frame_3") - sizePolicy1.setHeightForWidth(self.frame_3.sizePolicy().hasHeightForWidth()) - self.frame_3.setSizePolicy(sizePolicy1) - self.frame_3.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_3.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_5 = QHBoxLayout(self.frame_3) - self.horizontalLayout_5.setObjectName("horizontalLayout_5") - self.pushButton_5 = QPushButton(self.frame_3) - self.pushButton_5.setObjectName("pushButton_5") - sizePolicy1.setHeightForWidth( - self.pushButton_5.sizePolicy().hasHeightForWidth() - ) - self.pushButton_5.setSizePolicy(sizePolicy1) - self.pushButton_5.setStyleSheet( - "*{\n" - "color:#838992;\n" - "background-color: #1B1F34;\n" - 'font: 9pt "Microsoft YaHei UI";\n' - "border: 1px solid #282B40;\n" - "}\n" - "*:pressed\n" - "{\n" - "color:#ffffff;\n" - "background-color: #1A3E79;\n" - "}\n" - "" - ) - icon = QIcon() - icon.addFile( - ":/main/Image/login.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off - ) - self.pushButton_5.setIcon(icon) - - self.horizontalLayout_5.addWidget(self.pushButton_5) - - self.pushButton_exit = QPushButton(self.frame_3) - self.pushButton_exit.setObjectName("pushButton_exit") - sizePolicy1.setHeightForWidth( - self.pushButton_exit.sizePolicy().hasHeightForWidth() - ) - self.pushButton_exit.setSizePolicy(sizePolicy1) - self.pushButton_exit.setStyleSheet( - "*{\n" - "color:#838992;\n" - "background-color: #1B1F34;\n" - 'font: 9pt "Microsoft YaHei UI";\n' - "border: 1px solid #282B40;\n" - "}\n" - "*:pressed\n" - "{\n" - "color:#ffffff;\n" - "background-color: #1A3E79;\n" - "}\n" - "" - ) - icon1 = QIcon() - icon1.addFile( - ":/main/Image/logout.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off - ) - self.pushButton_exit.setIcon(icon1) - - self.horizontalLayout_5.addWidget(self.pushButton_exit) - - self.horizontalLayout.addWidget(self.frame_3) - - self.horizontalLayout.setStretch(0, 45) - self.horizontalLayout.setStretch(1, 137) - self.horizontalLayout.setStretch(2, 59) - - self.verticalLayout.addWidget(self.frame_head) - - self.frame_main = QFrame(self.centralwidget) - self.frame_main.setObjectName("frame_main") - self.frame_main.setStyleSheet("background-color: #0D1128;") - self.frame_main.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_main.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_4 = QHBoxLayout(self.frame_main) - self.horizontalLayout_4.setSpacing(0) - self.horizontalLayout_4.setObjectName("horizontalLayout_4") - self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) - self.frame_left_menu = QFrame(self.frame_main) - self.frame_left_menu.setObjectName("frame_left_menu") - sizePolicy1.setHeightForWidth( - self.frame_left_menu.sizePolicy().hasHeightForWidth() - ) - self.frame_left_menu.setSizePolicy(sizePolicy1) - self.frame_left_menu.setStyleSheet( - "background-color: #0D1128;\n" "border: 1px solid #324C82;" - ) - self.verticalLayout_2 = QVBoxLayout(self.frame_left_menu) - self.verticalLayout_2.setSpacing(8) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.verticalLayout_2.setSizeConstraint( - QLayout.SizeConstraint.SetDefaultConstraint - ) - self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) - self.frame_2 = QFrame(self.frame_left_menu) - self.frame_2.setObjectName("frame_2") - sizePolicy2 = QSizePolicy( - QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed - ) - sizePolicy2.setHorizontalStretch(0) - sizePolicy2.setVerticalStretch(0) - sizePolicy2.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) - self.frame_2.setSizePolicy(sizePolicy2) - self.frame_2.setStyleSheet("background-color: #0D1128;\n" "border: none;") - self.frame_2.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_2.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_3 = QVBoxLayout(self.frame_2) - self.verticalLayout_3.setSpacing(0) - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) - self.pushButton_sysseting = QPushButton(self.frame_2) - self.pushButton_sysseting.setObjectName("pushButton_sysseting") - sizePolicy3 = QSizePolicy( - QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed - ) - sizePolicy3.setHorizontalStretch(0) - sizePolicy3.setVerticalStretch(0) - sizePolicy3.setHeightForWidth( - self.pushButton_sysseting.sizePolicy().hasHeightForWidth() - ) - self.pushButton_sysseting.setSizePolicy(sizePolicy3) - self.pushButton_sysseting.setStyleSheet( - " QPushButton {\n" - " \n" - " color: white; /* \u6309\u94ae\u6587\u672c\u989c\u8272 */\n" - " background-color: rgb(25, 30, 54);\n" - " padding: 10px ; /* \u6309\u94ae\u5185\u8fb9\u8ddd */\n" - ' font: 12pt "Microsoft YaHei UI";\n' - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn.jpg);\n" - " }" - ) - icon2 = QIcon() - icon2.addFile( - ":/main/Image/icon_leftMenu_btn_sys.svg", - QSize(), - QIcon.Mode.Normal, - QIcon.State.Off, - ) - self.pushButton_sysseting.setIcon(icon2) - self.pushButton_sysseting.setIconSize(QSize(20, 20)) - - self.verticalLayout_3.addWidget(self.pushButton_sysseting) - - self.frame_sys_seting = QFrame(self.frame_2) - self.frame_sys_seting.setObjectName("frame_sys_seting") - sizePolicy4 = QSizePolicy( - QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding - ) - sizePolicy4.setHorizontalStretch(0) - sizePolicy4.setVerticalStretch(0) - sizePolicy4.setHeightForWidth( - self.frame_sys_seting.sizePolicy().hasHeightForWidth() - ) - self.frame_sys_seting.setSizePolicy(sizePolicy4) - self.frame_sys_seting.setStyleSheet("\n" "background-color: rgb(13, 17, 40);") - self.frame_sys_seting.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_sys_seting.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_6 = QHBoxLayout(self.frame_sys_seting) - self.horizontalLayout_6.setSpacing(0) - self.horizontalLayout_6.setObjectName("horizontalLayout_6") - self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0) - self.frame_9 = QFrame(self.frame_sys_seting) - self.frame_9.setObjectName("frame_9") - self.frame_9.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_9.setFrameShadow(QFrame.Shadow.Raised) - - self.horizontalLayout_6.addWidget(self.frame_9) - - self.frame_10 = QFrame(self.frame_sys_seting) - self.frame_10.setObjectName("frame_10") - self.frame_10.setStyleSheet("background-color: rgb(13, 17, 40);") - self.frame_10.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_10.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_4 = QVBoxLayout(self.frame_10) - self.verticalLayout_4.setObjectName("verticalLayout_4") - self.pushButton_leftmenu_produce = QPushButton(self.frame_10) - self.pushButton_leftmenu_produce.setObjectName("pushButton_leftmenu_produce") - sizePolicy5 = QSizePolicy( - QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding - ) - # sizePolicy5 = QSizePolicy( - # QSizePolicy.Policy.Expanding, # 水平方向 - # QSizePolicy.Policy.Expanding, # 垂直方向 - # ) - sizePolicy5.setHorizontalStretch(0) # 设置水平扩展 - sizePolicy5.setVerticalStretch(0) - sizePolicy5.setHeightForWidth( - self.pushButton_leftmenu_produce.sizePolicy().hasHeightForWidth() - ) - self.pushButton_leftmenu_produce.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_produce.setStyleSheet( - "\n" - "\n" - " QPushButton {\n" - " \n" - " background-color: rgb(16, 31, 63);\n" - " color: rgb(255, 255, 255);\n" - "\n" - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "\n" - " }\n" - "*:pressed\n" - "{\n" - "border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "}\n" - "" - ) - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_produce) - - self.pushButton_leftmenu_robot_seting = QPushButton(self.frame_10) - self.pushButton_leftmenu_robot_seting.setObjectName( - "pushButton_leftmenu_robot_seting" - ) - sizePolicy5.setHeightForWidth( - self.pushButton_leftmenu_robot_seting.sizePolicy().hasHeightForWidth() - ) - self.pushButton_leftmenu_robot_seting.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_robot_seting.setStyleSheet( - "\n" - "\n" - " QPushButton {\n" - " \n" - " background-color: rgb(16, 31, 63);\n" - " color: rgb(255, 255, 255);\n" - "\n" - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "\n" - " }\n" - "*:pressed\n" - "{\n" - "border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "}\n" - "" - ) - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_robot_seting) - - self.pushButton_leftmenu_IO = QPushButton(self.frame_10) - self.pushButton_leftmenu_IO.setObjectName("pushButton_leftmenu_IO") - sizePolicy5.setHeightForWidth( - self.pushButton_leftmenu_IO.sizePolicy().hasHeightForWidth() - ) - self.pushButton_leftmenu_IO.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_IO.setStyleSheet( - "\n" - "\n" - " QPushButton {\n" - " \n" - " background-color: rgb(16, 31, 63);\n" - " color: rgb(255, 255, 255);\n" - "\n" - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "\n" - " }\n" - "*:pressed\n" - "{\n" - "border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "}\n" - "" - ) - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_IO) - - self.pushButton_leftmenu_position = QPushButton(self.frame_10) - self.pushButton_leftmenu_position.setObjectName("pushButton_leftmenu_position") - sizePolicy5.setHeightForWidth( - self.pushButton_leftmenu_position.sizePolicy().hasHeightForWidth() - ) - self.pushButton_leftmenu_position.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_position.setStyleSheet( - "\n" - "\n" - " QPushButton {\n" - " \n" - " background-color: rgb(16, 31, 63);\n" - " color: rgb(255, 255, 255);\n" - "\n" - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "\n" - " }\n" - "*:pressed\n" - "{\n" - "border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "}\n" - "" - ) - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_position) - - self.pushButton_leftmenu_baseSeting = QPushButton(self.frame_10) - self.pushButton_leftmenu_baseSeting.setObjectName( - "pushButton_leftmenu_baseSeting" - ) - sizePolicy5.setHeightForWidth( - self.pushButton_leftmenu_baseSeting.sizePolicy().hasHeightForWidth() - ) - self.pushButton_leftmenu_baseSeting.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_baseSeting.setStyleSheet( - "\n" - "\n" - " QPushButton {\n" - " \n" - " background-color: rgb(16, 31, 63);\n" - " color: rgb(255, 255, 255);\n" - "\n" - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "\n" - " }\n" - "*:pressed\n" - "{\n" - "border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "}\n" - "" - ) - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_baseSeting) - - self.pushButton_leftmenu_posDebug = QPushButton(self.frame_10) - self.pushButton_leftmenu_posDebug.setObjectName("pushButton_leftmenu_posDebug") - sizePolicy5.setHeightForWidth( - self.pushButton_leftmenu_posDebug.sizePolicy().hasHeightForWidth() - ) - self.pushButton_leftmenu_posDebug.setSizePolicy(sizePolicy5) - self.pushButton_leftmenu_posDebug.setStyleSheet( - "\n" - "\n" - " QPushButton {\n" - " \n" - " background-color: rgb(16, 31, 63);\n" - " color: rgb(255, 255, 255);\n" - "\n" - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "\n" - " }\n" - "*:pressed\n" - "{\n" - "border-image: url(:/main/Image/backgroud_leftMenu_btn_child.jpg);\n" - "}\n" - "" - ) - - self.verticalLayout_4.addWidget(self.pushButton_leftmenu_posDebug) - - self.horizontalLayout_6.addWidget(self.frame_10) - - self.horizontalLayout_6.setStretch(0, 1) - self.horizontalLayout_6.setStretch(1, 7) - - self.verticalLayout_3.addWidget(self.frame_sys_seting) - - self.verticalLayout_3.setStretch(0, 15) - - self.verticalLayout_2.addWidget(self.frame_2) - - self.frame_5 = QFrame(self.frame_left_menu) - self.frame_5.setObjectName("frame_5") - self.frame_5.setStyleSheet("border: none;") - self.frame_5.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_5.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_6 = QVBoxLayout(self.frame_5) - self.verticalLayout_6.setSpacing(0) - self.verticalLayout_6.setObjectName("verticalLayout_6") - self.verticalLayout_6.setContentsMargins(0, 0, 0, 0) - self.pushButton_11 = QPushButton(self.frame_5) - self.pushButton_11.setObjectName("pushButton_11") - sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Fixed) - sizePolicy6.setHorizontalStretch(0) - sizePolicy6.setVerticalStretch(0) - sizePolicy6.setHeightForWidth( - self.pushButton_11.sizePolicy().hasHeightForWidth() - ) - self.pushButton_11.setSizePolicy(sizePolicy6) - self.pushButton_11.setStyleSheet( - " QPushButton {\n" - " \n" - " color: white; /* \u6309\u94ae\u6587\u672c\u989c\u8272 */\n" - " background-color: rgb(25, 30, 54);\n" - " padding: 10px ; /* \u6309\u94ae\u5185\u8fb9\u8ddd */\n" - ' font: 12pt "Microsoft YaHei UI";\n' - " }\n" - " QPushButton:hover {\n" - " border-image: url(:/main/Image/backgroud_leftMenu_btn.jpg);\n" - " }" - ) - icon3 = QIcon() - icon3.addFile( - ":/main/Image/icon_other.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off - ) - self.pushButton_11.setIcon(icon3) - self.pushButton_11.setIconSize(QSize(20, 20)) - - self.verticalLayout_6.addWidget(self.pushButton_11) - - self.frame_other_set = QFrame(self.frame_5) - self.frame_other_set.setObjectName("frame_other_set") - self.frame_other_set.setStyleSheet("\n" "background-color: rgb(13, 17, 40);") - self.frame_other_set.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_other_set.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_7 = QHBoxLayout(self.frame_other_set) - self.horizontalLayout_7.setSpacing(0) - self.horizontalLayout_7.setObjectName("horizontalLayout_7") - self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0) - self.frame_12 = QFrame(self.frame_other_set) - self.frame_12.setObjectName("frame_12") - self.frame_12.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_12.setFrameShadow(QFrame.Shadow.Raised) - - self.horizontalLayout_7.addWidget(self.frame_12) - - self.frame_13 = QFrame(self.frame_other_set) - self.frame_13.setObjectName("frame_13") - self.frame_13.setStyleSheet("background-color: rgb(13, 17, 40);") - self.frame_13.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_13.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_5 = QVBoxLayout(self.frame_13) - self.verticalLayout_5.setSpacing(5) - self.verticalLayout_5.setObjectName("verticalLayout_5") - self.verticalLayout_5.setContentsMargins(5, 5, 5, 5) - - self.horizontalLayout_7.addWidget(self.frame_13) - - self.horizontalLayout_7.setStretch(0, 1) - self.horizontalLayout_7.setStretch(1, 7) - - self.verticalLayout_6.addWidget(self.frame_other_set) - - self.verticalLayout_6.setStretch(0, 15) - self.verticalLayout_6.setStretch(1, 30) - - self.verticalLayout_2.addWidget(self.frame_5) - - self.verticalLayout_2.setStretch(0, 1) - self.verticalLayout_2.setStretch(1, 1) - - self.horizontalLayout_4.addWidget(self.frame_left_menu) - - self.frame_view = QFrame(self.frame_main) - self.frame_view.setObjectName("frame_view") - sizePolicy1.setHeightForWidth(self.frame_view.sizePolicy().hasHeightForWidth()) - self.frame_view.setSizePolicy(sizePolicy1) - self.frame_view.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_view.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_8 = QVBoxLayout(self.frame_view) - self.verticalLayout_8.setSpacing(0) - self.verticalLayout_8.setObjectName("verticalLayout_8") - self.verticalLayout_8.setContentsMargins(0, 0, 0, 0) - self.stackedWidget_view = QStackedWidget(self.frame_view) - self.stackedWidget_view.setObjectName("stackedWidget_view") - sizePolicy1.setHeightForWidth( - self.stackedWidget_view.sizePolicy().hasHeightForWidth() - ) - self.stackedWidget_view.setSizePolicy(sizePolicy1) - self.page_3 = QWidget() - self.page_3.setObjectName("page_3") - self.verticalLayout_7 = QVBoxLayout(self.page_3) - self.verticalLayout_7.setSpacing(0) - self.verticalLayout_7.setObjectName("verticalLayout_7") - self.verticalLayout_7.setContentsMargins(0, 0, 0, 0) - self.frame_14 = QFrame(self.page_3) - self.frame_14.setObjectName("frame_14") - self.frame_14.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_14.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_9 = QVBoxLayout(self.frame_14) - self.verticalLayout_9.setSpacing(0) - self.verticalLayout_9.setObjectName("verticalLayout_9") - self.verticalLayout_9.setContentsMargins(0, 0, 0, 0) - self.frame_showDetection = QFrame(self.frame_14) - self.frame_showDetection.setObjectName("frame_showDetection") - self.frame_showDetection.setStyleSheet("") - self.frame_showDetection.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_showDetection.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_14 = QVBoxLayout(self.frame_showDetection) - self.verticalLayout_14.setObjectName("verticalLayout_14") - self.frame_sign_2 = QFrame(self.frame_showDetection) - self.frame_sign_2.setObjectName("frame_sign_2") - sizePolicy1.setHeightForWidth( - self.frame_sign_2.sizePolicy().hasHeightForWidth() - ) - self.frame_sign_2.setSizePolicy(sizePolicy1) - self.frame_sign_2.setStyleSheet( - "background-color: rgba(255, 255, 255, 0);\n" "border-image: None;" - ) - self.frame_sign_2.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_sign_2.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_4 = QGridLayout(self.frame_sign_2) - self.gridLayout_4.setObjectName("gridLayout_4") - self.pushButton_sign_go = QPushButton(self.frame_sign_2) - self.pushButton_sign_go.setObjectName("pushButton_sign_go") - sizePolicy1.setHeightForWidth( - self.pushButton_sign_go.sizePolicy().hasHeightForWidth() - ) - self.pushButton_sign_go.setSizePolicy(sizePolicy1) - self.pushButton_sign_go.setStyleSheet( - "*{\n" - "background-color: #7A7A7A;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 5px;\n" - "}\n" - "*:disabled\n" - "{\n" - "background-color: #ff6e00;\n" - "}\n" - "\n" - "" - ) - - self.gridLayout_4.addWidget(self.pushButton_sign_go, 0, 0, 1, 1) - - self.label_sign_go = QLabel(self.frame_sign_2) - self.label_sign_go.setObjectName("label_sign_go") - sizePolicy1.setHeightForWidth( - self.label_sign_go.sizePolicy().hasHeightForWidth() - ) - self.label_sign_go.setSizePolicy(sizePolicy1) - self.label_sign_go.setStyleSheet( - "\n" - "QLabel:disabled{\n" - " background-color: rgba(255, 255, 255, 0);\n" - ' font: 700 12pt "Microsoft YaHei UI";\n' - " color: red;\n" - "}\n" - "\n" - "QLabel{\n" - "background-color: rgba(255, 255, 255, 0);\n" - 'font: 700 12pt "Microsoft YaHei UI";\n' - "color:#7A7A7A;\n" - "}" - ) - self.label_sign_go.setAlignment( - Qt.AlignmentFlag.AlignLeading - | Qt.AlignmentFlag.AlignLeft - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_4.addWidget(self.label_sign_go, 0, 1, 1, 1) - - self.pushButton_sign_photo = QPushButton(self.frame_sign_2) - self.pushButton_sign_photo.setObjectName("pushButton_sign_photo") - sizePolicy1.setHeightForWidth( - self.pushButton_sign_photo.sizePolicy().hasHeightForWidth() - ) - self.pushButton_sign_photo.setSizePolicy(sizePolicy1) - self.pushButton_sign_photo.setStyleSheet( - "*{\n" - "background-color: #7A7A7A;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 5px;\n" - "}\n" - "*:disabled\n" - "{\n" - "background-color: #ff6e00;\n" - "}\n" - "\n" - "" - ) - - self.gridLayout_4.addWidget(self.pushButton_sign_photo, 0, 2, 1, 1) - - self.label_sign_photo = QLabel(self.frame_sign_2) - self.label_sign_photo.setObjectName("label_sign_photo") - sizePolicy1.setHeightForWidth( - self.label_sign_photo.sizePolicy().hasHeightForWidth() - ) - self.label_sign_photo.setSizePolicy(sizePolicy1) - self.label_sign_photo.setStyleSheet( - "\n" - "QLabel:disabled{\n" - " background-color: rgba(255, 255, 255, 0);\n" - ' font: 700 12pt "Microsoft YaHei UI";\n' - " color: red;\n" - "}\n" - "\n" - "QLabel{\n" - "background-color: rgba(255, 255, 255, 0);\n" - 'font: 700 12pt "Microsoft YaHei UI";\n' - "color:#7A7A7A;\n" - "}" - ) - self.label_sign_photo.setAlignment( - Qt.AlignmentFlag.AlignLeading - | Qt.AlignmentFlag.AlignLeft - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_4.addWidget(self.label_sign_photo, 0, 3, 1, 1) - - self.pushButton_sign_take = QPushButton(self.frame_sign_2) - self.pushButton_sign_take.setObjectName("pushButton_sign_take") - sizePolicy1.setHeightForWidth( - self.pushButton_sign_take.sizePolicy().hasHeightForWidth() - ) - self.pushButton_sign_take.setSizePolicy(sizePolicy1) - self.pushButton_sign_take.setStyleSheet( - "*{\n" - "background-color: #7A7A7A;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 5px;\n" - "}\n" - "*:disabled\n" - "{\n" - "background-color: #ff6e00;\n" - "}\n" - "\n" - "" - ) - - self.gridLayout_4.addWidget(self.pushButton_sign_take, 0, 4, 1, 1) - - self.label_sign_take = QLabel(self.frame_sign_2) - self.label_sign_take.setObjectName("label_sign_take") - sizePolicy1.setHeightForWidth( - self.label_sign_take.sizePolicy().hasHeightForWidth() - ) - self.label_sign_take.setSizePolicy(sizePolicy1) - self.label_sign_take.setStyleSheet( - "\n" - "QLabel:disabled{\n" - " background-color: rgba(255, 255, 255, 0);\n" - ' font: 700 12pt "Microsoft YaHei UI";\n' - " color: red;\n" - "}\n" - "\n" - "QLabel{\n" - "background-color: rgba(255, 255, 255, 0);\n" - 'font: 700 12pt "Microsoft YaHei UI";\n' - "color:#7A7A7A;\n" - "}" - ) - self.label_sign_take.setAlignment( - Qt.AlignmentFlag.AlignLeading - | Qt.AlignmentFlag.AlignLeft - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_4.addWidget(self.label_sign_take, 0, 5, 1, 1) - - self.pushButton_sign_feed = QPushButton(self.frame_sign_2) - self.pushButton_sign_feed.setObjectName("pushButton_sign_feed") - sizePolicy1.setHeightForWidth( - self.pushButton_sign_feed.sizePolicy().hasHeightForWidth() - ) - self.pushButton_sign_feed.setSizePolicy(sizePolicy1) - self.pushButton_sign_feed.setStyleSheet( - "*{\n" - "background-color: #7A7A7A;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 5px;\n" - "}\n" - "*:disabled\n" - "{\n" - "background-color: #ff6e00;\n" - "}\n" - "\n" - "" - ) - - self.gridLayout_4.addWidget(self.pushButton_sign_feed, 0, 6, 1, 1) - - self.label_sign_feed = QLabel(self.frame_sign_2) - self.label_sign_feed.setObjectName("label_sign_feed") - sizePolicy1.setHeightForWidth( - self.label_sign_feed.sizePolicy().hasHeightForWidth() - ) - self.label_sign_feed.setSizePolicy(sizePolicy1) - self.label_sign_feed.setStyleSheet( - "\n" - "QLabel:disabled{\n" - " background-color: rgba(255, 255, 255, 0);\n" - ' font: 700 12pt "Microsoft YaHei UI";\n' - " color: red;\n" - "}\n" - "\n" - "QLabel{\n" - "background-color: rgba(255, 255, 255, 0);\n" - 'font: 700 12pt "Microsoft YaHei UI";\n' - "color:#7A7A7A;\n" - "}" - ) - self.label_sign_feed.setAlignment( - Qt.AlignmentFlag.AlignLeading - | Qt.AlignmentFlag.AlignLeft - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_4.addWidget(self.label_sign_feed, 0, 7, 1, 1) - - self.verticalLayout_14.addWidget(self.frame_sign_2) - - self.label_showDetection = QLabel(self.frame_showDetection) - self.label_showDetection.setObjectName("label_showDetection") - sizePolicy1.setHeightForWidth( - self.label_showDetection.sizePolicy().hasHeightForWidth() - ) - self.label_showDetection.setSizePolicy(sizePolicy1) - self.label_showDetection.setSizeIncrement(QSize(0, 0)) - self.label_showDetection.setBaseSize(QSize(0, 0)) - self.label_showDetection.setAutoFillBackground(False) - self.label_showDetection.setStyleSheet( - "background-image: url(:/main/Image/wait.png);\n" - "background-position: center;\n" - "background-repeat: no-repeat;\n" - " " - ) - self.label_showDetection.setScaledContents(False) - - self.verticalLayout_14.addWidget(self.label_showDetection) - - self.label_move_sign = QLabel(self.frame_showDetection) - self.label_move_sign.setObjectName("label_move_sign") - sizePolicy1.setHeightForWidth( - self.label_move_sign.sizePolicy().hasHeightForWidth() - ) - self.label_move_sign.setSizePolicy(sizePolicy1) - self.label_move_sign.setStyleSheet( - "background-color: rgba(255, 255, 255, 0);\n" - "color: red;\n" - "border-image: None;" - ) - self.label_move_sign.setAlignment( - Qt.AlignmentFlag.AlignBottom - | Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - ) - - self.verticalLayout_14.addWidget(self.label_move_sign) - - self.verticalLayout_14.setStretch(0, 1) - self.verticalLayout_14.setStretch(1, 20) - self.verticalLayout_14.setStretch(2, 1) - - self.verticalLayout_9.addWidget(self.frame_showDetection) - - self.frame_15 = QFrame(self.frame_14) - self.frame_15.setObjectName("frame_15") - self.frame_15.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_15.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_8 = QHBoxLayout(self.frame_15) - self.horizontalLayout_8.setSpacing(0) - self.horizontalLayout_8.setObjectName("horizontalLayout_8") - self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0) - self.frame_17 = QFrame(self.frame_15) - self.frame_17.setObjectName("frame_17") - sizePolicy.setHeightForWidth(self.frame_17.sizePolicy().hasHeightForWidth()) - self.frame_17.setSizePolicy(sizePolicy) - self.frame_17.setStyleSheet("border: 1px solid #324C82;") - self.frame_17.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_17.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_9 = QHBoxLayout(self.frame_17) - self.horizontalLayout_9.setSpacing(0) - self.horizontalLayout_9.setObjectName("horizontalLayout_9") - self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0) - self.tabWidget = QTabWidget(self.frame_17) - self.tabWidget.setObjectName("tabWidget") - sizePolicy1.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth()) - self.tabWidget.setSizePolicy(sizePolicy1) - self.tabWidget.setStyleSheet( - "\n" - "\n" - "QTabBar::tab {\n" - " background: #191E36;\n" - " padding: 10px;\n" - "border:None;\n" - " color:#ffffff\n" - "}\n" - "" - ) - self.tabWidget.setTabShape(QTabWidget.TabShape.Rounded) - self.tabWidget.setElideMode(Qt.TextElideMode.ElideNone) - self.tabWidget.setDocumentMode(True) - self.tabWidget.setTabsClosable(False) - self.tabWidget.setTabBarAutoHide(False) - self.tab = QWidget() - self.tab.setObjectName("tab") - self.horizontalLayout_13 = QHBoxLayout(self.tab) - self.horizontalLayout_13.setSpacing(0) - self.horizontalLayout_13.setObjectName("horizontalLayout_13") - self.horizontalLayout_13.setContentsMargins(0, 0, 0, 0) - self.textEdit_log_info = QTextEdit(self.tab) - self.textEdit_log_info.setObjectName("textEdit_log_info") - self.textEdit_log_info.setStyleSheet("color: rgb(255, 255, 255);") - - self.horizontalLayout_13.addWidget(self.textEdit_log_info) - - icon4 = QIcon() - icon4.addFile( - ":/main/Image/log.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off - ) - self.tabWidget.addTab(self.tab, icon4, "") - self.tab_2 = QWidget() - self.tab_2.setObjectName("tab_2") - self.horizontalLayout_14 = QHBoxLayout(self.tab_2) - self.horizontalLayout_14.setSpacing(0) - self.horizontalLayout_14.setObjectName("horizontalLayout_14") - self.horizontalLayout_14.setContentsMargins(0, 0, 0, 0) - self.textEdit_log_error = QTextEdit(self.tab_2) - self.textEdit_log_error.setObjectName("textEdit_log_error") - self.textEdit_log_error.setStyleSheet("\n" "color: rgb(255, 0, 0);") - - self.horizontalLayout_14.addWidget(self.textEdit_log_error) - - icon5 = QIcon() - icon5.addFile( - ":/main/Image/waring.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off - ) - self.tabWidget.addTab(self.tab_2, icon5, "") - - self.horizontalLayout_9.addWidget(self.tabWidget) - - self.horizontalLayout_8.addWidget(self.frame_17) - - self.frame_18 = QFrame(self.frame_15) - self.frame_18.setObjectName("frame_18") - self.frame_18.setStyleSheet("border: 1px solid #324C82;") - self.frame_18.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_18.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_13 = QVBoxLayout(self.frame_18) - self.verticalLayout_13.setObjectName("verticalLayout_13") - self.frame_25 = QFrame(self.frame_18) - self.frame_25.setObjectName("frame_25") - self.frame_25.setStyleSheet("border:None") - self.frame_25.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_25.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_3 = QGridLayout(self.frame_25) - self.gridLayout_3.setSpacing(0) - self.gridLayout_3.setObjectName("gridLayout_3") - self.gridLayout_3.setContentsMargins(0, 0, 0, 0) - self.label_53 = QLabel(self.frame_25) - self.label_53.setObjectName("label_53") - self.label_53.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_53.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_3.addWidget(self.label_53, 0, 0, 1, 1) - - self.label_connect_status = QLabel(self.frame_25) - self.label_connect_status.setObjectName("label_connect_status") - sizePolicy2.setHeightForWidth( - self.label_connect_status.sizePolicy().hasHeightForWidth() - ) - self.label_connect_status.setSizePolicy(sizePolicy2) - self.label_connect_status.setStyleSheet( - "QLabel {\n" - " background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" - " color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" - " border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" - " border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" - " qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" - "}\n" - "QLabel:disabled{\n" - " background-color: #FD3251; \n" - " color: #ffffff; \n" - " border-radius: 8px; \n" - " border: 1px solid #FD3251; \n" - " qproperty-alignment: 'AlignCenter'; \n" - "}\n" - "" - ) - - self.gridLayout_3.addWidget(self.label_connect_status, 0, 1, 1, 1) - - self.label_8 = QLabel(self.frame_25) - self.label_8.setObjectName("label_8") - self.label_8.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_8.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_3.addWidget(self.label_8, 1, 0, 1, 1) - - self.label_status_model = QLabel(self.frame_25) - self.label_status_model.setObjectName("label_status_model") - sizePolicy2.setHeightForWidth( - self.label_status_model.sizePolicy().hasHeightForWidth() - ) - self.label_status_model.setSizePolicy(sizePolicy2) - self.label_status_model.setStyleSheet( - "QLabel {\n" - " background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" - " color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" - " border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" - " border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" - " qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" - "}\n" - "" - ) - - self.gridLayout_3.addWidget(self.label_status_model, 1, 1, 1, 1) - - self.label_10 = QLabel(self.frame_25) - self.label_10.setObjectName("label_10") - self.label_10.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_10.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_3.addWidget(self.label_10, 2, 0, 1, 1) - - self.label_status_remoteCmdLen = QLabel(self.frame_25) - self.label_status_remoteCmdLen.setObjectName("label_status_remoteCmdLen") - sizePolicy2.setHeightForWidth( - self.label_status_remoteCmdLen.sizePolicy().hasHeightForWidth() - ) - self.label_status_remoteCmdLen.setSizePolicy(sizePolicy2) - self.label_status_remoteCmdLen.setStyleSheet( - "QLabel {\n" - " background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" - " color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" - " border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" - " border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" - " qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" - "}\n" - "" - ) - - self.gridLayout_3.addWidget(self.label_status_remoteCmdLen, 2, 1, 1, 1) - - self.label_13 = QLabel(self.frame_25) - self.label_13.setObjectName("label_13") - self.label_13.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_13.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_3.addWidget(self.label_13, 3, 0, 1, 1) - - self.label_status_speed = QLabel(self.frame_25) - self.label_status_speed.setObjectName("label_status_speed") - sizePolicy2.setHeightForWidth( - self.label_status_speed.sizePolicy().hasHeightForWidth() - ) - self.label_status_speed.setSizePolicy(sizePolicy2) - self.label_status_speed.setStyleSheet( - "QLabel {\n" - " background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" - " color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" - " border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" - " border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" - " qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" - "}\n" - "" - ) - - self.gridLayout_3.addWidget(self.label_status_speed, 3, 1, 1, 1) - - self.label_11 = QLabel(self.frame_25) - self.label_11.setObjectName("label_11") - self.label_11.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_11.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_3.addWidget(self.label_11, 4, 0, 1, 1) - - self.label_status_toolIndex = QLabel(self.frame_25) - self.label_status_toolIndex.setObjectName("label_status_toolIndex") - sizePolicy2.setHeightForWidth( - self.label_status_toolIndex.sizePolicy().hasHeightForWidth() - ) - self.label_status_toolIndex.setSizePolicy(sizePolicy2) - self.label_status_toolIndex.setStyleSheet( - "QLabel {\n" - " background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" - " color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" - " border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" - " border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" - " qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" - "}\n" - "" - ) - - self.gridLayout_3.addWidget(self.label_status_toolIndex, 4, 1, 1, 1) - - self.label_12 = QLabel(self.frame_25) - self.label_12.setObjectName("label_12") - self.label_12.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_12.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_3.addWidget(self.label_12, 5, 0, 1, 1) - - self.label_status_alarmcode = QLabel(self.frame_25) - self.label_status_alarmcode.setObjectName("label_status_alarmcode") - sizePolicy2.setHeightForWidth( - self.label_status_alarmcode.sizePolicy().hasHeightForWidth() - ) - self.label_status_alarmcode.setSizePolicy(sizePolicy2) - self.label_status_alarmcode.setStyleSheet( - "QLabel {\n" - " background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" - " color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" - " border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" - " border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" - " qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" - "}\n" - "" - ) - - self.gridLayout_3.addWidget(self.label_status_alarmcode, 5, 1, 1, 1) - - self.verticalLayout_13.addWidget(self.frame_25) - - self.horizontalLayout_8.addWidget(self.frame_18) - - self.horizontalLayout_8.setStretch(0, 3) - self.horizontalLayout_8.setStretch(1, 2) - - self.verticalLayout_9.addWidget(self.frame_15) - - self.verticalLayout_9.setStretch(0, 3) - self.verticalLayout_9.setStretch(1, 2) - - self.verticalLayout_7.addWidget(self.frame_14) - - self.verticalLayout_7.setStretch(0, 1) - self.stackedWidget_view.addWidget(self.page_3) - self.page_7 = QWidget() - self.page_7.setObjectName("page_7") - self.horizontalLayout_19 = QHBoxLayout(self.page_7) - self.horizontalLayout_19.setSpacing(0) - self.horizontalLayout_19.setObjectName("horizontalLayout_19") - self.horizontalLayout_19.setContentsMargins(0, 0, 0, 0) - self.frame_11 = QFrame(self.page_7) - self.frame_11.setObjectName("frame_11") - self.frame_11.setStyleSheet('font: 700 16pt "Microsoft YaHei UI";') - self.frame_11.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_11.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_8 = QGridLayout(self.frame_11) - self.gridLayout_8.setObjectName("gridLayout_8") - self.gridLayout_8.setVerticalSpacing(40) - self.label_5 = QLabel(self.frame_11) - self.label_5.setObjectName("label_5") - self.label_5.setStyleSheet("color: rgb(255, 255, 255);") - self.label_5.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_5, 0, 0, 1, 1) - - self.widget_y1 = ToggleSwitch(self.frame_11) - self.widget_y1.setObjectName("widget_y1") - self.widget_y1.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y1, 0, 1, 1, 1) - - self.label_57 = QLabel(self.frame_11) - self.label_57.setObjectName("label_57") - self.label_57.setStyleSheet("color: rgb(255, 255, 255);") - self.label_57.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_57, 0, 2, 1, 1) - - self.widget_y2 = ToggleSwitch(self.frame_11) - self.widget_y2.setObjectName("widget_y2") - self.widget_y2.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y2, 0, 3, 1, 1) - - self.label_58 = QLabel(self.frame_11) - self.label_58.setObjectName("label_58") - self.label_58.setStyleSheet("color: rgb(255, 255, 255);") - self.label_58.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_58, 0, 4, 1, 1) - - self.widget_y3 = ToggleSwitch(self.frame_11) - self.widget_y3.setObjectName("widget_y3") - self.widget_y3.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y3, 0, 5, 1, 1) - - self.label_59 = QLabel(self.frame_11) - self.label_59.setObjectName("label_59") - self.label_59.setStyleSheet("color: rgb(255, 255, 255);") - self.label_59.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_59, 0, 6, 1, 1) - - self.widget_y4 = ToggleSwitch(self.frame_11) - self.widget_y4.setObjectName("widget_y4") - self.widget_y4.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y4, 0, 7, 1, 1) - - self.label_7 = QLabel(self.frame_11) - self.label_7.setObjectName("label_7") - self.label_7.setStyleSheet("color: rgb(255, 255, 255);") - self.label_7.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_7, 1, 0, 1, 1) - - self.widget_y5 = ToggleSwitch(self.frame_11) - self.widget_y5.setObjectName("widget_y5") - self.widget_y5.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y5, 1, 1, 1, 1) - - self.label_61 = QLabel(self.frame_11) - self.label_61.setObjectName("label_61") - self.label_61.setStyleSheet("color: rgb(255, 255, 255);") - self.label_61.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_61, 1, 2, 1, 1) - - self.widget_y6 = ToggleSwitch(self.frame_11) - self.widget_y6.setObjectName("widget_y6") - self.widget_y6.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y6, 1, 3, 1, 1) - - self.label_62 = QLabel(self.frame_11) - self.label_62.setObjectName("label_62") - self.label_62.setStyleSheet("color: rgb(255, 255, 255);") - self.label_62.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_62, 1, 4, 1, 1) - - self.widget_y7 = ToggleSwitch(self.frame_11) - self.widget_y7.setObjectName("widget_y7") - self.widget_y7.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y7, 1, 5, 1, 1) - - self.label_60 = QLabel(self.frame_11) - self.label_60.setObjectName("label_60") - self.label_60.setStyleSheet("color: rgb(255, 255, 255);") - self.label_60.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_60, 1, 6, 1, 1) - - self.widget_y8 = ToggleSwitch(self.frame_11) - self.widget_y8.setObjectName("widget_y8") - self.widget_y8.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y8, 1, 7, 1, 1) - - self.label_55 = QLabel(self.frame_11) - self.label_55.setObjectName("label_55") - self.label_55.setStyleSheet("color: rgb(255, 255, 255);") - self.label_55.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_55, 2, 0, 1, 1) - - self.widget_y9 = ToggleSwitch(self.frame_11) - self.widget_y9.setObjectName("widget_y9") - self.widget_y9.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y9, 2, 1, 1, 1) - - self.label_65 = QLabel(self.frame_11) - self.label_65.setObjectName("label_65") - self.label_65.setStyleSheet("color: rgb(255, 255, 255);") - self.label_65.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_65, 2, 2, 1, 1) - - self.widget_y10 = ToggleSwitch(self.frame_11) - self.widget_y10.setObjectName("widget_y10") - self.widget_y10.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y10, 2, 3, 1, 1) - - self.label_64 = QLabel(self.frame_11) - self.label_64.setObjectName("label_64") - self.label_64.setStyleSheet("color: rgb(255, 255, 255);") - self.label_64.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_64, 2, 4, 1, 1) - - self.widget_y11 = ToggleSwitch(self.frame_11) - self.widget_y11.setObjectName("widget_y11") - self.widget_y11.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y11, 2, 5, 1, 1) - - self.label_63 = QLabel(self.frame_11) - self.label_63.setObjectName("label_63") - self.label_63.setStyleSheet("color: rgb(255, 255, 255);") - self.label_63.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_63, 2, 6, 1, 1) - - self.widget_y12 = ToggleSwitch(self.frame_11) - self.widget_y12.setObjectName("widget_y12") - self.widget_y12.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y12, 2, 7, 1, 1) - - self.label_56 = QLabel(self.frame_11) - self.label_56.setObjectName("label_56") - self.label_56.setStyleSheet("color: rgb(255, 255, 255);") - self.label_56.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_56, 3, 0, 1, 1) - - self.widget_y13 = ToggleSwitch(self.frame_11) - self.widget_y13.setObjectName("widget_y13") - self.widget_y13.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y13, 3, 1, 1, 1) - - self.label_68 = QLabel(self.frame_11) - self.label_68.setObjectName("label_68") - self.label_68.setStyleSheet("color: rgb(255, 255, 255);") - self.label_68.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_68, 3, 2, 1, 1) - - self.widget_y14 = ToggleSwitch(self.frame_11) - self.widget_y14.setObjectName("widget_y14") - self.widget_y14.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y14, 3, 3, 1, 1) - - self.label_67 = QLabel(self.frame_11) - self.label_67.setObjectName("label_67") - self.label_67.setStyleSheet("color: rgb(255, 255, 255);") - self.label_67.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_67, 3, 4, 1, 1) - - self.widget_y15 = ToggleSwitch(self.frame_11) - self.widget_y15.setObjectName("widget_y15") - self.widget_y15.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y15, 3, 5, 1, 1) - - self.label_66 = QLabel(self.frame_11) - self.label_66.setObjectName("label_66") - self.label_66.setStyleSheet("color: rgb(255, 255, 255);") - self.label_66.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_66, 3, 6, 1, 1) - - self.widget_y16 = ToggleSwitch(self.frame_11) - self.widget_y16.setObjectName("widget_y16") - self.widget_y16.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y16, 3, 7, 1, 1) - - self.label_69 = QLabel(self.frame_11) - self.label_69.setObjectName("label_69") - self.label_69.setStyleSheet("color: rgb(255, 255, 255);") - self.label_69.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_69, 4, 0, 1, 1) - - self.widget_y17 = ToggleSwitch(self.frame_11) - self.widget_y17.setObjectName("widget_y17") - self.widget_y17.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y17, 4, 1, 1, 1) - - self.label_81 = QLabel(self.frame_11) - self.label_81.setObjectName("label_81") - self.label_81.setStyleSheet("color: rgb(255, 255, 255);") - self.label_81.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_81, 4, 2, 1, 1) - - self.widget_y18 = ToggleSwitch(self.frame_11) - self.widget_y18.setObjectName("widget_y18") - self.widget_y18.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y18, 4, 3, 1, 1) - - self.label_82 = QLabel(self.frame_11) - self.label_82.setObjectName("label_82") - self.label_82.setStyleSheet("color: rgb(255, 255, 255);") - self.label_82.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_82, 4, 4, 1, 1) - - self.widget_y19 = ToggleSwitch(self.frame_11) - self.widget_y19.setObjectName("widget_y19") - self.widget_y19.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y19, 4, 5, 1, 1) - - self.label_78 = QLabel(self.frame_11) - self.label_78.setObjectName("label_78") - self.label_78.setStyleSheet("color: rgb(255, 255, 255);") - self.label_78.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_78, 4, 6, 1, 1) - - self.widget_y20 = ToggleSwitch(self.frame_11) - self.widget_y20.setObjectName("widget_y20") - self.widget_y20.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y20, 4, 7, 1, 1) - - self.label_72 = QLabel(self.frame_11) - self.label_72.setObjectName("label_72") - self.label_72.setStyleSheet("color: rgb(255, 255, 255);") - self.label_72.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_72, 5, 0, 1, 1) - - self.widget_y21 = ToggleSwitch(self.frame_11) - self.widget_y21.setObjectName("widget_y21") - self.widget_y21.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y21, 5, 1, 1, 1) - - self.label_84 = QLabel(self.frame_11) - self.label_84.setObjectName("label_84") - self.label_84.setStyleSheet("color: rgb(255, 255, 255);") - self.label_84.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_84, 5, 2, 1, 1) - - self.widget_y22 = ToggleSwitch(self.frame_11) - self.widget_y22.setObjectName("widget_y22") - self.widget_y22.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y22, 5, 3, 1, 1) - - self.label_77 = QLabel(self.frame_11) - self.label_77.setObjectName("label_77") - self.label_77.setStyleSheet("color: rgb(255, 255, 255);") - self.label_77.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_77, 5, 4, 1, 1) - - self.widget_y23 = ToggleSwitch(self.frame_11) - self.widget_y23.setObjectName("widget_y23") - self.widget_y23.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y23, 5, 5, 1, 1) - - self.label_71 = QLabel(self.frame_11) - self.label_71.setObjectName("label_71") - self.label_71.setStyleSheet("color: rgb(255, 255, 255);") - self.label_71.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_71, 5, 6, 1, 1) - - self.widget_y24 = ToggleSwitch(self.frame_11) - self.widget_y24.setObjectName("widget_y24") - self.widget_y24.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y24, 5, 7, 1, 1) - - self.label_70 = QLabel(self.frame_11) - self.label_70.setObjectName("label_70") - self.label_70.setStyleSheet("color: rgb(255, 255, 255);") - self.label_70.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_70, 6, 0, 1, 1) - - self.widget_y25 = ToggleSwitch(self.frame_11) - self.widget_y25.setObjectName("widget_y25") - self.widget_y25.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y25, 6, 1, 1, 1) - - self.label_80 = QLabel(self.frame_11) - self.label_80.setObjectName("label_80") - self.label_80.setStyleSheet("color: rgb(255, 255, 255);") - self.label_80.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_80, 6, 2, 1, 1) - - self.widget_y26 = ToggleSwitch(self.frame_11) - self.widget_y26.setObjectName("widget_y26") - self.widget_y26.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y26, 6, 3, 1, 1) - - self.label_74 = QLabel(self.frame_11) - self.label_74.setObjectName("label_74") - self.label_74.setStyleSheet("color: rgb(255, 255, 255);") - self.label_74.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_74, 6, 4, 1, 1) - - self.widget_y27 = ToggleSwitch(self.frame_11) - self.widget_y27.setObjectName("widget_y27") - self.widget_y27.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y27, 6, 5, 1, 1) - - self.label_73 = QLabel(self.frame_11) - self.label_73.setObjectName("label_73") - self.label_73.setStyleSheet("color: rgb(255, 255, 255);") - self.label_73.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_73, 6, 6, 1, 1) - - self.widget_y28 = ToggleSwitch(self.frame_11) - self.widget_y28.setObjectName("widget_y28") - self.widget_y28.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y28, 6, 7, 1, 1) - - self.label_75 = QLabel(self.frame_11) - self.label_75.setObjectName("label_75") - self.label_75.setStyleSheet("color: rgb(255, 255, 255);") - self.label_75.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_75, 7, 0, 1, 1) - - self.widget_y29 = ToggleSwitch(self.frame_11) - self.widget_y29.setObjectName("widget_y29") - self.widget_y29.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y29, 7, 1, 1, 1) - - self.label_76 = QLabel(self.frame_11) - self.label_76.setObjectName("label_76") - self.label_76.setStyleSheet("color: rgb(255, 255, 255);") - self.label_76.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_76, 7, 2, 1, 1) - - self.widget_y30 = ToggleSwitch(self.frame_11) - self.widget_y30.setObjectName("widget_y30") - self.widget_y30.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y30, 7, 3, 1, 1) - - self.label_83 = QLabel(self.frame_11) - self.label_83.setObjectName("label_83") - self.label_83.setStyleSheet("color: rgb(255, 255, 255);") - self.label_83.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_83, 7, 4, 1, 1) - - self.widget_y31 = ToggleSwitch(self.frame_11) - self.widget_y31.setObjectName("widget_y31") - self.widget_y31.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y31, 7, 5, 1, 1) - - self.label_79 = QLabel(self.frame_11) - self.label_79.setObjectName("label_79") - self.label_79.setStyleSheet("color: rgb(255, 255, 255);") - self.label_79.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_8.addWidget(self.label_79, 7, 6, 1, 1) - - self.widget_y32 = ToggleSwitch(self.frame_11) - self.widget_y32.setObjectName("widget_y32") - self.widget_y32.setStyleSheet("background-color: rgb(0, 170, 0);") - - self.gridLayout_8.addWidget(self.widget_y32, 7, 7, 1, 1) - - self.horizontalLayout_19.addWidget(self.frame_11) - - self.stackedWidget_view.addWidget(self.page_7) - self.page_4 = QWidget() - self.page_4.setObjectName("page_4") - self.verticalLayout_15 = QVBoxLayout(self.page_4) - self.verticalLayout_15.setSpacing(0) - self.verticalLayout_15.setObjectName("verticalLayout_15") - self.verticalLayout_15.setContentsMargins(0, 0, 0, 0) - self.frame_6 = QFrame(self.page_4) - self.frame_6.setObjectName("frame_6") - self.frame_6.setStyleSheet("border:1px solid #324C82;") - self.frame_6.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_6.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_16 = QVBoxLayout(self.frame_6) - self.verticalLayout_16.setObjectName("verticalLayout_16") - self.frame_27 = QFrame(self.frame_6) - self.frame_27.setObjectName("frame_27") - self.frame_27.setStyleSheet("color:#ffffff;\n" "border:None;") - self.frame_27.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_27.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_9 = QGridLayout(self.frame_27) - self.gridLayout_9.setObjectName("gridLayout_9") - self.gridLayout_9.setVerticalSpacing(80) - self.label_92 = QLabel(self.frame_27) - self.label_92.setObjectName("label_92") - sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed) - sizePolicy7.setHorizontalStretch(0) - sizePolicy7.setVerticalStretch(0) - sizePolicy7.setHeightForWidth(self.label_92.sizePolicy().hasHeightForWidth()) - self.label_92.setSizePolicy(sizePolicy7) - self.label_92.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_92, 1, 2, 1, 1) - - self.lineEdit_origin_y = QLineEdit(self.frame_27) - self.lineEdit_origin_y.setObjectName("lineEdit_origin_y") - sizePolicy4.setHeightForWidth( - self.lineEdit_origin_y.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_origin_y.setSizePolicy(sizePolicy4) - self.lineEdit_origin_y.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_origin_y.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_y, 0, 3, 1, 1) - - self.lineEdit_origin_v = QLineEdit(self.frame_27) - self.lineEdit_origin_v.setObjectName("lineEdit_origin_v") - sizePolicy4.setHeightForWidth( - self.lineEdit_origin_v.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_origin_v.setSizePolicy(sizePolicy4) - self.lineEdit_origin_v.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_origin_v.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_v, 1, 3, 1, 1) - - self.label_88 = QLabel(self.frame_27) - self.label_88.setObjectName("label_88") - sizePolicy7.setHeightForWidth(self.label_88.sizePolicy().hasHeightForWidth()) - self.label_88.setSizePolicy(sizePolicy7) - self.label_88.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_88, 0, 4, 1, 1) - - self.label_93 = QLabel(self.frame_27) - self.label_93.setObjectName("label_93") - sizePolicy7.setHeightForWidth(self.label_93.sizePolicy().hasHeightForWidth()) - self.label_93.setSizePolicy(sizePolicy7) - self.label_93.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_93, 0, 2, 1, 1) - - self.label_95 = QLabel(self.frame_27) - self.label_95.setObjectName("label_95") - sizePolicy7.setHeightForWidth(self.label_95.sizePolicy().hasHeightForWidth()) - self.label_95.setSizePolicy(sizePolicy7) - self.label_95.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_95, 1, 0, 1, 1) - - self.label_90 = QLabel(self.frame_27) - self.label_90.setObjectName("label_90") - sizePolicy7.setHeightForWidth(self.label_90.sizePolicy().hasHeightForWidth()) - self.label_90.setSizePolicy(sizePolicy7) - self.label_90.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_90, 0, 0, 1, 1) - - self.lineEdit_origin_u = QLineEdit(self.frame_27) - self.lineEdit_origin_u.setObjectName("lineEdit_origin_u") - sizePolicy4.setHeightForWidth( - self.lineEdit_origin_u.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_origin_u.setSizePolicy(sizePolicy4) - self.lineEdit_origin_u.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_origin_u.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_u, 1, 1, 1, 1) - - self.lineEdit_origin_x = QLineEdit(self.frame_27) - self.lineEdit_origin_x.setObjectName("lineEdit_origin_x") - sizePolicy4.setHeightForWidth( - self.lineEdit_origin_x.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_origin_x.setSizePolicy(sizePolicy4) - self.lineEdit_origin_x.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_origin_x.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_x, 0, 1, 1, 1) - - self.label_91 = QLabel(self.frame_27) - self.label_91.setObjectName("label_91") - sizePolicy7.setHeightForWidth(self.label_91.sizePolicy().hasHeightForWidth()) - self.label_91.setSizePolicy(sizePolicy7) - self.label_91.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.gridLayout_9.addWidget(self.label_91, 1, 4, 1, 1) - - self.lineEdit_origin_w = QLineEdit(self.frame_27) - self.lineEdit_origin_w.setObjectName("lineEdit_origin_w") - sizePolicy4.setHeightForWidth( - self.lineEdit_origin_w.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_origin_w.setSizePolicy(sizePolicy4) - self.lineEdit_origin_w.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_origin_w.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_w, 1, 5, 1, 1) - - self.lineEdit_origin_z = QLineEdit(self.frame_27) - self.lineEdit_origin_z.setObjectName("lineEdit_origin_z") - sizePolicy4.setHeightForWidth( - self.lineEdit_origin_z.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_origin_z.setSizePolicy(sizePolicy4) - self.lineEdit_origin_z.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_origin_z.setReadOnly(True) - - self.gridLayout_9.addWidget(self.lineEdit_origin_z, 0, 5, 1, 1) - - self.pushButton_get_origin = QPushButton(self.frame_27) - self.pushButton_get_origin.setObjectName("pushButton_get_origin") - sizePolicy4.setHeightForWidth( - self.pushButton_get_origin.sizePolicy().hasHeightForWidth() - ) - self.pushButton_get_origin.setSizePolicy(sizePolicy4) - self.pushButton_get_origin.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: rgb(16, 133, 255);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_9.addWidget(self.pushButton_get_origin, 2, 1, 1, 2) - - self.pushButton_set_origin = QPushButton(self.frame_27) - self.pushButton_set_origin.setObjectName("pushButton_set_origin") - sizePolicy4.setHeightForWidth( - self.pushButton_set_origin.sizePolicy().hasHeightForWidth() - ) - self.pushButton_set_origin.setSizePolicy(sizePolicy4) - self.pushButton_set_origin.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: #1AA094;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_9.addWidget(self.pushButton_set_origin, 2, 4, 1, 2) - - self.gridLayout_9.setRowStretch(0, 1) - self.gridLayout_9.setRowStretch(1, 1) - self.gridLayout_9.setRowStretch(2, 1) - - self.verticalLayout_16.addWidget(self.frame_27) - - self.verticalLayout_15.addWidget(self.frame_6) - - self.frame_26 = QFrame(self.page_4) - self.frame_26.setObjectName("frame_26") - self.frame_26.setStyleSheet("border:1px solid #324C82;") - self.frame_26.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_26.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_16 = QHBoxLayout(self.frame_26) - self.horizontalLayout_16.setObjectName("horizontalLayout_16") - self.horizontalLayout_16.setContentsMargins(-1, 12, -1, -1) - self.frame_28 = QFrame(self.frame_26) - self.frame_28.setObjectName("frame_28") - self.frame_28.setStyleSheet("color:#ffffff;\n" "border:None;") - self.frame_28.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_28.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_5 = QGridLayout(self.frame_28) - self.gridLayout_5.setObjectName("gridLayout_5") - self.gridLayout_5.setVerticalSpacing(35) - self.lineEdit_v5 = QLineEdit(self.frame_28) - self.lineEdit_v5.setObjectName("lineEdit_v5") - sizePolicy1.setHeightForWidth(self.lineEdit_v5.sizePolicy().hasHeightForWidth()) - self.lineEdit_v5.setSizePolicy(sizePolicy1) - self.lineEdit_v5.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_v5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v5, 4, 9, 1, 1) - - self.lineEdit_w5 = QLineEdit(self.frame_28) - self.lineEdit_w5.setObjectName("lineEdit_w5") - sizePolicy1.setHeightForWidth(self.lineEdit_w5.sizePolicy().hasHeightForWidth()) - self.lineEdit_w5.setSizePolicy(sizePolicy1) - self.lineEdit_w5.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_w5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w5, 4, 11, 1, 1) - - self.lineEdit_v1 = QLineEdit(self.frame_28) - self.lineEdit_v1.setObjectName("lineEdit_v1") - sizePolicy1.setHeightForWidth(self.lineEdit_v1.sizePolicy().hasHeightForWidth()) - self.lineEdit_v1.setSizePolicy(sizePolicy1) - self.lineEdit_v1.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_v1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v1, 0, 9, 1, 1) - - self.pushButton_get_p2 = QPushButton(self.frame_28) - self.pushButton_get_p2.setObjectName("pushButton_get_p2") - sizePolicy5.setHeightForWidth( - self.pushButton_get_p2.sizePolicy().hasHeightForWidth() - ) - self.pushButton_get_p2.setSizePolicy(sizePolicy5) - self.pushButton_get_p2.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: rgb(16, 133, 255);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_get_p2, 1, 12, 1, 1) - - self.lineEdit_y2 = QLineEdit(self.frame_28) - self.lineEdit_y2.setObjectName("lineEdit_y2") - sizePolicy1.setHeightForWidth(self.lineEdit_y2.sizePolicy().hasHeightForWidth()) - self.lineEdit_y2.setSizePolicy(sizePolicy1) - self.lineEdit_y2.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_y2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y2, 1, 3, 1, 1) - - self.lineEdit_x1 = QLineEdit(self.frame_28) - self.lineEdit_x1.setObjectName("lineEdit_x1") - sizePolicy1.setHeightForWidth(self.lineEdit_x1.sizePolicy().hasHeightForWidth()) - self.lineEdit_x1.setSizePolicy(sizePolicy1) - self.lineEdit_x1.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_x1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x1, 0, 1, 1, 1) - - self.lineEdit_x2 = QLineEdit(self.frame_28) - self.lineEdit_x2.setObjectName("lineEdit_x2") - sizePolicy1.setHeightForWidth(self.lineEdit_x2.sizePolicy().hasHeightForWidth()) - self.lineEdit_x2.setSizePolicy(sizePolicy1) - self.lineEdit_x2.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_x2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x2, 1, 1, 1, 1) - - self.pushButton_set_p1 = QPushButton(self.frame_28) - self.pushButton_set_p1.setObjectName("pushButton_set_p1") - sizePolicy5.setHeightForWidth( - self.pushButton_set_p1.sizePolicy().hasHeightForWidth() - ) - self.pushButton_set_p1.setSizePolicy(sizePolicy5) - self.pushButton_set_p1.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: #1AA094;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_set_p1, 0, 13, 1, 1) - - self.label_16 = QLabel(self.frame_28) - self.label_16.setObjectName("label_16") - sizePolicy4.setHeightForWidth(self.label_16.sizePolicy().hasHeightForWidth()) - self.label_16.setSizePolicy(sizePolicy4) - self.label_16.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_16, 1, 0, 1, 1) - - self.lineEdit_z5 = QLineEdit(self.frame_28) - self.lineEdit_z5.setObjectName("lineEdit_z5") - sizePolicy1.setHeightForWidth(self.lineEdit_z5.sizePolicy().hasHeightForWidth()) - self.lineEdit_z5.setSizePolicy(sizePolicy1) - self.lineEdit_z5.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_z5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z5, 4, 5, 1, 1) - - self.lineEdit_u5 = QLineEdit(self.frame_28) - self.lineEdit_u5.setObjectName("lineEdit_u5") - sizePolicy1.setHeightForWidth(self.lineEdit_u5.sizePolicy().hasHeightForWidth()) - self.lineEdit_u5.setSizePolicy(sizePolicy1) - self.lineEdit_u5.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_u5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u5, 4, 7, 1, 1) - - self.pushButton_set_p4 = QPushButton(self.frame_28) - self.pushButton_set_p4.setObjectName("pushButton_set_p4") - sizePolicy5.setHeightForWidth( - self.pushButton_set_p4.sizePolicy().hasHeightForWidth() - ) - self.pushButton_set_p4.setSizePolicy(sizePolicy5) - self.pushButton_set_p4.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: #1AA094;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_set_p4, 3, 13, 1, 1) - - self.label_21 = QLabel(self.frame_28) - self.label_21.setObjectName("label_21") - sizePolicy4.setHeightForWidth(self.label_21.sizePolicy().hasHeightForWidth()) - self.label_21.setSizePolicy(sizePolicy4) - self.label_21.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_21, 2, 2, 1, 1) - - self.label_41 = QLabel(self.frame_28) - self.label_41.setObjectName("label_41") - sizePolicy4.setHeightForWidth(self.label_41.sizePolicy().hasHeightForWidth()) - self.label_41.setSizePolicy(sizePolicy4) - self.label_41.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_41, 1, 10, 1, 1) - - self.label_44 = QLabel(self.frame_28) - self.label_44.setObjectName("label_44") - sizePolicy4.setHeightForWidth(self.label_44.sizePolicy().hasHeightForWidth()) - self.label_44.setSizePolicy(sizePolicy4) - self.label_44.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_44, 2, 6, 1, 1) - - self.pushButton_get_p4 = QPushButton(self.frame_28) - self.pushButton_get_p4.setObjectName("pushButton_get_p4") - sizePolicy5.setHeightForWidth( - self.pushButton_get_p4.sizePolicy().hasHeightForWidth() - ) - self.pushButton_get_p4.setSizePolicy(sizePolicy5) - self.pushButton_get_p4.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: rgb(16, 133, 255);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_get_p4, 3, 12, 1, 1) - - self.label_50 = QLabel(self.frame_28) - self.label_50.setObjectName("label_50") - sizePolicy4.setHeightForWidth(self.label_50.sizePolicy().hasHeightForWidth()) - self.label_50.setSizePolicy(sizePolicy4) - self.label_50.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_50, 4, 10, 1, 1) - - self.label_25 = QLabel(self.frame_28) - self.label_25.setObjectName("label_25") - sizePolicy4.setHeightForWidth(self.label_25.sizePolicy().hasHeightForWidth()) - self.label_25.setSizePolicy(sizePolicy4) - self.label_25.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_25, 4, 4, 1, 1) - - self.lineEdit_w1 = QLineEdit(self.frame_28) - self.lineEdit_w1.setObjectName("lineEdit_w1") - sizePolicy1.setHeightForWidth(self.lineEdit_w1.sizePolicy().hasHeightForWidth()) - self.lineEdit_w1.setSizePolicy(sizePolicy1) - self.lineEdit_w1.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_w1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w1, 0, 11, 1, 1) - - self.lineEdit_x5 = QLineEdit(self.frame_28) - self.lineEdit_x5.setObjectName("lineEdit_x5") - sizePolicy1.setHeightForWidth(self.lineEdit_x5.sizePolicy().hasHeightForWidth()) - self.lineEdit_x5.setSizePolicy(sizePolicy1) - self.lineEdit_x5.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_x5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x5, 4, 1, 1, 1) - - self.lineEdit_y5 = QLineEdit(self.frame_28) - self.lineEdit_y5.setObjectName("lineEdit_y5") - sizePolicy1.setHeightForWidth(self.lineEdit_y5.sizePolicy().hasHeightForWidth()) - self.lineEdit_y5.setSizePolicy(sizePolicy1) - self.lineEdit_y5.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_y5.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y5, 4, 3, 1, 1) - - self.lineEdit_w4 = QLineEdit(self.frame_28) - self.lineEdit_w4.setObjectName("lineEdit_w4") - sizePolicy1.setHeightForWidth(self.lineEdit_w4.sizePolicy().hasHeightForWidth()) - self.lineEdit_w4.setSizePolicy(sizePolicy1) - self.lineEdit_w4.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_w4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w4, 3, 11, 1, 1) - - self.label_40 = QLabel(self.frame_28) - self.label_40.setObjectName("label_40") - sizePolicy4.setHeightForWidth(self.label_40.sizePolicy().hasHeightForWidth()) - self.label_40.setSizePolicy(sizePolicy4) - self.label_40.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_40, 1, 8, 1, 1) - - self.label_43 = QLabel(self.frame_28) - self.label_43.setObjectName("label_43") - sizePolicy4.setHeightForWidth(self.label_43.sizePolicy().hasHeightForWidth()) - self.label_43.setSizePolicy(sizePolicy4) - self.label_43.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_43, 2, 10, 1, 1) - - self.lineEdit_v4 = QLineEdit(self.frame_28) - self.lineEdit_v4.setObjectName("lineEdit_v4") - sizePolicy1.setHeightForWidth(self.lineEdit_v4.sizePolicy().hasHeightForWidth()) - self.lineEdit_v4.setSizePolicy(sizePolicy1) - self.lineEdit_v4.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_v4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v4, 3, 9, 1, 1) - - self.lineEdit_u1 = QLineEdit(self.frame_28) - self.lineEdit_u1.setObjectName("lineEdit_u1") - sizePolicy1.setHeightForWidth(self.lineEdit_u1.sizePolicy().hasHeightForWidth()) - self.lineEdit_u1.setSizePolicy(sizePolicy1) - self.lineEdit_u1.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_u1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u1, 0, 7, 1, 1) - - self.lineEdit_y1 = QLineEdit(self.frame_28) - self.lineEdit_y1.setObjectName("lineEdit_y1") - sizePolicy1.setHeightForWidth(self.lineEdit_y1.sizePolicy().hasHeightForWidth()) - self.lineEdit_y1.setSizePolicy(sizePolicy1) - self.lineEdit_y1.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_y1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y1, 0, 3, 1, 1) - - self.label_37 = QLabel(self.frame_28) - self.label_37.setObjectName("label_37") - sizePolicy4.setHeightForWidth(self.label_37.sizePolicy().hasHeightForWidth()) - self.label_37.setSizePolicy(sizePolicy4) - self.label_37.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_37, 0, 10, 1, 1) - - self.lineEdit_w2 = QLineEdit(self.frame_28) - self.lineEdit_w2.setObjectName("lineEdit_w2") - sizePolicy1.setHeightForWidth(self.lineEdit_w2.sizePolicy().hasHeightForWidth()) - self.lineEdit_w2.setSizePolicy(sizePolicy1) - self.lineEdit_w2.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_w2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w2, 1, 11, 1, 1) - - self.pushButton_set_p5 = QPushButton(self.frame_28) - self.pushButton_set_p5.setObjectName("pushButton_set_p5") - sizePolicy5.setHeightForWidth( - self.pushButton_set_p5.sizePolicy().hasHeightForWidth() - ) - self.pushButton_set_p5.setSizePolicy(sizePolicy5) - self.pushButton_set_p5.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: #1AA094;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_set_p5, 4, 13, 1, 1) - - self.pushButton_set_p3 = QPushButton(self.frame_28) - self.pushButton_set_p3.setObjectName("pushButton_set_p3") - sizePolicy5.setHeightForWidth( - self.pushButton_set_p3.sizePolicy().hasHeightForWidth() - ) - self.pushButton_set_p3.setSizePolicy(sizePolicy5) - self.pushButton_set_p3.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: #1AA094;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_set_p3, 2, 13, 1, 1) - - self.label_26 = QLabel(self.frame_28) - self.label_26.setObjectName("label_26") - sizePolicy4.setHeightForWidth(self.label_26.sizePolicy().hasHeightForWidth()) - self.label_26.setSizePolicy(sizePolicy4) - self.label_26.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_26, 4, 2, 1, 1) - - self.label_19 = QLabel(self.frame_28) - self.label_19.setObjectName("label_19") - sizePolicy4.setHeightForWidth(self.label_19.sizePolicy().hasHeightForWidth()) - self.label_19.setSizePolicy(sizePolicy4) - self.label_19.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_19, 2, 0, 1, 1) - - self.lineEdit_y4 = QLineEdit(self.frame_28) - self.lineEdit_y4.setObjectName("lineEdit_y4") - sizePolicy1.setHeightForWidth(self.lineEdit_y4.sizePolicy().hasHeightForWidth()) - self.lineEdit_y4.setSizePolicy(sizePolicy1) - self.lineEdit_y4.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_y4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y4, 3, 3, 1, 1) - - self.label_42 = QLabel(self.frame_28) - self.label_42.setObjectName("label_42") - sizePolicy4.setHeightForWidth(self.label_42.sizePolicy().hasHeightForWidth()) - self.label_42.setSizePolicy(sizePolicy4) - self.label_42.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_42, 2, 8, 1, 1) - - self.lineEdit_u4 = QLineEdit(self.frame_28) - self.lineEdit_u4.setObjectName("lineEdit_u4") - sizePolicy1.setHeightForWidth(self.lineEdit_u4.sizePolicy().hasHeightForWidth()) - self.lineEdit_u4.setSizePolicy(sizePolicy1) - self.lineEdit_u4.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_u4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u4, 3, 7, 1, 1) - - self.lineEdit_z4 = QLineEdit(self.frame_28) - self.lineEdit_z4.setObjectName("lineEdit_z4") - sizePolicy1.setHeightForWidth(self.lineEdit_z4.sizePolicy().hasHeightForWidth()) - self.lineEdit_z4.setSizePolicy(sizePolicy1) - self.lineEdit_z4.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_z4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z4, 3, 5, 1, 1) - - self.lineEdit_x3 = QLineEdit(self.frame_28) - self.lineEdit_x3.setObjectName("lineEdit_x3") - sizePolicy1.setHeightForWidth(self.lineEdit_x3.sizePolicy().hasHeightForWidth()) - self.lineEdit_x3.setSizePolicy(sizePolicy1) - self.lineEdit_x3.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_x3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x3, 2, 1, 1, 1) - - self.label_18 = QLabel(self.frame_28) - self.label_18.setObjectName("label_18") - sizePolicy4.setHeightForWidth(self.label_18.sizePolicy().hasHeightForWidth()) - self.label_18.setSizePolicy(sizePolicy4) - self.label_18.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_18, 1, 2, 1, 1) - - self.label_48 = QLabel(self.frame_28) - self.label_48.setObjectName("label_48") - sizePolicy4.setHeightForWidth(self.label_48.sizePolicy().hasHeightForWidth()) - self.label_48.setSizePolicy(sizePolicy4) - self.label_48.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_48, 4, 8, 1, 1) - - self.label_38 = QLabel(self.frame_28) - self.label_38.setObjectName("label_38") - sizePolicy4.setHeightForWidth(self.label_38.sizePolicy().hasHeightForWidth()) - self.label_38.setSizePolicy(sizePolicy4) - self.label_38.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_38, 0, 8, 1, 1) - - self.lineEdit_y3 = QLineEdit(self.frame_28) - self.lineEdit_y3.setObjectName("lineEdit_y3") - sizePolicy1.setHeightForWidth(self.lineEdit_y3.sizePolicy().hasHeightForWidth()) - self.lineEdit_y3.setSizePolicy(sizePolicy1) - self.lineEdit_y3.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_y3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_y3, 2, 3, 1, 1) - - self.pushButton_get_p5 = QPushButton(self.frame_28) - self.pushButton_get_p5.setObjectName("pushButton_get_p5") - sizePolicy5.setHeightForWidth( - self.pushButton_get_p5.sizePolicy().hasHeightForWidth() - ) - self.pushButton_get_p5.setSizePolicy(sizePolicy5) - self.pushButton_get_p5.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: rgb(16, 133, 255);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_get_p5, 4, 12, 1, 1) - - self.label_20 = QLabel(self.frame_28) - self.label_20.setObjectName("label_20") - sizePolicy4.setHeightForWidth(self.label_20.sizePolicy().hasHeightForWidth()) - self.label_20.setSizePolicy(sizePolicy4) - self.label_20.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_20, 2, 4, 1, 1) - - self.label_27 = QLabel(self.frame_28) - self.label_27.setObjectName("label_27") - sizePolicy4.setHeightForWidth(self.label_27.sizePolicy().hasHeightForWidth()) - self.label_27.setSizePolicy(sizePolicy4) - self.label_27.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_27, 4, 0, 1, 1) - - self.label_22 = QLabel(self.frame_28) - self.label_22.setObjectName("label_22") - sizePolicy4.setHeightForWidth(self.label_22.sizePolicy().hasHeightForWidth()) - self.label_22.setSizePolicy(sizePolicy4) - self.label_22.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_22, 3, 0, 1, 1) - - self.label_46 = QLabel(self.frame_28) - self.label_46.setObjectName("label_46") - sizePolicy4.setHeightForWidth(self.label_46.sizePolicy().hasHeightForWidth()) - self.label_46.setSizePolicy(sizePolicy4) - self.label_46.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_46, 3, 10, 1, 1) - - self.label_14 = QLabel(self.frame_28) - self.label_14.setObjectName("label_14") - sizePolicy4.setHeightForWidth(self.label_14.sizePolicy().hasHeightForWidth()) - self.label_14.setSizePolicy(sizePolicy4) - self.label_14.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_14, 0, 2, 1, 1) - - self.label_15 = QLabel(self.frame_28) - self.label_15.setObjectName("label_15") - sizePolicy4.setHeightForWidth(self.label_15.sizePolicy().hasHeightForWidth()) - self.label_15.setSizePolicy(sizePolicy4) - self.label_15.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_15, 0, 4, 1, 1) - - self.lineEdit_z3 = QLineEdit(self.frame_28) - self.lineEdit_z3.setObjectName("lineEdit_z3") - sizePolicy1.setHeightForWidth(self.lineEdit_z3.sizePolicy().hasHeightForWidth()) - self.lineEdit_z3.setSizePolicy(sizePolicy1) - self.lineEdit_z3.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_z3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z3, 2, 5, 1, 1) - - self.label_39 = QLabel(self.frame_28) - self.label_39.setObjectName("label_39") - sizePolicy4.setHeightForWidth(self.label_39.sizePolicy().hasHeightForWidth()) - self.label_39.setSizePolicy(sizePolicy4) - self.label_39.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_39, 1, 6, 1, 1) - - self.label_23 = QLabel(self.frame_28) - self.label_23.setObjectName("label_23") - sizePolicy4.setHeightForWidth(self.label_23.sizePolicy().hasHeightForWidth()) - self.label_23.setSizePolicy(sizePolicy4) - self.label_23.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_23, 3, 2, 1, 1) - - self.lineEdit_z2 = QLineEdit(self.frame_28) - self.lineEdit_z2.setObjectName("lineEdit_z2") - sizePolicy1.setHeightForWidth(self.lineEdit_z2.sizePolicy().hasHeightForWidth()) - self.lineEdit_z2.setSizePolicy(sizePolicy1) - self.lineEdit_z2.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_z2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z2, 1, 5, 1, 1) - - self.label_9 = QLabel(self.frame_28) - self.label_9.setObjectName("label_9") - sizePolicy4.setHeightForWidth(self.label_9.sizePolicy().hasHeightForWidth()) - self.label_9.setSizePolicy(sizePolicy4) - self.label_9.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_9, 0, 0, 1, 1) - - self.label_49 = QLabel(self.frame_28) - self.label_49.setObjectName("label_49") - sizePolicy4.setHeightForWidth(self.label_49.sizePolicy().hasHeightForWidth()) - self.label_49.setSizePolicy(sizePolicy4) - self.label_49.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_49, 4, 6, 1, 1) - - self.label_45 = QLabel(self.frame_28) - self.label_45.setObjectName("label_45") - sizePolicy4.setHeightForWidth(self.label_45.sizePolicy().hasHeightForWidth()) - self.label_45.setSizePolicy(sizePolicy4) - self.label_45.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_45, 3, 6, 1, 1) - - self.pushButton_get_p3 = QPushButton(self.frame_28) - self.pushButton_get_p3.setObjectName("pushButton_get_p3") - sizePolicy5.setHeightForWidth( - self.pushButton_get_p3.sizePolicy().hasHeightForWidth() - ) - self.pushButton_get_p3.setSizePolicy(sizePolicy5) - self.pushButton_get_p3.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: rgb(16, 133, 255);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_get_p3, 2, 12, 1, 1) - - self.lineEdit_v3 = QLineEdit(self.frame_28) - self.lineEdit_v3.setObjectName("lineEdit_v3") - sizePolicy1.setHeightForWidth(self.lineEdit_v3.sizePolicy().hasHeightForWidth()) - self.lineEdit_v3.setSizePolicy(sizePolicy1) - self.lineEdit_v3.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_v3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v3, 2, 9, 1, 1) - - self.lineEdit_x4 = QLineEdit(self.frame_28) - self.lineEdit_x4.setObjectName("lineEdit_x4") - sizePolicy1.setHeightForWidth(self.lineEdit_x4.sizePolicy().hasHeightForWidth()) - self.lineEdit_x4.setSizePolicy(sizePolicy1) - self.lineEdit_x4.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_x4.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_x4, 3, 1, 1, 1) - - self.label_47 = QLabel(self.frame_28) - self.label_47.setObjectName("label_47") - sizePolicy4.setHeightForWidth(self.label_47.sizePolicy().hasHeightForWidth()) - self.label_47.setSizePolicy(sizePolicy4) - self.label_47.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_47, 3, 8, 1, 1) - - self.pushButton_get_p1 = QPushButton(self.frame_28) - self.pushButton_get_p1.setObjectName("pushButton_get_p1") - sizePolicy5.setHeightForWidth( - self.pushButton_get_p1.sizePolicy().hasHeightForWidth() - ) - self.pushButton_get_p1.setSizePolicy(sizePolicy5) - self.pushButton_get_p1.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: rgb(16, 133, 255);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_get_p1, 0, 12, 1, 1) - - self.lineEdit_u2 = QLineEdit(self.frame_28) - self.lineEdit_u2.setObjectName("lineEdit_u2") - sizePolicy1.setHeightForWidth(self.lineEdit_u2.sizePolicy().hasHeightForWidth()) - self.lineEdit_u2.setSizePolicy(sizePolicy1) - self.lineEdit_u2.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_u2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u2, 1, 7, 1, 1) - - self.lineEdit_z1 = QLineEdit(self.frame_28) - self.lineEdit_z1.setObjectName("lineEdit_z1") - sizePolicy1.setHeightForWidth(self.lineEdit_z1.sizePolicy().hasHeightForWidth()) - self.lineEdit_z1.setSizePolicy(sizePolicy1) - self.lineEdit_z1.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_z1.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_z1, 0, 5, 1, 1) - - self.pushButton_set_p2 = QPushButton(self.frame_28) - self.pushButton_set_p2.setObjectName("pushButton_set_p2") - sizePolicy5.setHeightForWidth( - self.pushButton_set_p2.sizePolicy().hasHeightForWidth() - ) - self.pushButton_set_p2.setSizePolicy(sizePolicy5) - self.pushButton_set_p2.setStyleSheet( - "\n" - "*{\n" - "color: #ffffff;\n" - "background-color: #1AA094;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 6px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #197971;\n" - "}\n" - "" - ) - - self.gridLayout_5.addWidget(self.pushButton_set_p2, 1, 13, 1, 1) - - self.label_24 = QLabel(self.frame_28) - self.label_24.setObjectName("label_24") - sizePolicy4.setHeightForWidth(self.label_24.sizePolicy().hasHeightForWidth()) - self.label_24.setSizePolicy(sizePolicy4) - self.label_24.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_24, 3, 4, 1, 1) - - self.lineEdit_w3 = QLineEdit(self.frame_28) - self.lineEdit_w3.setObjectName("lineEdit_w3") - sizePolicy1.setHeightForWidth(self.lineEdit_w3.sizePolicy().hasHeightForWidth()) - self.lineEdit_w3.setSizePolicy(sizePolicy1) - self.lineEdit_w3.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_w3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_w3, 2, 11, 1, 1) - - self.lineEdit_u3 = QLineEdit(self.frame_28) - self.lineEdit_u3.setObjectName("lineEdit_u3") - sizePolicy1.setHeightForWidth(self.lineEdit_u3.sizePolicy().hasHeightForWidth()) - self.lineEdit_u3.setSizePolicy(sizePolicy1) - self.lineEdit_u3.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_u3.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_u3, 2, 7, 1, 1) - - self.label_36 = QLabel(self.frame_28) - self.label_36.setObjectName("label_36") - sizePolicy4.setHeightForWidth(self.label_36.sizePolicy().hasHeightForWidth()) - self.label_36.setSizePolicy(sizePolicy4) - self.label_36.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_36, 0, 6, 1, 1) - - self.label_17 = QLabel(self.frame_28) - self.label_17.setObjectName("label_17") - sizePolicy4.setHeightForWidth(self.label_17.sizePolicy().hasHeightForWidth()) - self.label_17.setSizePolicy(sizePolicy4) - self.label_17.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.gridLayout_5.addWidget(self.label_17, 1, 4, 1, 1) - - self.lineEdit_v2 = QLineEdit(self.frame_28) - self.lineEdit_v2.setObjectName("lineEdit_v2") - sizePolicy1.setHeightForWidth(self.lineEdit_v2.sizePolicy().hasHeightForWidth()) - self.lineEdit_v2.setSizePolicy(sizePolicy1) - self.lineEdit_v2.setStyleSheet("border:1px solid #FFFfff") - self.lineEdit_v2.setReadOnly(True) - - self.gridLayout_5.addWidget(self.lineEdit_v2, 1, 9, 1, 1) - - self.gridLayout_5.setRowStretch(0, 1) - self.gridLayout_5.setRowStretch(1, 1) - self.gridLayout_5.setRowStretch(2, 1) - self.gridLayout_5.setRowStretch(3, 1) - self.gridLayout_5.setRowStretch(4, 1) - self.gridLayout_5.setColumnStretch(0, 1) - self.gridLayout_5.setColumnStretch(1, 2) - self.gridLayout_5.setColumnStretch(2, 1) - self.gridLayout_5.setColumnStretch(3, 2) - self.gridLayout_5.setColumnStretch(4, 1) - self.gridLayout_5.setColumnStretch(5, 2) - self.gridLayout_5.setColumnStretch(6, 1) - self.gridLayout_5.setColumnStretch(7, 2) - self.gridLayout_5.setColumnStretch(8, 1) - self.gridLayout_5.setColumnStretch(9, 2) - self.gridLayout_5.setColumnStretch(10, 1) - self.gridLayout_5.setColumnStretch(11, 2) - self.gridLayout_5.setColumnStretch(12, 3) - self.gridLayout_5.setColumnStretch(13, 4) - - self.horizontalLayout_16.addWidget(self.frame_28) - - self.verticalLayout_15.addWidget(self.frame_26) - - self.verticalLayout_15.setStretch(0, 1) - self.verticalLayout_15.setStretch(1, 1) - self.stackedWidget_view.addWidget(self.page_4) - self.page = QWidget() - self.page.setObjectName("page") - self.verticalLayout_17 = QVBoxLayout(self.page) - self.verticalLayout_17.setSpacing(0) - self.verticalLayout_17.setObjectName("verticalLayout_17") - self.verticalLayout_17.setContentsMargins(0, 0, 0, 0) - self.frame_8 = QFrame(self.page) - self.frame_8.setObjectName("frame_8") - self.frame_8.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_8.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_18 = QVBoxLayout(self.frame_8) - self.verticalLayout_18.setObjectName("verticalLayout_18") - self.lineEdit_setting_height1 = QFrame(self.frame_8) - self.lineEdit_setting_height1.setObjectName("lineEdit_setting_height1") - sizePolicy8 = QSizePolicy( - QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum - ) - sizePolicy8.setHorizontalStretch(0) - sizePolicy8.setVerticalStretch(0) - sizePolicy8.setHeightForWidth( - self.lineEdit_setting_height1.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_setting_height1.setSizePolicy(sizePolicy8) - self.lineEdit_setting_height1.setFrameShape(QFrame.Shape.StyledPanel) - self.lineEdit_setting_height1.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_6 = QGridLayout(self.lineEdit_setting_height1) - self.gridLayout_6.setObjectName("gridLayout_6") - self.gridLayout_6.setHorizontalSpacing(0) - self.gridLayout_6.setVerticalSpacing(60) - self.gridLayout_6.setContentsMargins(0, 0, 0, 60) - self.pushButton_saveSeting = QPushButton(self.lineEdit_setting_height1) - self.pushButton_saveSeting.setObjectName("pushButton_saveSeting") - sizePolicy1.setHeightForWidth( - self.pushButton_saveSeting.sizePolicy().hasHeightForWidth() - ) - self.pushButton_saveSeting.setSizePolicy(sizePolicy1) - self.pushButton_saveSeting.setStyleSheet( - "*{\n" - "background-color: #2196F3;\n" - 'font: 20pt "\u6977\u4f53";\n' - "border:None;\n" - "color:#ffffff\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - self.pushButton_saveSeting.setFlat(False) - - self.gridLayout_6.addWidget(self.pushButton_saveSeting, 6, 0, 1, 4) - - self.lineEdit_speed_debug = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_speed_debug.setObjectName("lineEdit_speed_debug") - sizePolicy1.setHeightForWidth( - self.lineEdit_speed_debug.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_speed_debug.setSizePolicy(sizePolicy1) - self.lineEdit_speed_debug.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_speed_debug, 2, 1, 1, 1) - - self.label_51 = QLabel(self.lineEdit_setting_height1) - self.label_51.setObjectName("label_51") - sizePolicy4.setHeightForWidth(self.label_51.sizePolicy().hasHeightForWidth()) - self.label_51.setSizePolicy(sizePolicy4) - self.label_51.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_51, 0, 2, 1, 1) - - self.lineEdit_press_addr = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_press_addr.setObjectName("lineEdit_press_addr") - sizePolicy1.setHeightForWidth( - self.lineEdit_press_addr.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_press_addr.setSizePolicy(sizePolicy1) - self.lineEdit_press_addr.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_press_addr, 1, 3, 1, 1) - - self.label_54 = QLabel(self.lineEdit_setting_height1) - self.label_54.setObjectName("label_54") - sizePolicy4.setHeightForWidth(self.label_54.sizePolicy().hasHeightForWidth()) - self.label_54.setSizePolicy(sizePolicy4) - self.label_54.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_54, 2, 2, 1, 1) - - self.lineEdit_speed_run = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_speed_run.setObjectName("lineEdit_speed_run") - sizePolicy1.setHeightForWidth( - self.lineEdit_speed_run.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_speed_run.setSizePolicy(sizePolicy1) - self.lineEdit_speed_run.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_speed_run, 0, 1, 1, 1) - - self.lineEdit_speed_reset = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_speed_reset.setObjectName("lineEdit_speed_reset") - sizePolicy1.setHeightForWidth( - self.lineEdit_speed_reset.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_speed_reset.setSizePolicy(sizePolicy1) - self.lineEdit_speed_reset.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_speed_reset, 1, 1, 1, 1) - - self.lineEdit_shake_addr = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_shake_addr.setObjectName("lineEdit_shake_addr") - sizePolicy1.setHeightForWidth( - self.lineEdit_shake_addr.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_shake_addr.setSizePolicy(sizePolicy1) - self.lineEdit_shake_addr.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_shake_addr, 2, 3, 1, 1) - - self.lineEdit_timedelay_put = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_timedelay_put.setObjectName("lineEdit_timedelay_put") - sizePolicy1.setHeightForWidth( - self.lineEdit_timedelay_put.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_timedelay_put.setSizePolicy(sizePolicy1) - self.lineEdit_timedelay_put.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_timedelay_put, 4, 1, 1, 1) - - self.label_85 = QLabel(self.lineEdit_setting_height1) - self.label_85.setObjectName("label_85") - sizePolicy4.setHeightForWidth(self.label_85.sizePolicy().hasHeightForWidth()) - self.label_85.setSizePolicy(sizePolicy4) - self.label_85.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_85, 3, 2, 1, 1) - - self.label_94 = QLabel(self.lineEdit_setting_height1) - self.label_94.setObjectName("label_94") - sizePolicy4.setHeightForWidth(self.label_94.sizePolicy().hasHeightForWidth()) - self.label_94.setSizePolicy(sizePolicy4) - self.label_94.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_94, 1, 0, 1, 1) - - self.lineEdit_timedelay_shake = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_timedelay_shake.setObjectName("lineEdit_timedelay_shake") - sizePolicy1.setHeightForWidth( - self.lineEdit_timedelay_shake.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_timedelay_shake.setSizePolicy(sizePolicy1) - self.lineEdit_timedelay_shake.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_timedelay_shake, 3, 3, 1, 1) - - self.label_28 = QLabel(self.lineEdit_setting_height1) - self.label_28.setObjectName("label_28") - sizePolicy4.setHeightForWidth(self.label_28.sizePolicy().hasHeightForWidth()) - self.label_28.setSizePolicy(sizePolicy4) - self.label_28.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_28, 0, 0, 1, 1) - - self.lineEdit_setting_smooth = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_setting_smooth.setObjectName("lineEdit_setting_smooth") - sizePolicy1.setHeightForWidth( - self.lineEdit_setting_smooth.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_setting_smooth.setSizePolicy(sizePolicy1) - self.lineEdit_setting_smooth.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_setting_smooth, 4, 3, 1, 1) - - self.lineEdit_timedelay_take = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_timedelay_take.setObjectName("lineEdit_timedelay_take") - sizePolicy1.setHeightForWidth( - self.lineEdit_timedelay_take.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_timedelay_take.setSizePolicy(sizePolicy1) - self.lineEdit_timedelay_take.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_timedelay_take, 3, 1, 1, 1) - - self.lineEdit_setting_height = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_setting_height.setObjectName("lineEdit_setting_height") - sizePolicy1.setHeightForWidth( - self.lineEdit_setting_height.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_setting_height.setSizePolicy(sizePolicy1) - self.lineEdit_setting_height.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_setting_height, 5, 1, 1, 1) - - self.label_29 = QLabel(self.lineEdit_setting_height1) - self.label_29.setObjectName("label_29") - sizePolicy4.setHeightForWidth(self.label_29.sizePolicy().hasHeightForWidth()) - self.label_29.setSizePolicy(sizePolicy4) - self.label_29.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_29, 2, 0, 1, 1) - - self.label_87 = QLabel(self.lineEdit_setting_height1) - self.label_87.setObjectName("label_87") - sizePolicy4.setHeightForWidth(self.label_87.sizePolicy().hasHeightForWidth()) - self.label_87.setSizePolicy(sizePolicy4) - self.label_87.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_87, 3, 0, 1, 1) - - self.lineEdit_take_addr = QLineEdit(self.lineEdit_setting_height1) - self.lineEdit_take_addr.setObjectName("lineEdit_take_addr") - sizePolicy1.setHeightForWidth( - self.lineEdit_take_addr.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_take_addr.setSizePolicy(sizePolicy1) - self.lineEdit_take_addr.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.lineEdit_take_addr, 0, 3, 1, 1) - - self.label_52 = QLabel(self.lineEdit_setting_height1) - self.label_52.setObjectName("label_52") - sizePolicy4.setHeightForWidth(self.label_52.sizePolicy().hasHeightForWidth()) - self.label_52.setSizePolicy(sizePolicy4) - self.label_52.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_52, 1, 2, 1, 1) - - self.label_89 = QLabel(self.lineEdit_setting_height1) - self.label_89.setObjectName("label_89") - sizePolicy4.setHeightForWidth(self.label_89.sizePolicy().hasHeightForWidth()) - self.label_89.setSizePolicy(sizePolicy4) - self.label_89.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_89, 4, 2, 1, 1) - - self.label_86 = QLabel(self.lineEdit_setting_height1) - self.label_86.setObjectName("label_86") - sizePolicy4.setHeightForWidth(self.label_86.sizePolicy().hasHeightForWidth()) - self.label_86.setSizePolicy(sizePolicy4) - self.label_86.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_86, 4, 0, 1, 1) - - self.label_96 = QLabel(self.lineEdit_setting_height1) - self.label_96.setObjectName("label_96") - sizePolicy4.setHeightForWidth(self.label_96.sizePolicy().hasHeightForWidth()) - self.label_96.setSizePolicy(sizePolicy4) - self.label_96.setStyleSheet("color: rgb(255, 255, 255);") - - self.gridLayout_6.addWidget(self.label_96, 5, 0, 1, 1) - - self.gridLayout_6.setRowStretch(0, 1) - self.gridLayout_6.setRowStretch(1, 1) - self.gridLayout_6.setRowStretch(2, 1) - self.gridLayout_6.setRowStretch(3, 1) - self.gridLayout_6.setRowStretch(4, 1) - self.gridLayout_6.setRowStretch(5, 1) - self.gridLayout_6.setRowStretch(6, 1) - - self.verticalLayout_18.addWidget(self.lineEdit_setting_height1) - - self.verticalLayout_18.setStretch(0, 7) - - self.verticalLayout_17.addWidget(self.frame_8) - - self.stackedWidget_view.addWidget(self.page) - self.page_2 = QWidget() - self.page_2.setObjectName("page_2") - self.verticalLayout_19 = QVBoxLayout(self.page_2) - self.verticalLayout_19.setSpacing(0) - self.verticalLayout_19.setObjectName("verticalLayout_19") - self.verticalLayout_19.setContentsMargins(0, 0, 0, 0) - self.frame_30 = QFrame(self.page_2) - self.frame_30.setObjectName("frame_30") - self.frame_30.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_30.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_17 = QHBoxLayout(self.frame_30) - self.horizontalLayout_17.setSpacing(0) - self.horizontalLayout_17.setObjectName("horizontalLayout_17") - self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0) - self.frame_31 = QFrame(self.frame_30) - self.frame_31.setObjectName("frame_31") - self.frame_31.setStyleSheet("background-color: rgb(85, 170, 255);") - self.frame_31.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_31.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_7 = QGridLayout(self.frame_31) - self.gridLayout_7.setObjectName("gridLayout_7") - self.lineEdit_j6 = QLineEdit(self.frame_31) - self.lineEdit_j6.setObjectName("lineEdit_j6") - - self.gridLayout_7.addWidget(self.lineEdit_j6, 14, 7, 1, 1) - - self.pushButton_j3_add = QPushButton(self.frame_31) - self.pushButton_j3_add.setObjectName("pushButton_j3_add") - self.pushButton_j3_add.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color:rgb(85, 85, 255);\n" - "}\n" - "" - ) - icon6 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListAdd)) - self.pushButton_j3_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j3_add, 8, 6, 1, 1) - - self.lineEdit_j2 = QLineEdit(self.frame_31) - self.lineEdit_j2.setObjectName("lineEdit_j2") - - self.gridLayout_7.addWidget(self.lineEdit_j2, 6, 7, 1, 1) - - self.horizontalSlider_J3 = QSlider(self.frame_31) - self.horizontalSlider_J3.setObjectName("horizontalSlider_J3") - self.horizontalSlider_J3.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J3, 8, 2, 1, 4) - - self.pushButton_j5_add = QPushButton(self.frame_31) - self.pushButton_j5_add.setObjectName("pushButton_j5_add") - self.pushButton_j5_add.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color:rgb(85, 85, 255);\n" - "}\n" - "" - ) - self.pushButton_j5_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j5_add, 12, 6, 1, 1) - - self.pushButton_j6_sub = QPushButton(self.frame_31) - self.pushButton_j6_sub.setObjectName("pushButton_j6_sub") - self.pushButton_j6_sub.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color: rgb(255, 0, 0);\n" - "}\n" - "" - ) - icon7 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListRemove)) - self.pushButton_j6_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j6_sub, 14, 1, 1, 1) - - self.label_34 = QLabel(self.frame_31) - self.label_34.setObjectName("label_34") - self.label_34.setStyleSheet('font: 700 9pt "Microsoft YaHei UI";') - - self.gridLayout_7.addWidget(self.label_34, 12, 0, 1, 1) - - self.pushButton_j6_add = QPushButton(self.frame_31) - self.pushButton_j6_add.setObjectName("pushButton_j6_add") - self.pushButton_j6_add.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color:rgb(85, 85, 255);\n" - "}\n" - "" - ) - self.pushButton_j6_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j6_add, 14, 6, 1, 1) - - self.label_j5_max = QLabel(self.frame_31) - self.label_j5_max.setObjectName("label_j5_max") - - self.gridLayout_7.addWidget(self.label_j5_max, 11, 5, 1, 1) - - self.lineEdit_j4 = QLineEdit(self.frame_31) - self.lineEdit_j4.setObjectName("lineEdit_j4") - - self.gridLayout_7.addWidget(self.lineEdit_j4, 10, 7, 1, 1) - - self.pushButton_j2_add = QPushButton(self.frame_31) - self.pushButton_j2_add.setObjectName("pushButton_j2_add") - self.pushButton_j2_add.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color:rgb(85, 85, 255);\n" - "}\n" - "" - ) - self.pushButton_j2_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j2_add, 6, 6, 1, 1) - - self.lineEdit_j3 = QLineEdit(self.frame_31) - self.lineEdit_j3.setObjectName("lineEdit_j3") - - self.gridLayout_7.addWidget(self.lineEdit_j3, 8, 7, 1, 1) - - self.horizontalSlider_J1 = QSlider(self.frame_31) - self.horizontalSlider_J1.setObjectName("horizontalSlider_J1") - self.horizontalSlider_J1.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J1, 4, 2, 1, 4) - - self.label_j1 = QLabel(self.frame_31) - self.label_j1.setObjectName("label_j1") - - self.gridLayout_7.addWidget(self.label_j1, 3, 4, 1, 1) - - self.label_j2_min = QLabel(self.frame_31) - self.label_j2_min.setObjectName("label_j2_min") - - self.gridLayout_7.addWidget(self.label_j2_min, 5, 2, 1, 2) - - self.lineEdit_j5 = QLineEdit(self.frame_31) - self.lineEdit_j5.setObjectName("lineEdit_j5") - - self.gridLayout_7.addWidget(self.lineEdit_j5, 12, 7, 1, 1) - - self.label_j5_min = QLabel(self.frame_31) - self.label_j5_min.setObjectName("label_j5_min") - - self.gridLayout_7.addWidget(self.label_j5_min, 11, 2, 1, 2) - - self.label_30 = QLabel(self.frame_31) - self.label_30.setObjectName("label_30") - self.label_30.setStyleSheet('font: 700 9pt "Microsoft YaHei UI";') - - self.gridLayout_7.addWidget(self.label_30, 4, 0, 1, 1) - - self.label_j6_min = QLabel(self.frame_31) - self.label_j6_min.setObjectName("label_j6_min") - - self.gridLayout_7.addWidget(self.label_j6_min, 13, 2, 1, 2) - - self.label_j3_min = QLabel(self.frame_31) - self.label_j3_min.setObjectName("label_j3_min") - - self.gridLayout_7.addWidget(self.label_j3_min, 7, 2, 1, 2) - - self.horizontalSlider_J4 = QSlider(self.frame_31) - self.horizontalSlider_J4.setObjectName("horizontalSlider_J4") - self.horizontalSlider_J4.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J4, 10, 2, 1, 4) - - self.label_j3_max = QLabel(self.frame_31) - self.label_j3_max.setObjectName("label_j3_max") - - self.gridLayout_7.addWidget(self.label_j3_max, 7, 5, 1, 1) - - self.pushButton_j3_sub = QPushButton(self.frame_31) - self.pushButton_j3_sub.setObjectName("pushButton_j3_sub") - self.pushButton_j3_sub.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color: rgb(255, 0, 0);\n" - "}\n" - "" - ) - self.pushButton_j3_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j3_sub, 8, 1, 1, 1) - - self.pushButton_j4_sub = QPushButton(self.frame_31) - self.pushButton_j4_sub.setObjectName("pushButton_j4_sub") - self.pushButton_j4_sub.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color: rgb(255, 0, 0);\n" - "}\n" - "" - ) - self.pushButton_j4_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j4_sub, 10, 1, 1, 1) - - self.pushButton_j1_add = QPushButton(self.frame_31) - self.pushButton_j1_add.setObjectName("pushButton_j1_add") - self.pushButton_j1_add.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color:rgb(0, 255, 0);\n" - "}\n" - "" - ) - self.pushButton_j1_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j1_add, 4, 6, 1, 1) - - self.label_j4_min = QLabel(self.frame_31) - self.label_j4_min.setObjectName("label_j4_min") - - self.gridLayout_7.addWidget(self.label_j4_min, 9, 2, 1, 2) - - self.pushButton_j1_sub = QPushButton(self.frame_31) - self.pushButton_j1_sub.setObjectName("pushButton_j1_sub") - self.pushButton_j1_sub.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color: rgb(255, 0, 0);\n" - "}\n" - "" - ) - self.pushButton_j1_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j1_sub, 4, 1, 1, 1) - - self.pushButton_sendMove = QPushButton(self.frame_31) - self.pushButton_sendMove.setObjectName("pushButton_sendMove") - self.pushButton_sendMove.setStyleSheet( - "*{\n" - "background-color: #007AD9;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border:6px solid #55AAFF;\n" - "color:#ffffff\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - - self.gridLayout_7.addWidget(self.pushButton_sendMove, 15, 0, 1, 8) - - self.horizontalSlider_J2 = QSlider(self.frame_31) - self.horizontalSlider_J2.setObjectName("horizontalSlider_J2") - self.horizontalSlider_J2.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J2, 6, 2, 1, 4) - - self.horizontalSlider_J5 = QSlider(self.frame_31) - self.horizontalSlider_J5.setObjectName("horizontalSlider_J5") - self.horizontalSlider_J5.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J5, 12, 2, 1, 4) - - self.label_j1_max = QLabel(self.frame_31) - self.label_j1_max.setObjectName("label_j1_max") - - self.gridLayout_7.addWidget(self.label_j1_max, 3, 5, 1, 1) - - self.label_j3 = QLabel(self.frame_31) - self.label_j3.setObjectName("label_j3") - - self.gridLayout_7.addWidget(self.label_j3, 7, 4, 1, 1) - - self.pushButton_j5_sub = QPushButton(self.frame_31) - self.pushButton_j5_sub.setObjectName("pushButton_j5_sub") - self.pushButton_j5_sub.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color: rgb(255, 0, 0);\n" - "}\n" - "" - ) - self.pushButton_j5_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j5_sub, 12, 1, 1, 1) - - self.label_j6_max = QLabel(self.frame_31) - self.label_j6_max.setObjectName("label_j6_max") - - self.gridLayout_7.addWidget(self.label_j6_max, 13, 5, 1, 1) - - self.label_j5 = QLabel(self.frame_31) - self.label_j5.setObjectName("label_j5") - - self.gridLayout_7.addWidget(self.label_j5, 11, 4, 1, 1) - - self.label_35 = QLabel(self.frame_31) - self.label_35.setObjectName("label_35") - self.label_35.setStyleSheet('font: 700 9pt "Microsoft YaHei UI";') - - self.gridLayout_7.addWidget(self.label_35, 14, 0, 1, 1) - - self.lineEdit_j1 = QLineEdit(self.frame_31) - self.lineEdit_j1.setObjectName("lineEdit_j1") - - self.gridLayout_7.addWidget(self.lineEdit_j1, 4, 7, 1, 1) - - self.label_j2_max = QLabel(self.frame_31) - self.label_j2_max.setObjectName("label_j2_max") - - self.gridLayout_7.addWidget(self.label_j2_max, 5, 5, 1, 1) - - self.label_32 = QLabel(self.frame_31) - self.label_32.setObjectName("label_32") - self.label_32.setStyleSheet('font: 700 9pt "Microsoft YaHei UI";') - - self.gridLayout_7.addWidget(self.label_32, 8, 0, 1, 1) - - self.pushButton_j4_add = QPushButton(self.frame_31) - self.pushButton_j4_add.setObjectName("pushButton_j4_add") - self.pushButton_j4_add.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color:rgb(85, 85, 255);\n" - "}\n" - "" - ) - self.pushButton_j4_add.setIcon(icon6) - - self.gridLayout_7.addWidget(self.pushButton_j4_add, 10, 6, 1, 1) - - self.label_j6 = QLabel(self.frame_31) - self.label_j6.setObjectName("label_j6") - - self.gridLayout_7.addWidget(self.label_j6, 13, 4, 1, 1) - - self.label_j1_min = QLabel(self.frame_31) - self.label_j1_min.setObjectName("label_j1_min") - - self.gridLayout_7.addWidget(self.label_j1_min, 3, 2, 1, 1) - - self.label_j4 = QLabel(self.frame_31) - self.label_j4.setObjectName("label_j4") - - self.gridLayout_7.addWidget(self.label_j4, 9, 4, 1, 1) - - self.pushButton_j2_sub = QPushButton(self.frame_31) - self.pushButton_j2_sub.setObjectName("pushButton_j2_sub") - self.pushButton_j2_sub.setStyleSheet( - "*{\n" - "background-color: #E7EAEA;\n" - "border-radius: 10px;\n" - 'font: 10pt "\u6977\u4f53";\n' - "}\n" - "*:hover{\n" - " background-color: rgb(85, 85, 255);\n" - "}\n" - "*:pressed{\n" - " background-color: rgb(255, 0, 0);\n" - "}\n" - "" - ) - self.pushButton_j2_sub.setIcon(icon7) - - self.gridLayout_7.addWidget(self.pushButton_j2_sub, 6, 1, 1, 1) - - self.label_j2 = QLabel(self.frame_31) - self.label_j2.setObjectName("label_j2") - - self.gridLayout_7.addWidget(self.label_j2, 5, 4, 1, 1) - - self.label_31 = QLabel(self.frame_31) - self.label_31.setObjectName("label_31") - self.label_31.setStyleSheet('font: 700 9pt "Microsoft YaHei UI";') - - self.gridLayout_7.addWidget(self.label_31, 6, 0, 1, 1) - - self.label_manual_adjust_accuracy = QLabel(self.frame_31) - self.label_manual_adjust_accuracy.setObjectName("label_manual_adjust_accuracy") - - self.gridLayout_7.addWidget(self.label_manual_adjust_accuracy, 0, 2, 1, 1) - - self.label_j4_max = QLabel(self.frame_31) - self.label_j4_max.setObjectName("label_j4_max") - - self.gridLayout_7.addWidget(self.label_j4_max, 9, 5, 1, 1) - - self.label_33 = QLabel(self.frame_31) - self.label_33.setObjectName("label_33") - self.label_33.setStyleSheet('font: 700 9pt "Microsoft YaHei UI";') - - self.gridLayout_7.addWidget(self.label_33, 10, 0, 1, 1) - - self.horizontalSlider_J6 = QSlider(self.frame_31) - self.horizontalSlider_J6.setObjectName("horizontalSlider_J6") - self.horizontalSlider_J6.setOrientation(Qt.Orientation.Horizontal) - - self.gridLayout_7.addWidget(self.horizontalSlider_J6, 14, 2, 1, 4) - - self.lineEdit_manual_adjust_accuracy = QLineEdit(self.frame_31) - self.lineEdit_manual_adjust_accuracy.setObjectName( - "lineEdit_manual_adjust_accuracy" - ) - - self.gridLayout_7.addWidget(self.lineEdit_manual_adjust_accuracy, 0, 3, 1, 1) - - self.gridLayout_7.setColumnStretch(0, 1) - self.gridLayout_7.setColumnStretch(1, 1) - self.gridLayout_7.setColumnStretch(2, 1) - self.gridLayout_7.setColumnStretch(3, 6) - self.gridLayout_7.setColumnStretch(4, 1) - self.gridLayout_7.setColumnStretch(5, 1) - self.gridLayout_7.setColumnStretch(6, 1) - self.gridLayout_7.setColumnStretch(7, 2) - - self.horizontalLayout_17.addWidget(self.frame_31) - - self.verticalLayout_19.addWidget(self.frame_30) - - self.stackedWidget_view.addWidget(self.page_2) - self.page_8 = QWidget() - self.page_8.setObjectName("page_8") - self.verticalLayout_22 = QVBoxLayout(self.page_8) - self.verticalLayout_22.setSpacing(0) - self.verticalLayout_22.setObjectName("verticalLayout_22") - self.verticalLayout_22.setContentsMargins(0, 0, 0, 0) - self.frame_16 = QFrame(self.page_8) - self.frame_16.setObjectName("frame_16") - self.frame_16.setStyleSheet("color: rgb(255, 255, 255);") - self.frame_16.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_16.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_23 = QVBoxLayout(self.frame_16) - self.verticalLayout_23.setObjectName("verticalLayout_23") - self.pushButton_savePosition = QPushButton(self.frame_16) - self.pushButton_savePosition.setObjectName("pushButton_savePosition") - self.pushButton_savePosition.setStyleSheet( - "color: rgb(255, 255, 255);\n" "background-color: rgb(0, 85, 0);" - ) - - self.verticalLayout_23.addWidget(self.pushButton_savePosition) - - self.label_table_line_title = QLabel(self.frame_16) - self.label_table_line_title.setObjectName("label_table_line_title") - self.label_table_line_title.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.verticalLayout_23.addWidget(self.label_table_line_title) - - self.tableWidget_lines = QTableWidget(self.frame_16) - self.tableWidget_lines.setObjectName("tableWidget_lines") - self.tableWidget_lines.setStyleSheet( - " QHeaderView::section {\n" - " background-color: #2C2C2C; /* \u8868\u5934\u80cc\u666f\u8272 */\n" - " color: white; /* \u8868\u5934\u5b57\u4f53\u989c\u8272 */\n" - " font-size: 14px; /* \u5b57\u4f53\u5927\u5c0f */\n" - " font-weight: bold; /* \u5b57\u4f53\u52a0\u7c97 */\n" - " border: 1px solid black; /* \u8fb9\u6846\u989c\u8272 */\n" - " padding: 4px; /* \u5185\u8fb9\u8ddd */\n" - " }" - ) - - self.verticalLayout_23.addWidget(self.tableWidget_lines) - - self.label_table_line_position_title = QLabel(self.frame_16) - self.label_table_line_position_title.setObjectName( - "label_table_line_position_title" - ) - self.label_table_line_position_title.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.verticalLayout_23.addWidget(self.label_table_line_position_title) - - self.tableWidget_line_positions = QTableWidget(self.frame_16) - self.tableWidget_line_positions.setObjectName("tableWidget_line_positions") - self.tableWidget_line_positions.setStyleSheet( - " QHeaderView::section {\n" - " background-color: #2C2C2C; /* \u8868\u5934\u80cc\u666f\u8272 */\n" - " color: white; /* \u8868\u5934\u5b57\u4f53\u989c\u8272 */\n" - " font-size: 14px; /* \u5b57\u4f53\u5927\u5c0f */\n" - " font-weight: bold; /* \u5b57\u4f53\u52a0\u7c97 */\n" - " border: 1px solid black; /* \u8fb9\u6846\u989c\u8272 */\n" - " padding: 4px; /* \u5185\u8fb9\u8ddd */\n" - " }" - ) - - self.verticalLayout_23.addWidget(self.tableWidget_line_positions) - - self.verticalLayout_22.addWidget(self.frame_16) - - self.stackedWidget_view.addWidget(self.page_8) - - self.verticalLayout_8.addWidget(self.stackedWidget_view) - - self.horizontalLayout_4.addWidget(self.frame_view) - - self.frame_right = QFrame(self.frame_main) - self.frame_right.setObjectName("frame_right") - sizePolicy1.setHeightForWidth(self.frame_right.sizePolicy().hasHeightForWidth()) - self.frame_right.setSizePolicy(sizePolicy1) - self.frame_right.setStyleSheet( - "background-color: rgb(16, 21, 49);\n" "border: 1px solid #122041;" - ) - self.frame_right.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_right.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_10 = QVBoxLayout(self.frame_right) - self.verticalLayout_10.setSpacing(0) - self.verticalLayout_10.setObjectName("verticalLayout_10") - self.verticalLayout_10.setContentsMargins(0, 0, 0, 0) - self.frame_19 = QFrame(self.frame_right) - self.frame_19.setObjectName("frame_19") - self.frame_19.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_19.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_10 = QHBoxLayout(self.frame_19) - self.horizontalLayout_10.setObjectName("horizontalLayout_10") - self.label_3 = QLabel(self.frame_19) - self.label_3.setObjectName("label_3") - self.label_3.setStyleSheet("border-image: url(:/main/Image/calendar.svg);") - self.label_3.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_10.addWidget(self.label_3) - - self.label_date = QLabel(self.frame_19) - self.label_date.setObjectName("label_date") - self.label_date.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - self.label_date.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_10.addWidget(self.label_date) - - self.label_time = QLabel(self.frame_19) - self.label_time.setObjectName("label_time") - self.label_time.setStyleSheet( - "color:#fff;\n" - 'font: 290 9pt "Microsoft YaHei";\n' - 'font: 700 9pt "Microsoft YaHei UI";' - ) - - self.horizontalLayout_10.addWidget(self.label_time) - - self.horizontalLayout_10.setStretch(0, 1) - self.horizontalLayout_10.setStretch(1, 5) - self.horizontalLayout_10.setStretch(2, 5) - - self.verticalLayout_10.addWidget(self.frame_19) - - self.frame_20 = QFrame(self.frame_right) - self.frame_20.setObjectName("frame_20") - self.frame_20.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_20.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_11 = QVBoxLayout(self.frame_20) - self.verticalLayout_11.setObjectName("verticalLayout_11") - self.comboBox_lineIndex = QComboBox(self.frame_20) - self.comboBox_lineIndex.addItem("") - self.comboBox_lineIndex.addItem("") - self.comboBox_lineIndex.setObjectName("comboBox_lineIndex") - self.comboBox_lineIndex.setStyleSheet( - "QComboBox {\n" - " border-radius: 10px;\n" - " padding: 5px 5px 5px 5px;\n" - " background-color: #2c2c2c;\n" - " color: white;\n" - " border: 1px solid #474747;\n" - " min-width: 80px;\n" - "}\n" - "\n" - "\n" - "QComboBox::drop-down {\n" - " width: 0px;\n" - " border: none;\n" - "\n" - "}\n" - "\n" - "QComboBox::down-arrow {\n" - " image: none;\n" - "}\n" - "\n" - "QComboBox QAbstractItemView {\n" - " border-bottom-right-radius: 10px;\n" - " border-bottom-left-radius: 10px;\n" - " background-color: #D3D3D3;\n" - " border: 1px solid gray;\n" - " padding: 4px 4px 4px 4px;\n" - " outline: none;\n" - "}" - ) - - self.verticalLayout_11.addWidget(self.comboBox_lineIndex) - - self.stackedWidget_num = QStackedWidget(self.frame_20) - self.stackedWidget_num.setObjectName("stackedWidget_num") - self.stackedWidget_num.setStyleSheet("border:none;") - self.page_5 = QWidget() - self.page_5.setObjectName("page_5") - self.horizontalLayout_18 = QHBoxLayout(self.page_5) - self.horizontalLayout_18.setSpacing(0) - self.horizontalLayout_18.setObjectName("horizontalLayout_18") - self.horizontalLayout_18.setContentsMargins(0, 0, 0, 0) - self.frame_23 = QFrame(self.page_5) - self.frame_23.setObjectName("frame_23") - self.frame_23.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_23.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout = QGridLayout(self.frame_23) - self.gridLayout.setObjectName("gridLayout") - self.pushButton_num1 = QPushButton(self.frame_23) - self.pushButton_num1.setObjectName("pushButton_num1") - sizePolicy1.setHeightForWidth( - self.pushButton_num1.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num1.setSizePolicy(sizePolicy1) - self.pushButton_num1.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num1, 0, 0, 1, 1) - - self.pushButton_num2 = QPushButton(self.frame_23) - self.pushButton_num2.setObjectName("pushButton_num2") - sizePolicy1.setHeightForWidth( - self.pushButton_num2.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num2.setSizePolicy(sizePolicy1) - self.pushButton_num2.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num2, 0, 1, 1, 1) - - self.pushButton_num3 = QPushButton(self.frame_23) - self.pushButton_num3.setObjectName("pushButton_num3") - sizePolicy1.setHeightForWidth( - self.pushButton_num3.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num3.setSizePolicy(sizePolicy1) - self.pushButton_num3.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num3, 0, 2, 1, 1) - - self.pushButton_num4 = QPushButton(self.frame_23) - self.pushButton_num4.setObjectName("pushButton_num4") - sizePolicy1.setHeightForWidth( - self.pushButton_num4.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num4.setSizePolicy(sizePolicy1) - self.pushButton_num4.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num4, 1, 0, 1, 1) - - self.pushButton_num5 = QPushButton(self.frame_23) - self.pushButton_num5.setObjectName("pushButton_num5") - sizePolicy1.setHeightForWidth( - self.pushButton_num5.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num5.setSizePolicy(sizePolicy1) - self.pushButton_num5.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num5, 1, 1, 1, 1) - - self.pushButton_num6 = QPushButton(self.frame_23) - self.pushButton_num6.setObjectName("pushButton_num6") - sizePolicy1.setHeightForWidth( - self.pushButton_num6.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num6.setSizePolicy(sizePolicy1) - self.pushButton_num6.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num6, 1, 2, 1, 1) - - self.lineEdit_num = QLineEdit(self.frame_23) - self.lineEdit_num.setObjectName("lineEdit_num") - sizePolicy1.setHeightForWidth( - self.lineEdit_num.sizePolicy().hasHeightForWidth() - ) - self.lineEdit_num.setSizePolicy(sizePolicy1) - self.lineEdit_num.setStyleSheet( - "color: rgb(255, 255, 255);\n" - "border: 1px solid #dcdfe6;\n" - 'font: 8pt "Microsoft YaHei UI";' - ) - - self.gridLayout.addWidget(self.lineEdit_num, 2, 0, 1, 1) - - self.pushButton_num_confirm = QPushButton(self.frame_23) - self.pushButton_num_confirm.setObjectName("pushButton_num_confirm") - sizePolicy1.setHeightForWidth( - self.pushButton_num_confirm.sizePolicy().hasHeightForWidth() - ) - self.pushButton_num_confirm.setSizePolicy(sizePolicy1) - self.pushButton_num_confirm.setStyleSheet( - "\n" - "*{background-color: #101F3F;\n" - 'font: 10pt "\u6977\u4f53";\n' - "color:#ffffff\n" - "}\n" - "*:hover {\n" - " background-color: lightgreen;\n" - " color: black;\n" - "}*:pressed {\n" - " background-color: red;\n" - " color: white;\n" - " }" - ) - - self.gridLayout.addWidget(self.pushButton_num_confirm, 2, 1, 1, 2) - - self.gridLayout.setColumnStretch(0, 1) - self.gridLayout.setColumnStretch(1, 1) - self.gridLayout.setColumnStretch(2, 1) - - self.horizontalLayout_18.addWidget(self.frame_23) - - self.stackedWidget_num.addWidget(self.page_5) - self.page_6 = QWidget() - self.page_6.setObjectName("page_6") - self.verticalLayout_20 = QVBoxLayout(self.page_6) - self.verticalLayout_20.setSpacing(0) - self.verticalLayout_20.setObjectName("verticalLayout_20") - self.verticalLayout_20.setContentsMargins(0, 0, 0, 0) - self.frame_32 = QFrame(self.page_6) - self.frame_32.setObjectName("frame_32") - self.frame_32.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_32.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_21 = QVBoxLayout(self.frame_32) - self.verticalLayout_21.setObjectName("verticalLayout_21") - self.pushButton_AddNum = QPushButton(self.frame_32) - self.pushButton_AddNum.setObjectName("pushButton_AddNum") - sizePolicy5.setHeightForWidth( - self.pushButton_AddNum.sizePolicy().hasHeightForWidth() - ) - self.pushButton_AddNum.setSizePolicy(sizePolicy5) - self.pushButton_AddNum.setStyleSheet( - "*{\n" - "background-color: #499C54;\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - self.pushButton_AddNum.setIcon(icon6) - - self.verticalLayout_21.addWidget(self.pushButton_AddNum) - - self.pushButton_SubNum = QPushButton(self.frame_32) - self.pushButton_SubNum.setObjectName("pushButton_SubNum") - sizePolicy5.setHeightForWidth( - self.pushButton_SubNum.sizePolicy().hasHeightForWidth() - ) - self.pushButton_SubNum.setSizePolicy(sizePolicy5) - self.pushButton_SubNum.setStyleSheet( - "*{\n" - "background-color: rgb(255, 0, 0);\n" - 'font: 12pt "\u6977\u4f53";\n' - "border: 1px solid #dcdfe6;\n" - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - self.pushButton_SubNum.setIcon(icon7) - - self.verticalLayout_21.addWidget(self.pushButton_SubNum) - - self.verticalLayout_20.addWidget(self.frame_32) - - self.stackedWidget_num.addWidget(self.page_6) - - self.verticalLayout_11.addWidget(self.stackedWidget_num) - - self.verticalLayout_10.addWidget(self.frame_20) - - self.frame_21 = QFrame(self.frame_right) - self.frame_21.setObjectName("frame_21") - sizePolicy4.setHeightForWidth(self.frame_21.sizePolicy().hasHeightForWidth()) - self.frame_21.setSizePolicy(sizePolicy4) - self.frame_21.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_21.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_2 = QGridLayout(self.frame_21) - self.gridLayout_2.setObjectName("gridLayout_2") - self.pushButton_reset = QPushButton(self.frame_21) - self.pushButton_reset.setObjectName("pushButton_reset") - self.pushButton_reset.setVisible(False) # 8/18 隐藏复位 - sizePolicy5.setHeightForWidth( - self.pushButton_reset.sizePolicy().hasHeightForWidth() - ) - self.pushButton_reset.setSizePolicy(sizePolicy5) - self.pushButton_reset.setStyleSheet( - "*{\n" - "background-color: #FFFFBF;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #FFF000;\n" - "}\n" - "" - ) - icon8 = QIcon(QIcon.fromTheme("media-optical")) - self.pushButton_reset.setIcon(icon8) - - self.gridLayout_2.addWidget(self.pushButton_reset, 2, 1, 1, 2) - - self.pushButton_emergency = QPushButton(self.frame_21) - self.pushButton_emergency.setObjectName("pushButton_emergency") - sizePolicy5.setHeightForWidth( - self.pushButton_emergency.sizePolicy().hasHeightForWidth() - ) - self.pushButton_emergency.setSizePolicy(sizePolicy5) - self.pushButton_emergency.setStyleSheet( - "*{\n" - "background-color: #FFF000;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #ff6e00;\n" - "}\n" - "\n" - "" - ) - icon9 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.WindowClose)) - self.pushButton_emergency.setIcon(icon9) - - self.gridLayout_2.addWidget(self.pushButton_emergency, 3, 0, 1, 1) - - self.pushButton_stopFeed = QPushButton(self.frame_21) - self.pushButton_stopFeed.setObjectName("pushButton_stopFeed") - sizePolicy5.setHeightForWidth( - self.pushButton_stopFeed.sizePolicy().hasHeightForWidth() - ) - self.pushButton_stopFeed.setSizePolicy(sizePolicy5) - self.pushButton_stopFeed.setStyleSheet( - "*{\n" - "background-color: #FF0000;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - icon10 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemShutdown)) - self.pushButton_stopFeed.setIcon(icon10) - - self.gridLayout_2.addWidget(self.pushButton_stopFeed, 2, 0, 1, 1) - - self.pushButton_pauseFeed = QPushButton(self.frame_21) - self.pushButton_pauseFeed.setObjectName("pushButton_pauseFeed") - sizePolicy5.setHeightForWidth( - self.pushButton_pauseFeed.sizePolicy().hasHeightForWidth() - ) - self.pushButton_pauseFeed.setVisible(False) # 8/18 隐藏暂停 - self.pushButton_pauseFeed.setSizePolicy(sizePolicy5) - self.pushButton_pauseFeed.setStyleSheet( - "*{\n" - "background-color: #2196F3;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - icon11 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) - self.pushButton_pauseFeed.setIcon(icon11) - - self.gridLayout_2.addWidget(self.pushButton_pauseFeed, 1, 1, 1, 2) - - self.pushButton_startFeed = QPushButton(self.frame_21) - self.pushButton_startFeed.setObjectName("pushButton_startFeed") - sizePolicy5.setHeightForWidth( - self.pushButton_startFeed.sizePolicy().hasHeightForWidth() - ) - self.pushButton_startFeed.setSizePolicy(sizePolicy5) - self.pushButton_startFeed.setStyleSheet( - "*{\n" - "background-color: #499C54;\n" - 'font: 9pt "\u6977\u4f53";\n' - "\n" - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color: #499c8a;\n" - "}\n" - "" - ) - icon12 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackStart)) - self.pushButton_startFeed.setIcon(icon12) - - self.gridLayout_2.addWidget(self.pushButton_startFeed, 1, 0, 1, 1) - - self.pushButton_clearAlarm = QPushButton(self.frame_21) - self.pushButton_clearAlarm.setObjectName("pushButton_clearAlarm") - sizePolicy5.setHeightForWidth( - self.pushButton_clearAlarm.sizePolicy().hasHeightForWidth() - ) - self.pushButton_clearAlarm.setSizePolicy(sizePolicy5) - self.pushButton_clearAlarm.setStyleSheet( - "*{\n" - "background-color: #1CB2B1;\n" - 'font: 9pt "\u6977\u4f53";\n' - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color:#1cb052;\n" - "}\n" - "\n" - "" - ) - icon13 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemReboot)) - self.pushButton_clearAlarm.setIcon(icon13) - - self.pushButton_clearAlarm.setVisible(False) # 8/18 隐藏 清除警报 - - self.gridLayout_2.addWidget(self.pushButton_clearAlarm, 3, 1, 1, 2) - - self.pushButton_onekeyfeed = QPushButton(self.frame_21) - self.pushButton_onekeyfeed.setObjectName("pushButton_onekeyfeed") - sizePolicy5.setHeightForWidth( - self.pushButton_onekeyfeed.sizePolicy().hasHeightForWidth() - ) - self.pushButton_onekeyfeed.setSizePolicy(sizePolicy5) - self.pushButton_onekeyfeed.setStyleSheet( - "*{\n" - "background-color: rgb(0, 170, 0);\n" - "\n" - 'font: 9pt "\u6977\u4f53";\n' - "border-radius: 10px;\n" - "}\n" - "*:pressed\n" - "{\n" - "background-color:#1cb052;\n" - "}\n" - "\n" - "" - ) - icon14 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.DocumentSend)) - self.pushButton_onekeyfeed.setIcon(icon14) - self.pushButton_onekeyfeed.setIconSize(QSize(20, 20)) - - self.gridLayout_2.addWidget(self.pushButton_onekeyfeed, 0, 0, 1, 2) - - self.gridLayout_2.setRowStretch(0, 2) - self.gridLayout_2.setRowStretch(1, 2) - self.gridLayout_2.setRowStretch(2, 2) - self.gridLayout_2.setRowStretch(3, 2) - self.gridLayout_2.setColumnStretch(0, 1) - # 8/18 第一列不分配空间(将第一列隐藏之后设置, 只保留启动,停止,急停) - self.gridLayout_2.setColumnStretch(1, 0) - # self.gridLayout_2.setColumnStretch(1, 1) # 这里和上面只能存在一个 - self.gridLayout_2.setRowMinimumHeight(0, 2) - self.gridLayout_2.setRowMinimumHeight(1, 2) - self.gridLayout_2.setRowMinimumHeight(2, 2) - - self.verticalLayout_10.addWidget(self.frame_21) - - self.frame_22 = QFrame(self.frame_right) - self.frame_22.setObjectName("frame_22") - self.frame_22.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_22.setFrameShadow(QFrame.Shadow.Raised) - self.verticalLayout_12 = QVBoxLayout(self.frame_22) - self.verticalLayout_12.setObjectName("verticalLayout_12") - self.horizontalSlider_feedingNum = QSlider(self.frame_22) - self.horizontalSlider_feedingNum.setObjectName("horizontalSlider_feedingNum") - self.horizontalSlider_feedingNum.setStyleSheet( - "/**QSlider\n" - "{\n" - " background-color: #FFFFFF; \n" - " border-style: outset; \n" - " border-radius:5px; \n" - "}\n" - " \n" - "QSlider::groove:horizontal\n" - "{\n" - " height: 10px;\n" - " background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);\n" - " margin: 10px 0\n" - "}\n" - " \n" - "QSlider::handle:horizontal \n" - "{\n" - " background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green);\n" - " width: 10px;\n" - " height: 16px;\n" - " margin: -5px 3px -5px 6px;\n" - " border-radius:5px; \n" - " border: 3px solid #007900;\n" - "}\n" - "**/\n" - "/*\u7b2c\u4e00\u79cd\u98ce\u683c*/\n" - "/**\n" - " groove\u8868\u793a\u69fd\u7684\u90e8\u5206\n" - " handle\u8868\u793a\u6ed1\u5757\n" - " add-page\u8868\u793a\u672a\u6ed1\u8fc7\u7684\u69fd\u90e8\u5206\n" - " sub-page\u8868\u793a\u5df2\u6ed1\u8fc7\u7684\u69fd\u90e8\u5206\n" - " \u5728\u8f85\u52a9\u63a7\u5236\u5668\u540e\u9762\u53ef\u4ee5\u8bbe\u7f6e\u72b6\u6001\uff0chorizontal\u5c31\u662fQSS\u751f\u6548\u7684QSlider\u7684\u72b6\u6001\n" - "*" - "*/\n" - "\n" - "QSlider::groove:horizontal\n" - "{\n" - " height:10px;\n" - " border-radius: 5px;\n" - " background-color:rgb(219,219,219);\n" - "}\n" - "\n" - "\n" - "QSlider::handle:horizontal \n" - "{\n" - " background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green);\n" - " width: 5px;\n" - " height: 5px;\n" - " margin: -5px 3px -5px 6px;\n" - " border-radius:5px; \n" - " border: 3px solid #007900;\n" - "}\n" - "\n" - "QSlider::add-page:horizontal\n" - "{\n" - " border-radius: 5px;\n" - " background-color: rgb(219,219,219);\n" - "}\n" - " \n" - "QSlider::sub-page:horizontal\n" - "{\n" - " border-radius: 5px;\n" - " background-color: rgb(80,166,234);\n" - "}\n" - "\n" - "\n" - "\n" - "\n" - "\n" - "" - ) - self.horizontalSlider_feedingNum.setOrientation(Qt.Orientation.Horizontal) - - self.verticalLayout_12.addWidget(self.horizontalSlider_feedingNum) - - self.frame_7 = QFrame(self.frame_22) - self.frame_7.setObjectName("frame_7") - self.frame_7.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_7.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_11 = QHBoxLayout(self.frame_7) - self.horizontalLayout_11.setObjectName("horizontalLayout_11") - self.label_4 = QLabel(self.frame_7) - self.label_4.setObjectName("label_4") - self.label_4.setStyleSheet("color: rgb(255, 255, 255);") - self.label_4.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.horizontalLayout_11.addWidget(self.label_4) - - self.label_maxNum = QLabel(self.frame_7) - self.label_maxNum.setObjectName("label_maxNum") - self.label_maxNum.setStyleSheet( - "color: rgb(255, 0, 0);\n" 'font: 36pt "Microsoft YaHei UI";' - ) - self.label_maxNum.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_11.addWidget(self.label_maxNum) - - self.horizontalLayout_11.setStretch(0, 1) - self.horizontalLayout_11.setStretch(1, 5) - - self.verticalLayout_12.addWidget(self.frame_7) - - self.frame_24 = QFrame(self.frame_22) - self.frame_24.setObjectName("frame_24") - self.frame_24.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_24.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalLayout_12 = QHBoxLayout(self.frame_24) - self.horizontalLayout_12.setObjectName("horizontalLayout_12") - self.label_6 = QLabel(self.frame_24) - self.label_6.setObjectName("label_6") - self.label_6.setStyleSheet("color: rgb(255, 255, 255);") - self.label_6.setAlignment( - Qt.AlignmentFlag.AlignRight - | Qt.AlignmentFlag.AlignTrailing - | Qt.AlignmentFlag.AlignVCenter - ) - - self.horizontalLayout_12.addWidget(self.label_6) - - self.label_remain_num = QLabel(self.frame_24) - self.label_remain_num.setObjectName("label_remain_num") - self.label_remain_num.setStyleSheet( - "color: rgb(0, 255, 0);\n" 'font: 36pt "Microsoft YaHei UI";' - ) - self.label_remain_num.setAlignment(Qt.AlignmentFlag.AlignCenter) - - self.horizontalLayout_12.addWidget(self.label_remain_num) - - self.horizontalLayout_12.setStretch(0, 1) - self.horizontalLayout_12.setStretch(1, 5) - - self.verticalLayout_12.addWidget(self.frame_24) - - self.verticalLayout_10.addWidget(self.frame_22) - - self.verticalLayout_10.setStretch(0, 1) - self.verticalLayout_10.setStretch(1, 6) - self.verticalLayout_10.setStretch(2, 6) - self.verticalLayout_10.setStretch(3, 1) - - self.horizontalLayout_4.addWidget(self.frame_right) - - self.horizontalLayout_4.setStretch(0, 45) - self.horizontalLayout_4.setStretch(1, 137) - self.horizontalLayout_4.setStretch(2, 59) - - self.verticalLayout.addWidget(self.frame_main) - - self.verticalLayout.setStretch(0, 1) - self.verticalLayout.setStretch(1, 11) - MainWindow.setCentralWidget(self.centralwidget) - - self.retranslateUi(MainWindow) - - self.stackedWidget_view.setCurrentIndex(0) - self.tabWidget.setCurrentIndex(0) - self.stackedWidget_num.setCurrentIndex(0) - - QMetaObject.connectSlotsByName(MainWindow) - - # setupUi - - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle( - QCoreApplication.translate("MainWindow", "\u5bc6\u80fa", None) - ) - self.label.setText("") - self.label_2.setText( - QCoreApplication.translate("MainWindow", "爱来米业码垛系统", None) - ) - self.pushButton.setText( - QCoreApplication.translate("MainWindow", "\u6295\u6599\u4e2d\u5fc3", None) - ) - self.pushButton_2.setText( - QCoreApplication.translate("MainWindow", "\u634f\u5408\u4e2d\u5fc3", None) - ) - self.pushButton_3.setText( - QCoreApplication.translate("MainWindow", "\u6210\u54c1", None) - ) - self.pushButton_4.setText( - QCoreApplication.translate("MainWindow", "\u63a7\u5236\u4e2d\u5fc3", None) - ) - self.pushButton_5.setText( - QCoreApplication.translate("MainWindow", "\u767b\u5f55", None) - ) - self.pushButton_exit.setText( - QCoreApplication.translate("MainWindow", "\u9000\u51fa", None) - ) - self.pushButton_sysseting.setText( - QCoreApplication.translate("MainWindow", "\u7cfb\u7edf\u8bbe\u7f6e", None) - ) - self.pushButton_leftmenu_produce.setText( - QCoreApplication.translate("MainWindow", "\u751f\u4ea7\u754c\u9762", None) - ) - self.pushButton_leftmenu_robot_seting.setText( - QCoreApplication.translate( - "MainWindow", "\u673a\u68b0\u81c2\u57fa\u7840\u8bbe\u7f6e", None - ) - ) - self.pushButton_leftmenu_IO.setText( - QCoreApplication.translate("MainWindow", "IO\u9762\u677f", None) - ) - self.pushButton_leftmenu_position.setText( - QCoreApplication.translate("MainWindow", "\u4f4d\u7f6e\u8bbe\u5b9a", None) - ) - self.pushButton_leftmenu_baseSeting.setText( - QCoreApplication.translate("MainWindow", "\u57fa\u7840\u8bbe\u7f6e", None) - ) - self.pushButton_leftmenu_posDebug.setText( - QCoreApplication.translate("MainWindow", "\u70b9\u4f4d\u8c03\u8bd5", None) - ) - self.pushButton_11.setText( - QCoreApplication.translate("MainWindow", "\u5176\u4ed6\u8bbe\u7f6e", None) - ) - self.pushButton_sign_go.setText("") - self.label_sign_go.setText( - QCoreApplication.translate("MainWindow", "\u53d6\u6599\u4e2d...", None) - ) - self.pushButton_sign_photo.setText("") - self.label_sign_photo.setText( - QCoreApplication.translate("MainWindow", "\u62cd\u7167\u4e2d...", None) - ) - self.pushButton_sign_take.setText("") - self.label_sign_take.setText( - QCoreApplication.translate("MainWindow", "\u6293\u6599\u4e2d...", None) - ) - self.pushButton_sign_feed.setText("") - self.label_sign_feed.setText( - QCoreApplication.translate("MainWindow", "\u6295\u6599\u4e2d...", None) - ) - self.label_showDetection.setText("") - self.label_move_sign.setText( - QCoreApplication.translate("MainWindow", "\u6b63\u5728\u79fb\u52a8", None) - ) - self.tabWidget.setTabText( - self.tabWidget.indexOf(self.tab), - QCoreApplication.translate("MainWindow", "\u65e5\u5fd7", None), - ) - self.tabWidget.setTabText( - self.tabWidget.indexOf(self.tab_2), - QCoreApplication.translate("MainWindow", "\u62a5\u8b66", None), - ) - self.label_53.setText( - QCoreApplication.translate( - "MainWindow", "\u8fde\u63a5\u72b6\u6001\uff1a", None - ) - ) - self.label_connect_status.setText("") - self.label_8.setText( - QCoreApplication.translate( - "MainWindow", "\u5f53\u524d\u6a21\u5f0f\uff1a", None - ) - ) - self.label_status_model.setText( - QCoreApplication.translate("MainWindow", "\u81ea\u52a8", None) - ) - self.label_10.setText( - QCoreApplication.translate( - "MainWindow", "\u8fdc\u7a0b\u6307\u4ee4\u6570\u91cf\uff1a", None - ) - ) - self.label_status_remoteCmdLen.setText( - QCoreApplication.translate("MainWindow", "0", None) - ) - self.label_13.setText( - QCoreApplication.translate( - "MainWindow", "\u5f53\u524d\u901f\u5ea6\uff1a", None - ) - ) - self.label_status_speed.setText( - QCoreApplication.translate("MainWindow", "0", None) - ) - self.label_11.setText( - QCoreApplication.translate( - "MainWindow", "\u5f53\u524d\u5de5\u5177\u53f7\uff1a", None - ) - ) - self.label_status_toolIndex.setText( - QCoreApplication.translate("MainWindow", "1", None) - ) - self.label_12.setText( - QCoreApplication.translate( - "MainWindow", "\u62a5\u8b66\u4ee3\u7801\uff1a", None - ) - ) - self.label_status_alarmcode.setText( - QCoreApplication.translate("MainWindow", "200", None) - ) - self.label_5.setText(QCoreApplication.translate("MainWindow", "Y1", None)) - self.label_57.setText(QCoreApplication.translate("MainWindow", "2", None)) - self.label_58.setText(QCoreApplication.translate("MainWindow", "3", None)) - self.label_59.setText(QCoreApplication.translate("MainWindow", "4", None)) - self.label_7.setText(QCoreApplication.translate("MainWindow", "5", None)) - self.label_61.setText(QCoreApplication.translate("MainWindow", "6", None)) - self.label_62.setText(QCoreApplication.translate("MainWindow", "7", None)) - self.label_60.setText(QCoreApplication.translate("MainWindow", "8", None)) - self.label_55.setText(QCoreApplication.translate("MainWindow", "9", None)) - self.label_65.setText(QCoreApplication.translate("MainWindow", "10", None)) - self.label_64.setText(QCoreApplication.translate("MainWindow", "11", None)) - self.label_63.setText(QCoreApplication.translate("MainWindow", "12", None)) - self.label_56.setText(QCoreApplication.translate("MainWindow", "13", None)) - self.label_68.setText(QCoreApplication.translate("MainWindow", "14", None)) - self.label_67.setText(QCoreApplication.translate("MainWindow", "15", None)) - self.label_66.setText(QCoreApplication.translate("MainWindow", "16", None)) - self.label_69.setText(QCoreApplication.translate("MainWindow", "17", None)) - self.label_81.setText(QCoreApplication.translate("MainWindow", "18", None)) - self.label_82.setText(QCoreApplication.translate("MainWindow", "19", None)) - self.label_78.setText(QCoreApplication.translate("MainWindow", "20", None)) - self.label_72.setText(QCoreApplication.translate("MainWindow", "21", None)) - self.label_84.setText(QCoreApplication.translate("MainWindow", "22", None)) - self.label_77.setText(QCoreApplication.translate("MainWindow", "23", None)) - self.label_71.setText(QCoreApplication.translate("MainWindow", "24", None)) - self.label_70.setText(QCoreApplication.translate("MainWindow", "25", None)) - self.label_80.setText(QCoreApplication.translate("MainWindow", "26", None)) - self.label_74.setText(QCoreApplication.translate("MainWindow", "27", None)) - self.label_73.setText(QCoreApplication.translate("MainWindow", "28", None)) - self.label_75.setText(QCoreApplication.translate("MainWindow", "29", None)) - self.label_76.setText(QCoreApplication.translate("MainWindow", "30", None)) - self.label_83.setText(QCoreApplication.translate("MainWindow", "31", None)) - self.label_79.setText(QCoreApplication.translate("MainWindow", "32", None)) - self.label_92.setText(QCoreApplication.translate("MainWindow", "V1:", None)) - self.label_88.setText(QCoreApplication.translate("MainWindow", "Z1:", None)) - self.label_93.setText(QCoreApplication.translate("MainWindow", "Y1:", None)) - self.label_95.setText(QCoreApplication.translate("MainWindow", "U1:", None)) - self.label_90.setText(QCoreApplication.translate("MainWindow", "X1:", None)) - self.label_91.setText(QCoreApplication.translate("MainWindow", "W1:", None)) - self.pushButton_get_origin.setText( - QCoreApplication.translate("MainWindow", "\u83b7\u53d6\u539f\u70b9", None) - ) - self.pushButton_set_origin.setText( - QCoreApplication.translate("MainWindow", "\u4fdd\u5b58\u539f\u70b9", None) - ) - self.pushButton_get_p2.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d2", None) - ) - self.pushButton_set_p1.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d1", None) - ) - self.label_16.setText(QCoreApplication.translate("MainWindow", "X2:", None)) - self.pushButton_set_p4.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d4", None) - ) - self.label_21.setText(QCoreApplication.translate("MainWindow", "Y3:", None)) - self.label_41.setText(QCoreApplication.translate("MainWindow", "W2:", None)) - self.label_44.setText(QCoreApplication.translate("MainWindow", "U3:", None)) - self.pushButton_get_p4.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d4", None) - ) - self.label_50.setText(QCoreApplication.translate("MainWindow", "W5:", None)) - self.label_25.setText(QCoreApplication.translate("MainWindow", "Z5:", None)) - self.label_40.setText(QCoreApplication.translate("MainWindow", "V2:", None)) - self.label_43.setText(QCoreApplication.translate("MainWindow", "W3:", None)) - self.label_37.setText(QCoreApplication.translate("MainWindow", "W1:", None)) - self.pushButton_set_p5.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d5", None) - ) - self.pushButton_set_p3.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d3", None) - ) - self.label_26.setText(QCoreApplication.translate("MainWindow", "Y5:", None)) - self.label_19.setText(QCoreApplication.translate("MainWindow", "X3:", None)) - self.label_42.setText(QCoreApplication.translate("MainWindow", "V3:", None)) - self.label_18.setText(QCoreApplication.translate("MainWindow", "Y2:", None)) - self.label_48.setText(QCoreApplication.translate("MainWindow", "V5:", None)) - self.label_38.setText(QCoreApplication.translate("MainWindow", "V1:", None)) - self.pushButton_get_p5.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d5", None) - ) - self.label_20.setText(QCoreApplication.translate("MainWindow", "Z3:", None)) - self.label_27.setText(QCoreApplication.translate("MainWindow", "X5:", None)) - self.label_22.setText(QCoreApplication.translate("MainWindow", "X4:", None)) - self.label_46.setText(QCoreApplication.translate("MainWindow", "W4:", None)) - self.label_14.setText(QCoreApplication.translate("MainWindow", "Y1:", None)) - self.label_15.setText(QCoreApplication.translate("MainWindow", "Z1:", None)) - self.label_39.setText(QCoreApplication.translate("MainWindow", "U2:", None)) - self.label_23.setText(QCoreApplication.translate("MainWindow", "Y4:", None)) - self.label_9.setText(QCoreApplication.translate("MainWindow", "X1:", None)) - self.label_49.setText(QCoreApplication.translate("MainWindow", "U5:", None)) - self.label_45.setText(QCoreApplication.translate("MainWindow", "U4:", None)) - self.pushButton_get_p3.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d3", None) - ) - self.label_47.setText(QCoreApplication.translate("MainWindow", "V4:", None)) - self.pushButton_get_p1.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d1", None) - ) - self.pushButton_set_p2.setText( - QCoreApplication.translate("MainWindow", "\u8bb0\u5f55\u70b9\u4f4d2", None) - ) - self.label_24.setText(QCoreApplication.translate("MainWindow", "Z4:", None)) - self.label_36.setText(QCoreApplication.translate("MainWindow", "U1:", None)) - self.label_17.setText(QCoreApplication.translate("MainWindow", "Z2:", None)) - self.pushButton_saveSeting.setText( - QCoreApplication.translate("MainWindow", "\u4fdd\u5b58\u8bbe\u7f6e", None) - ) - self.label_51.setText( - QCoreApplication.translate("MainWindow", "\u6293\u53d6\u70b9\u4f4d:", None) - ) - self.label_54.setText( - QCoreApplication.translate("MainWindow", "\u6447\u6643\u70b9\u4f4d:", None) - ) - self.label_85.setText( - QCoreApplication.translate( - "MainWindow", "\u6447\u6643\u5ef6\u65f6\uff1a", None - ) - ) - self.label_94.setText( - QCoreApplication.translate( - "MainWindow", "\u590d\u4f4d\u901f\u5ea6\uff1a", None - ) - ) - self.label_28.setText( - QCoreApplication.translate( - "MainWindow", "\u751f\u4ea7\u901f\u5ea6\uff1a", None - ) - ) - self.label_29.setText( - QCoreApplication.translate( - "MainWindow", "\u8c03\u8bd5\u901f\u5ea6\uff1a", None - ) - ) - self.label_87.setText( - QCoreApplication.translate( - "MainWindow", "\u6293\u53d6\u5ef6\u65f6\uff1a", None - ) - ) - self.label_52.setText( - QCoreApplication.translate( - "MainWindow", "\u629b\u888b\u70b9\u4f4d\uff1a", None - ) - ) - self.label_89.setText( - QCoreApplication.translate( - "MainWindow", "\u5e73\u6ed1\u7cfb\u6570\uff1a", None - ) - ) - self.label_86.setText( - QCoreApplication.translate( - "MainWindow", "\u629b\u888b\u5ef6\u65f6\uff1a", None - ) - ) - self.label_96.setText( - QCoreApplication.translate( - "MainWindow", "\u52a8\u6001\u9ad8\u5ea6\uff1a", None - ) - ) - self.pushButton_j3_add.setText("") - self.pushButton_j5_add.setText("") - self.pushButton_j6_sub.setText("") - self.label_34.setText(QCoreApplication.translate("MainWindow", "J5", None)) - self.pushButton_j6_add.setText("") - self.label_j5_max.setText(QCoreApplication.translate("MainWindow", "150", None)) - self.pushButton_j2_add.setText("") - self.label_j1.setText("") - self.label_j2_min.setText( - QCoreApplication.translate("MainWindow", "-150", None) - ) - self.label_j5_min.setText( - QCoreApplication.translate("MainWindow", "-150", None) - ) - self.label_30.setText(QCoreApplication.translate("MainWindow", "J1", None)) - self.label_j6_min.setText( - QCoreApplication.translate("MainWindow", "-150", None) - ) - self.label_j3_min.setText( - QCoreApplication.translate("MainWindow", "-150", None) - ) - self.label_j3_max.setText(QCoreApplication.translate("MainWindow", "150", None)) - self.pushButton_j3_sub.setText("") - self.pushButton_j4_sub.setText("") - self.pushButton_j1_add.setText("") - self.label_j4_min.setText( - QCoreApplication.translate("MainWindow", "-150", None) - ) - self.pushButton_j1_sub.setText("") - self.pushButton_sendMove.setText( - QCoreApplication.translate("MainWindow", "\u786e\u5b9a\u79fb\u52a8", None) - ) - self.label_j1_max.setText(QCoreApplication.translate("MainWindow", "+10", None)) - self.label_j3.setText("") - self.pushButton_j5_sub.setText("") - self.label_j6_max.setText(QCoreApplication.translate("MainWindow", "150", None)) - self.label_j5.setText("") - self.label_35.setText(QCoreApplication.translate("MainWindow", "J6", None)) - self.label_j2_max.setText(QCoreApplication.translate("MainWindow", "150", None)) - self.label_32.setText(QCoreApplication.translate("MainWindow", "J3", None)) - self.pushButton_j4_add.setText("") - self.label_j6.setText("") - self.label_j1_min.setText(QCoreApplication.translate("MainWindow", "-10", None)) - self.label_j4.setText("") - self.pushButton_j2_sub.setText("") - self.label_j2.setText("") - self.label_31.setText(QCoreApplication.translate("MainWindow", "J2", None)) - self.label_manual_adjust_accuracy.setText( - QCoreApplication.translate( - "MainWindow", "\u8c03\u6574\u95f4\u9694\uff1a", None - ) - ) - self.label_j4_max.setText(QCoreApplication.translate("MainWindow", "150", None)) - self.label_33.setText(QCoreApplication.translate("MainWindow", "J4", None)) - self.lineEdit_manual_adjust_accuracy.setText( - QCoreApplication.translate("MainWindow", "1", None) - ) - self.lineEdit_manual_adjust_accuracy.setPlaceholderText( - QCoreApplication.translate("MainWindow", "0.001-20", None) - ) - self.pushButton_savePosition.setText( - QCoreApplication.translate("MainWindow", "\u4fdd\u5b58", None) - ) - self.label_table_line_title.setText( - QCoreApplication.translate("MainWindow", "\u751f\u4ea7\u7ebf", None) - ) - self.label_table_line_position_title.setText( - QCoreApplication.translate("MainWindow", "TextLabel", None) - ) - self.label_3.setText("") - self.label_date.setText( - QCoreApplication.translate("MainWindow", "2024-08-01", None) - ) - self.label_time.setText( - QCoreApplication.translate("MainWindow", "08:00:00", None) - ) - self.comboBox_lineIndex.setItemText( - 0, QCoreApplication.translate("MainWindow", "1\u53f7\u7ebf", None) - ) - self.comboBox_lineIndex.setItemText( - 1, QCoreApplication.translate("MainWindow", "\u65b0\u5efa\u7ebf", None) - ) - - self.comboBox_lineIndex.setCurrentText( - QCoreApplication.translate("MainWindow", "1\u53f7\u7ebf", None) - ) - self.pushButton_num1.setText( - QCoreApplication.translate("MainWindow", "10", None) - ) - self.pushButton_num2.setText( - QCoreApplication.translate("MainWindow", "20", None) - ) - self.pushButton_num3.setText( - QCoreApplication.translate("MainWindow", "30", None) - ) - self.pushButton_num4.setText( - QCoreApplication.translate("MainWindow", "40", None) - ) - self.pushButton_num5.setText( - QCoreApplication.translate("MainWindow", "50", None) - ) - self.pushButton_num6.setText( - QCoreApplication.translate("MainWindow", "60", None) - ) - self.lineEdit_num.setPlaceholderText( - QCoreApplication.translate( - "MainWindow", "\u81ea\u5b9a\u4e49\u6570\u91cf", None - ) - ) - self.pushButton_num_confirm.setText( - QCoreApplication.translate("MainWindow", "\u786e\u5b9a", None) - ) - self.pushButton_AddNum.setText( - QCoreApplication.translate("MainWindow", "\u8865\u4e00\u888b", None) - ) - self.pushButton_SubNum.setText( - QCoreApplication.translate("MainWindow", "\u6263\u4e00\u888b", None) - ) - self.pushButton_reset.setText( - QCoreApplication.translate("MainWindow", "\u590d\u4f4d", None) - ) - self.pushButton_emergency.setText( - QCoreApplication.translate("MainWindow", "\u6025\u505c", None) - ) - self.pushButton_stopFeed.setText( - QCoreApplication.translate("MainWindow", "\u505c\u6b62", None) - ) - self.pushButton_pauseFeed.setText( - QCoreApplication.translate("MainWindow", "\u6682\u505c", None) - ) - self.pushButton_startFeed.setText( - QCoreApplication.translate("MainWindow", "\u542f\u52a8", None) - ) - self.pushButton_clearAlarm.setText( - QCoreApplication.translate("MainWindow", "\u6e05\u9664\u62a5\u8b66", None) - ) - self.pushButton_onekeyfeed.setText( - QCoreApplication.translate("MainWindow", "\u4e00\u952e\u6295\u6599", None) - ) - self.label_4.setText( - QCoreApplication.translate( - "MainWindow", "\u76ee\u6807\u888b\u6570\uff1a", None - ) - ) - self.label_maxNum.setText(QCoreApplication.translate("MainWindow", "0", None)) - # self.label_6.setText( - # QCoreApplication.translate( - # "MainWindow", "\u5269\u4f59\u888b\u6570\uff1a", None - # ) - # ) - self.label_6.setText( - QCoreApplication.translate("MainWindow", "已投袋数:", None) - ) - self.label_remain_num.setText( - QCoreApplication.translate("MainWindow", "0", None) - ) - - # retranslateUi diff --git a/ui_MainWin.py b/ui_MainWin.py index 796dab4..9d521d4 100644 --- a/ui_MainWin.py +++ b/ui_MainWin.py @@ -628,7 +628,34 @@ class Ui_MainWindow(object): "border-image: None;") self.frame_sign_2.setFrameShape(QFrame.Shape.StyledPanel) self.frame_sign_2.setFrameShadow(QFrame.Shadow.Raised) - self.gridLayout_4 = QGridLayout(self.frame_sign_2) + + + # 9/30 新增显示 投料的重量的信息 + self.verticalLayout_sign = QVBoxLayout(self.frame_sign_2) + self.verticalLayout_sign.setObjectName(u"verticalLayout_sign") + self.verticalLayout_sign.setContentsMargins(0, 0, 0, 0) # 清除边距 + self.verticalLayout_sign.setSpacing(5) # 新标签与下方网格布局的间距 + + # 1. 添加新的信息标签(放在上方) + self.weight_label_info = QLabel(self.frame_sign_2) + self.weight_label_info.setObjectName(u"label_info") + # 设置标签样式 background-color: #2c2c2c; + self.weight_label_info.setStyleSheet(u""" + QLabel { + background-color: rgba(255, 255, 255, 0); + color: red; + font: 30pt "Microsoft YaHei UI"; + border-radius: 3px; + } + """) + self.weight_label_info.setText("未选择码垛重量") # 初始信息 + # self.weight_label_info.setAlignment(Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter) + self.weight_label_info.setAlignment(Qt.AlignmentFlag.AlignCenter) # 居中 + self.verticalLayout_sign.addWidget(self.weight_label_info) + + # 9/10 + # self.gridLayout_4 = QGridLayout(self.frame_sign_2) + self.gridLayout_4 = QGridLayout() self.gridLayout_4.setObjectName(u"gridLayout_4") self.pushButton_sign_go = QPushButton(self.frame_sign_2) self.pushButton_sign_go.setObjectName(u"pushButton_sign_go") @@ -786,6 +813,8 @@ class Ui_MainWindow(object): self.gridLayout_4.addWidget(self.label_sign_feed, 0, 7, 1, 1) + # 9/10 添加 取料中、拍照中等布局 + self.verticalLayout_sign.addLayout(self.gridLayout_4) self.verticalLayout_14.addWidget(self.frame_sign_2) @@ -3307,8 +3336,50 @@ class Ui_MainWindow(object): " padding: 4px 4px 4px 4px;\n" " outline: none;\n" "}") - + self.comboBox_lineIndex.setVisible(False) self.verticalLayout_11.addWidget(self.comboBox_lineIndex) + # 9/29 新增重量选择框 和 选择投料重量提示 + weight_h_layout = QHBoxLayout() + # weight_h_layout.setSpacing(10) + # self.weight_label = QLabel(self.frame_20) + # self.weight_label.setText("选择料袋重量:") + # self.weight_label.setStyleSheet("color: white;") + # weight_h_layout.addWidget(self.weight_label) + + self.comboBox_dropWeight = QComboBox(self.frame_20) + self.comboBox_dropWeight.setObjectName(u"comboBox_dropWeight") + self.comboBox_dropWeight.setStyleSheet(u"QComboBox {\n" +" border-radius: 10px;\n" +" font-size: 30px;\n" +" margin: 0px 10px;\n" +" padding: 5px 5px 5px 5px;\n" +" background-color: #2c2c2c;\n" +" color: white;\n" +" border: 1px solid #474747;\n" +" min-width: 80px;\n" +"}\n" +"\n" +"\n" +"QComboBox::drop-down {\n" +" width: 0px;\n" +" border: none;\n" +"\n" +"}\n" +"\n" +"QComboBox::down-arrow {\n" +" image: none;\n" +"}\n" +"\n" +"QComboBox QAbstractItemView {\n" +" border-bottom-right-radius: 10px;\n" +" border-bottom-left-radius: 10px;\n" +" background-color: #D3D3D3;\n" +" border: 1px solid gray;\n" +" padding: 4px 4px 4px 4px;\n" +" outline: none;\n" +"}") + weight_h_layout.addWidget(self.comboBox_dropWeight) + self.verticalLayout_11.addLayout(weight_h_layout) self.stackedWidget_num = QStackedWidget(self.frame_20) self.stackedWidget_num.setObjectName(u"stackedWidget_num") diff --git a/ui_untitled.py b/ui_untitled.py deleted file mode 100644 index 8a479d7..0000000 --- a/ui_untitled.py +++ /dev/null @@ -1,1422 +0,0 @@ -# -*- coding: utf-8 -*- - -################################################################################ -## Form generated from reading UI file 'untitled.ui' -## -## Created by: Qt User Interface Compiler version 6.7.2 -## -## WARNING! All changes made in this file will be lost when recompiling UI file! -################################################################################ - -from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, - QMetaObject, QObject, QPoint, QRect, - QSize, QTime, QUrl, Qt) -from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, - QFont, QFontDatabase, QGradient, QIcon, - QImage, QKeySequence, QLinearGradient, QPainter, - QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QApplication, QComboBox, QFrame, QHeaderView, - QLabel, QLineEdit, QMainWindow, QPushButton, - QSizePolicy, QSlider, QStackedWidget, QTabWidget, - QTableWidget, QTableWidgetItem, QTextEdit, QWidget) -import resources_rc - -class Ui_MainWindow(object): - def setupUi(self, MainWindow): - if not MainWindow.objectName(): - MainWindow.setObjectName(u"MainWindow") - MainWindow.resize(901, 665) - MainWindow.setStyleSheet(u"background-color: rgb(12, 78, 139);") - MainWindow.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly) - self.centralwidget = QWidget(MainWindow) - self.centralwidget.setObjectName(u"centralwidget") - self.label_time = QLabel(self.centralwidget) - self.label_time.setObjectName(u"label_time") - self.label_time.setGeometry(QRect(780, 640, 91, 16)) - self.label_time.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.tabWidget = QTabWidget(self.centralwidget) - self.tabWidget.setObjectName(u"tabWidget") - self.tabWidget.setGeometry(QRect(0, 0, 901, 631)) - self.tabWidget.setStyleSheet(u"background-color:#E6ECF5;") - self.tab = QWidget() - self.tab.setObjectName(u"tab") - self.pushButton_stack_feedControl = QPushButton(self.tab) - self.pushButton_stack_feedControl.setObjectName(u"pushButton_stack_feedControl") - self.pushButton_stack_feedControl.setGeometry(QRect(0, 8, 101, 31)) - self.pushButton_stack_feedControl.setStyleSheet(u"background-color: #F9FAFC;\n" -"font: 700 9pt \"Microsoft YaHei UI\";\n" -"\n" -"border: 1px solid #dcdfe6;\n" -"") - self.pushButton_stack_feedSet = QPushButton(self.tab) - self.pushButton_stack_feedSet.setObjectName(u"pushButton_stack_feedSet") - self.pushButton_stack_feedSet.setGeometry(QRect(110, 8, 101, 31)) - self.pushButton_stack_feedSet.setStyleSheet(u"background-color: #F9FAFC;\n" -"font: 700 9pt \"Microsoft YaHei UI\";\n" -"\n" -"border: 1px solid #dcdfe6;\n" -"") - self.pushButton_8 = QPushButton(self.tab) - self.pushButton_8.setObjectName(u"pushButton_8") - self.pushButton_8.setGeometry(QRect(230, 8, 101, 31)) - self.pushButton_8.setStyleSheet(u"background-color: #F9FAFC;\n" -"font: 700 9pt \"Microsoft YaHei UI\";\n" -"\n" -"border: 1px solid #dcdfe6;\n" -"") - self.stackedWidget_feed = QStackedWidget(self.tab) - self.stackedWidget_feed.setObjectName(u"stackedWidget_feed") - self.stackedWidget_feed.setGeometry(QRect(-10, 40, 891, 561)) - self.page_6 = QWidget() - self.page_6.setObjectName(u"page_6") - self.frame_2 = QFrame(self.page_6) - self.frame_2.setObjectName(u"frame_2") - self.frame_2.setGeometry(QRect(0, -10, 877, 571)) - self.frame_2.setStyleSheet(u"background-color: #E6ECF5;\n" -"") - self.frame_2.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_2.setFrameShadow(QFrame.Shadow.Raised) - self.frame_6 = QFrame(self.frame_2) - self.frame_6.setObjectName(u"frame_6") - self.frame_6.setGeometry(QRect(10, 10, 861, 561)) - self.frame_6.setStyleSheet(u"background-color: rgb(255, 255, 255);") - self.frame_6.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_6.setFrameShadow(QFrame.Shadow.Raised) - self.label_showDetection = QLabel(self.frame_6) - self.label_showDetection.setObjectName(u"label_showDetection") - self.label_showDetection.setGeometry(QRect(10, 10, 481, 251)) - self.label_showDetection.setStyleSheet(u"\n" -"background-image: url(:/bg/Image/robot.png);\n" -"background-position:center;\n" -"background-repeat:no-repeat;") - self.label_showDetection.setScaledContents(True) - self.horizontalSlider_feedingNum = QSlider(self.frame_6) - self.horizontalSlider_feedingNum.setObjectName(u"horizontalSlider_feedingNum") - self.horizontalSlider_feedingNum.setGeometry(QRect(520, 150, 271, 41)) - self.horizontalSlider_feedingNum.setStyleSheet(u"/**QSlider\n" -"{\n" -" background-color: #FFFFFF; \n" -" border-style: outset; \n" -" border-radius:5px; \n" -"}\n" -" \n" -"QSlider::groove:horizontal\n" -"{\n" -" height: 10px;\n" -" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4);\n" -" margin: 10px 0\n" -"}\n" -" \n" -"QSlider::handle:horizontal \n" -"{\n" -" background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green);\n" -" width: 10px;\n" -" height: 16px;\n" -" margin: -5px 3px -5px 6px;\n" -" border-radius:5px; \n" -" border: 3px solid #007900;\n" -"}\n" -"**/\n" -"/*\u7b2c\u4e00\u79cd\u98ce\u683c*/\n" -"/**\n" -" groove\u8868\u793a\u69fd\u7684\u90e8\u5206\n" -" handle\u8868\u793a\u6ed1\u5757\n" -" add-page\u8868\u793a\u672a\u6ed1\u8fc7\u7684\u69fd\u90e8\u5206\n" -" sub-page\u8868\u793a\u5df2\u6ed1\u8fc7\u7684\u69fd\u90e8\u5206\n" -" \u5728\u8f85\u52a9\u63a7\u5236\u5668\u540e\u9762\u53ef\u4ee5\u8bbe\u7f6e\u72b6\u6001\uff0chorizontal\u5c31\u662fQSS\u751f\u6548\u7684QSlider\u7684\u72b6\u6001\n" -"*" - "*/\n" -"\n" -"QSlider::groove:horizontal\n" -"{\n" -" height:10px;\n" -" border-radius: 5px;\n" -" background-color:rgb(219,219,219);\n" -"}\n" -"\n" -"\n" -"QSlider::handle:horizontal \n" -"{\n" -" background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green);\n" -" width: 5px;\n" -" height: 5px;\n" -" margin: -5px 3px -5px 6px;\n" -" border-radius:5px; \n" -" border: 3px solid #007900;\n" -"}\n" -"\n" -"QSlider::add-page:horizontal\n" -"{\n" -" border-radius: 5px;\n" -" background-color: rgb(219,219,219);\n" -"}\n" -" \n" -"QSlider::sub-page:horizontal\n" -"{\n" -" border-radius: 5px;\n" -" background-color: rgb(80,166,234);\n" -"}\n" -"\n" -"\n" -"\n" -"\n" -"\n" -"") - self.horizontalSlider_feedingNum.setOrientation(Qt.Orientation.Horizontal) - self.label_maxNum = QLabel(self.frame_6) - self.label_maxNum.setObjectName(u"label_maxNum") - self.label_maxNum.setGeometry(QRect(800, 160, 31, 21)) - self.label_maxNum.setStyleSheet(u"font: 9pt \"\u6977\u4f53\";") - self.comboBox_lineIndex = QComboBox(self.frame_6) - self.comboBox_lineIndex.addItem("") - self.comboBox_lineIndex.addItem("") - self.comboBox_lineIndex.setObjectName(u"comboBox_lineIndex") - self.comboBox_lineIndex.setGeometry(QRect(520, 10, 271, 41)) - self.comboBox_lineIndex.setStyleSheet(u"QComboBox {\n" -" border-radius: 10px;\n" -" padding: 5px 5px 5px 5px;\n" -" background-color: #2c2c2c;\n" -" color: white;\n" -" border: 1px solid #474747;\n" -" min-width: 80px;\n" -"}\n" -"\n" -"\n" -"QComboBox::drop-down {\n" -" width: 0px;\n" -" border: none;\n" -"\n" -"}\n" -"\n" -"QComboBox::down-arrow {\n" -" image: none;\n" -"}\n" -"\n" -"QComboBox QAbstractItemView {\n" -" border-bottom-right-radius: 10px;\n" -" border-bottom-left-radius: 10px;\n" -" background-color: #D3D3D3;\n" -" border: 1px solid gray;\n" -" padding: 4px 4px 4px 4px;\n" -" outline: none;\n" -"}") - self.stackedWidget_num = QStackedWidget(self.frame_6) - self.stackedWidget_num.setObjectName(u"stackedWidget_num") - self.stackedWidget_num.setGeometry(QRect(510, 60, 291, 91)) - self.stackedWidget_num.setStyleSheet(u"background-color: rgb(255, 255, 255);") - self.page_9 = QWidget() - self.page_9.setObjectName(u"page_9") - self.pushButton_num5 = QPushButton(self.page_9) - self.pushButton_num5.setObjectName(u"pushButton_num5") - self.pushButton_num5.setGeometry(QRect(10, 60, 61, 31)) - self.pushButton_num5.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.pushButton_num1 = QPushButton(self.page_9) - self.pushButton_num1.setObjectName(u"pushButton_num1") - self.pushButton_num1.setGeometry(QRect(10, 20, 61, 31)) - self.pushButton_num1.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.pushButton_num6 = QPushButton(self.page_9) - self.pushButton_num6.setObjectName(u"pushButton_num6") - self.pushButton_num6.setGeometry(QRect(80, 60, 61, 31)) - self.pushButton_num6.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.pushButton_num3 = QPushButton(self.page_9) - self.pushButton_num3.setObjectName(u"pushButton_num3") - self.pushButton_num3.setGeometry(QRect(150, 20, 61, 31)) - self.pushButton_num3.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.pushButton_num4 = QPushButton(self.page_9) - self.pushButton_num4.setObjectName(u"pushButton_num4") - self.pushButton_num4.setGeometry(QRect(220, 20, 61, 31)) - self.pushButton_num4.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.pushButton_num_free = QPushButton(self.page_9) - self.pushButton_num_free.setObjectName(u"pushButton_num_free") - self.pushButton_num_free.setGeometry(QRect(150, 60, 61, 31)) - self.pushButton_num_free.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.pushButton_num2 = QPushButton(self.page_9) - self.pushButton_num2.setObjectName(u"pushButton_num2") - self.pushButton_num2.setGeometry(QRect(80, 20, 61, 31)) - self.pushButton_num2.setStyleSheet(u"\n" -"*{background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.lineEdit_num = QLineEdit(self.page_9) - self.lineEdit_num.setObjectName(u"lineEdit_num") - self.lineEdit_num.setGeometry(QRect(150, 60, 61, 31)) - self.lineEdit_num.setStyleSheet(u"background-color: #F9FAFC;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";") - self.lineEdit_num.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.stackedWidget_num.addWidget(self.page_9) - self.lineEdit_num.raise_() - self.pushButton_num_free.raise_() - self.pushButton_num5.raise_() - self.pushButton_num1.raise_() - self.pushButton_num6.raise_() - self.pushButton_num3.raise_() - self.pushButton_num4.raise_() - self.pushButton_num2.raise_() - self.page_10 = QWidget() - self.page_10.setObjectName(u"page_10") - self.pushButton_AddNum = QPushButton(self.page_10) - self.pushButton_AddNum.setObjectName(u"pushButton_AddNum") - self.pushButton_AddNum.setGeometry(QRect(30, 30, 91, 41)) - self.pushButton_AddNum.setStyleSheet(u"*{\n" -"background-color: #499C54;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListAdd)) - self.pushButton_AddNum.setIcon(icon) - self.pushButton_SubNum = QPushButton(self.page_10) - self.pushButton_SubNum.setObjectName(u"pushButton_SubNum") - self.pushButton_SubNum.setGeometry(QRect(170, 30, 91, 41)) - self.pushButton_SubNum.setStyleSheet(u"*{\n" -"background-color: rgb(255, 0, 0);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon1 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.ListRemove)) - self.pushButton_SubNum.setIcon(icon1) - self.stackedWidget_num.addWidget(self.page_10) - self.lineEdit_speed = QLineEdit(self.frame_6) - self.lineEdit_speed.setObjectName(u"lineEdit_speed") - self.lineEdit_speed.setGeometry(QRect(110, 530, 113, 21)) - self.label_2 = QLabel(self.frame_6) - self.label_2.setObjectName(u"label_2") - self.label_2.setGeometry(QRect(10, 530, 81, 16)) - self.pushButton_speed = QPushButton(self.frame_6) - self.pushButton_speed.setObjectName(u"pushButton_speed") - self.pushButton_speed.setGeometry(QRect(100, 530, 75, 23)) - self.pushButton_speed.setStyleSheet(u"\n" -"*{background-color: #A2EF4D;\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover {\n" -" background-color: lightgreen;\n" -" color: black;\n" -"}*:pressed {\n" -" background-color: red;\n" -" color: white;\n" -" }") - self.tabWidget_2 = QTabWidget(self.frame_6) - self.tabWidget_2.setObjectName(u"tabWidget_2") - self.tabWidget_2.setGeometry(QRect(10, 270, 491, 241)) - self.tab_3 = QWidget() - self.tab_3.setObjectName(u"tab_3") - self.textEdit_log_info = QTextEdit(self.tab_3) - self.textEdit_log_info.setObjectName(u"textEdit_log_info") - self.textEdit_log_info.setGeometry(QRect(0, 0, 491, 211)) - self.textEdit_log_info.setStyleSheet(u"*{\n" -" background-color: #D3D3D3;\n" -"}") - self.tabWidget_2.addTab(self.tab_3, "") - self.tab_4 = QWidget() - self.tab_4.setObjectName(u"tab_4") - self.textEdit_log_error = QTextEdit(self.tab_4) - self.textEdit_log_error.setObjectName(u"textEdit_log_error") - self.textEdit_log_error.setGeometry(QRect(0, 0, 491, 231)) - self.textEdit_log_error.setStyleSheet(u"*{\n" -" color: red;\n" -"\n" -" background-color: #D3D3D3;\n" -"}\n" -"") - self.tabWidget_2.addTab(self.tab_4, "") - self.label_move_sign = QLabel(self.frame_6) - self.label_move_sign.setObjectName(u"label_move_sign") - self.label_move_sign.setGeometry(QRect(390, 230, 91, 21)) - self.label_move_sign.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"color: red;") - self.label_move_sign.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.tabWidget_control = QTabWidget(self.frame_6) - self.tabWidget_control.setObjectName(u"tabWidget_control") - self.tabWidget_control.setGeometry(QRect(510, 190, 341, 321)) - self.tabWidget_control.setStyleSheet(u"QTabBar::tab {\n" -" background: #C0C0C0;\n" -" padding: 10px;\n" -" border-radius: 15px;\n" -"}\n" -"QTabBar::tab:selected {\n" -" background-color: #FFFFFF;\n" -" border:2px solid #008000;\n" -" border-radius: 15px 15px 0 0; /* \u5706\u89d2\u63a7\u5236 */\n" -"}") - self.tab_6 = QWidget() - self.tab_6.setObjectName(u"tab_6") - self.frame_3 = QFrame(self.tab_6) - self.frame_3.setObjectName(u"frame_3") - self.frame_3.setGeometry(QRect(0, 0, 331, 281)) - self.frame_3.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_3.setFrameShadow(QFrame.Shadow.Raised) - self.pushButton_startFeed = QPushButton(self.frame_3) - self.pushButton_startFeed.setObjectName(u"pushButton_startFeed") - self.pushButton_startFeed.setGeometry(QRect(10, 10, 91, 31)) - self.pushButton_startFeed.setStyleSheet(u"*{\n" -"background-color: #499C54;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon2 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackStart)) - self.pushButton_startFeed.setIcon(icon2) - self.pushButton_pauseFeed = QPushButton(self.frame_3) - self.pushButton_pauseFeed.setObjectName(u"pushButton_pauseFeed") - self.pushButton_pauseFeed.setGeometry(QRect(110, 10, 91, 31)) - self.pushButton_pauseFeed.setStyleSheet(u"*{\n" -"background-color: #2196F3;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon3 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.MediaPlaybackPause)) - self.pushButton_pauseFeed.setIcon(icon3) - self.pushButton_stopFeed = QPushButton(self.frame_3) - self.pushButton_stopFeed.setObjectName(u"pushButton_stopFeed") - self.pushButton_stopFeed.setGeometry(QRect(210, 10, 91, 31)) - self.pushButton_stopFeed.setStyleSheet(u"*{\n" -"background-color: #F44336;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - icon4 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemShutdown)) - self.pushButton_stopFeed.setIcon(icon4) - self.pushButton_reset = QPushButton(self.frame_3) - self.pushButton_reset.setObjectName(u"pushButton_reset") - self.pushButton_reset.setGeometry(QRect(10, 50, 91, 31)) - self.pushButton_reset.setStyleSheet(u"*{\n" -"background-color: #FFFFBF;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #FFF000;\n" -"}\n" -"") - icon5 = QIcon(QIcon.fromTheme(u"media-optical")) - self.pushButton_reset.setIcon(icon5) - self.pushButton_17 = QPushButton(self.frame_3) - self.pushButton_17.setObjectName(u"pushButton_17") - self.pushButton_17.setGeometry(QRect(110, 50, 91, 31)) - self.pushButton_17.setStyleSheet(u"*{\n" -"background-color: rgb(255, 0, 0);\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - icon6 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.WindowClose)) - self.pushButton_17.setIcon(icon6) - self.pushButton_clearAlarm = QPushButton(self.frame_3) - self.pushButton_clearAlarm.setObjectName(u"pushButton_clearAlarm") - self.pushButton_clearAlarm.setGeometry(QRect(210, 50, 91, 31)) - self.pushButton_clearAlarm.setStyleSheet(u"*{\n" -"background-color: #1CB2B1;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 10px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color:#1cb052;\n" -"}\n" -"\n" -"") - icon7 = QIcon(QIcon.fromTheme(QIcon.ThemeIcon.SystemReboot)) - self.pushButton_clearAlarm.setIcon(icon7) - self.tabWidget_control.addTab(self.tab_6, "") - self.tab_5 = QWidget() - self.tab_5.setObjectName(u"tab_5") - self.frame_7 = QFrame(self.tab_5) - self.frame_7.setObjectName(u"frame_7") - self.frame_7.setGeometry(QRect(0, 0, 331, 281)) - self.frame_7.setStyleSheet(u"background-color: rgb(85, 170, 255);") - self.frame_7.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_7.setFrameShadow(QFrame.Shadow.Raised) - self.horizontalSlider_J1 = QSlider(self.frame_7) - self.horizontalSlider_J1.setObjectName(u"horizontalSlider_J1") - self.horizontalSlider_J1.setGeometry(QRect(65, 50, 171, 22)) - self.horizontalSlider_J1.setOrientation(Qt.Orientation.Horizontal) - self.label_j1_min = QLabel(self.frame_7) - self.label_j1_min.setObjectName(u"label_j1_min") - self.label_j1_min.setGeometry(QRect(65, 30, 31, 21)) - self.label_j1_max = QLabel(self.frame_7) - self.label_j1_max.setObjectName(u"label_j1_max") - self.label_j1_max.setGeometry(QRect(215, 30, 31, 21)) - self.label_j2_min = QLabel(self.frame_7) - self.label_j2_min.setObjectName(u"label_j2_min") - self.label_j2_min.setGeometry(QRect(65, 70, 53, 21)) - self.label_j2_max = QLabel(self.frame_7) - self.label_j2_max.setObjectName(u"label_j2_max") - self.label_j2_max.setGeometry(QRect(215, 70, 21, 21)) - self.horizontalSlider_J2 = QSlider(self.frame_7) - self.horizontalSlider_J2.setObjectName(u"horizontalSlider_J2") - self.horizontalSlider_J2.setGeometry(QRect(65, 90, 171, 22)) - self.horizontalSlider_J2.setOrientation(Qt.Orientation.Horizontal) - self.label_j3_min = QLabel(self.frame_7) - self.label_j3_min.setObjectName(u"label_j3_min") - self.label_j3_min.setGeometry(QRect(65, 110, 53, 21)) - self.label_j3_max = QLabel(self.frame_7) - self.label_j3_max.setObjectName(u"label_j3_max") - self.label_j3_max.setGeometry(QRect(215, 110, 21, 21)) - self.horizontalSlider_J3 = QSlider(self.frame_7) - self.horizontalSlider_J3.setObjectName(u"horizontalSlider_J3") - self.horizontalSlider_J3.setGeometry(QRect(65, 130, 171, 22)) - self.horizontalSlider_J3.setOrientation(Qt.Orientation.Horizontal) - self.label_j5_min = QLabel(self.frame_7) - self.label_j5_min.setObjectName(u"label_j5_min") - self.label_j5_min.setGeometry(QRect(65, 190, 53, 21)) - self.horizontalSlider_J5 = QSlider(self.frame_7) - self.horizontalSlider_J5.setObjectName(u"horizontalSlider_J5") - self.horizontalSlider_J5.setGeometry(QRect(65, 210, 171, 22)) - self.horizontalSlider_J5.setOrientation(Qt.Orientation.Horizontal) - self.label_j5_max = QLabel(self.frame_7) - self.label_j5_max.setObjectName(u"label_j5_max") - self.label_j5_max.setGeometry(QRect(215, 190, 21, 21)) - self.label_j6_min = QLabel(self.frame_7) - self.label_j6_min.setObjectName(u"label_j6_min") - self.label_j6_min.setGeometry(QRect(65, 230, 53, 21)) - self.horizontalSlider_J6 = QSlider(self.frame_7) - self.horizontalSlider_J6.setObjectName(u"horizontalSlider_J6") - self.horizontalSlider_J6.setGeometry(QRect(65, 250, 171, 22)) - self.horizontalSlider_J6.setOrientation(Qt.Orientation.Horizontal) - self.label_j6_max = QLabel(self.frame_7) - self.label_j6_max.setObjectName(u"label_j6_max") - self.label_j6_max.setGeometry(QRect(215, 230, 21, 21)) - self.label_j4_min = QLabel(self.frame_7) - self.label_j4_min.setObjectName(u"label_j4_min") - self.label_j4_min.setGeometry(QRect(65, 150, 53, 21)) - self.horizontalSlider_J4 = QSlider(self.frame_7) - self.horizontalSlider_J4.setObjectName(u"horizontalSlider_J4") - self.horizontalSlider_J4.setGeometry(QRect(65, 170, 171, 22)) - self.horizontalSlider_J4.setOrientation(Qt.Orientation.Horizontal) - self.label_j4_max = QLabel(self.frame_7) - self.label_j4_max.setObjectName(u"label_j4_max") - self.label_j4_max.setGeometry(QRect(215, 150, 21, 21)) - self.label_26 = QLabel(self.frame_7) - self.label_26.setObjectName(u"label_26") - self.label_26.setGeometry(QRect(15, 50, 21, 21)) - self.label_26.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_27 = QLabel(self.frame_7) - self.label_27.setObjectName(u"label_27") - self.label_27.setGeometry(QRect(15, 90, 21, 21)) - self.label_27.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_28 = QLabel(self.frame_7) - self.label_28.setObjectName(u"label_28") - self.label_28.setGeometry(QRect(15, 130, 21, 21)) - self.label_28.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_29 = QLabel(self.frame_7) - self.label_29.setObjectName(u"label_29") - self.label_29.setGeometry(QRect(15, 170, 21, 21)) - self.label_29.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_30 = QLabel(self.frame_7) - self.label_30.setObjectName(u"label_30") - self.label_30.setGeometry(QRect(15, 210, 21, 21)) - self.label_30.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_31 = QLabel(self.frame_7) - self.label_31.setObjectName(u"label_31") - self.label_31.setGeometry(QRect(15, 250, 21, 21)) - self.label_31.setStyleSheet(u"font: 700 9pt \"Microsoft YaHei UI\";") - self.pushButton_j1_add = QPushButton(self.frame_7) - self.pushButton_j1_add.setObjectName(u"pushButton_j1_add") - self.pushButton_j1_add.setGeometry(QRect(245, 50, 31, 21)) - self.pushButton_j1_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(0, 255, 0);\n" -"}\n" -"") - self.pushButton_j1_add.setIcon(icon) - self.pushButton_j1_sub = QPushButton(self.frame_7) - self.pushButton_j1_sub.setObjectName(u"pushButton_j1_sub") - self.pushButton_j1_sub.setGeometry(QRect(30, 50, 31, 21)) - self.pushButton_j1_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j1_sub.setIcon(icon1) - self.pushButton_j2_sub = QPushButton(self.frame_7) - self.pushButton_j2_sub.setObjectName(u"pushButton_j2_sub") - self.pushButton_j2_sub.setGeometry(QRect(30, 90, 31, 21)) - self.pushButton_j2_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j2_sub.setIcon(icon1) - self.pushButton_j2_add = QPushButton(self.frame_7) - self.pushButton_j2_add.setObjectName(u"pushButton_j2_add") - self.pushButton_j2_add.setGeometry(QRect(245, 90, 31, 21)) - self.pushButton_j2_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j2_add.setIcon(icon) - self.pushButton_j3_sub = QPushButton(self.frame_7) - self.pushButton_j3_sub.setObjectName(u"pushButton_j3_sub") - self.pushButton_j3_sub.setGeometry(QRect(30, 130, 31, 21)) - self.pushButton_j3_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j3_sub.setIcon(icon1) - self.pushButton_j3_add = QPushButton(self.frame_7) - self.pushButton_j3_add.setObjectName(u"pushButton_j3_add") - self.pushButton_j3_add.setGeometry(QRect(245, 130, 31, 21)) - self.pushButton_j3_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j3_add.setIcon(icon) - self.pushButton_j4_add = QPushButton(self.frame_7) - self.pushButton_j4_add.setObjectName(u"pushButton_j4_add") - self.pushButton_j4_add.setGeometry(QRect(245, 170, 31, 21)) - self.pushButton_j4_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j4_add.setIcon(icon) - self.pushButton_j5_sub = QPushButton(self.frame_7) - self.pushButton_j5_sub.setObjectName(u"pushButton_j5_sub") - self.pushButton_j5_sub.setGeometry(QRect(30, 210, 31, 21)) - self.pushButton_j5_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j5_sub.setIcon(icon1) - self.pushButton_j6_add = QPushButton(self.frame_7) - self.pushButton_j6_add.setObjectName(u"pushButton_j6_add") - self.pushButton_j6_add.setGeometry(QRect(245, 250, 31, 21)) - self.pushButton_j6_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j6_add.setIcon(icon) - self.pushButton_j6_sub = QPushButton(self.frame_7) - self.pushButton_j6_sub.setObjectName(u"pushButton_j6_sub") - self.pushButton_j6_sub.setGeometry(QRect(30, 250, 31, 21)) - self.pushButton_j6_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j6_sub.setIcon(icon1) - self.pushButton_j4_sub = QPushButton(self.frame_7) - self.pushButton_j4_sub.setObjectName(u"pushButton_j4_sub") - self.pushButton_j4_sub.setGeometry(QRect(30, 170, 31, 21)) - self.pushButton_j4_sub.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color: rgb(255, 0, 0);\n" -"}\n" -"") - self.pushButton_j4_sub.setIcon(icon1) - self.pushButton_j5_add = QPushButton(self.frame_7) - self.pushButton_j5_add.setObjectName(u"pushButton_j5_add") - self.pushButton_j5_add.setGeometry(QRect(245, 210, 31, 21)) - self.pushButton_j5_add.setStyleSheet(u"*{\n" -"background-color: #E7EAEA;\n" -"border-radius: 10px;\n" -"font: 10pt \"\u6977\u4f53\";\n" -"}\n" -"*:hover{\n" -" background-color: rgb(85, 85, 255);\n" -"}\n" -"*:pressed{\n" -" background-color:rgb(85, 85, 255);\n" -"}\n" -"") - self.pushButton_j5_add.setIcon(icon) - self.lineEdit_j1 = QLineEdit(self.frame_7) - self.lineEdit_j1.setObjectName(u"lineEdit_j1") - self.lineEdit_j1.setGeometry(QRect(285, 50, 41, 21)) - self.lineEdit_j2 = QLineEdit(self.frame_7) - self.lineEdit_j2.setObjectName(u"lineEdit_j2") - self.lineEdit_j2.setGeometry(QRect(285, 90, 41, 21)) - self.lineEdit_j3 = QLineEdit(self.frame_7) - self.lineEdit_j3.setObjectName(u"lineEdit_j3") - self.lineEdit_j3.setGeometry(QRect(285, 130, 41, 21)) - self.lineEdit_j4 = QLineEdit(self.frame_7) - self.lineEdit_j4.setObjectName(u"lineEdit_j4") - self.lineEdit_j4.setGeometry(QRect(285, 170, 41, 21)) - self.lineEdit_j5 = QLineEdit(self.frame_7) - self.lineEdit_j5.setObjectName(u"lineEdit_j5") - self.lineEdit_j5.setGeometry(QRect(285, 210, 41, 21)) - self.lineEdit_j6 = QLineEdit(self.frame_7) - self.lineEdit_j6.setObjectName(u"lineEdit_j6") - self.lineEdit_j6.setGeometry(QRect(285, 250, 41, 21)) - self.label_j1 = QLabel(self.frame_7) - self.label_j1.setObjectName(u"label_j1") - self.label_j1.setGeometry(QRect(125, 32, 53, 15)) - self.label_j2 = QLabel(self.frame_7) - self.label_j2.setObjectName(u"label_j2") - self.label_j2.setGeometry(QRect(125, 70, 53, 15)) - self.label_j3 = QLabel(self.frame_7) - self.label_j3.setObjectName(u"label_j3") - self.label_j3.setGeometry(QRect(125, 110, 53, 15)) - self.label_j4 = QLabel(self.frame_7) - self.label_j4.setObjectName(u"label_j4") - self.label_j4.setGeometry(QRect(125, 150, 53, 15)) - self.label_j5 = QLabel(self.frame_7) - self.label_j5.setObjectName(u"label_j5") - self.label_j5.setGeometry(QRect(125, 190, 53, 15)) - self.label_j6 = QLabel(self.frame_7) - self.label_j6.setObjectName(u"label_j6") - self.label_j6.setGeometry(QRect(125, 230, 53, 15)) - self.lineEdit_manual_adjust_accuracy = QLineEdit(self.frame_7) - self.lineEdit_manual_adjust_accuracy.setObjectName(u"lineEdit_manual_adjust_accuracy") - self.lineEdit_manual_adjust_accuracy.setGeometry(QRect(110, 10, 61, 21)) - self.label_manual_adjust_accuracy = QLabel(self.frame_7) - self.label_manual_adjust_accuracy.setObjectName(u"label_manual_adjust_accuracy") - self.label_manual_adjust_accuracy.setGeometry(QRect(50, 13, 53, 15)) - self.tabWidget_control.addTab(self.tab_5, "") - self.frame_sign = QFrame(self.frame_6) - self.frame_sign.setObjectName(u"frame_sign") - self.frame_sign.setGeometry(QRect(10, 10, 121, 121)) - self.frame_sign.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);") - self.frame_sign.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_sign.setFrameShadow(QFrame.Shadow.Raised) - self.pushButton_sign_go = QPushButton(self.frame_sign) - self.pushButton_sign_go.setObjectName(u"pushButton_sign_go") - self.pushButton_sign_go.setGeometry(QRect(10, 20, 10, 10)) - self.pushButton_sign_go.setStyleSheet(u"*{\n" -"background-color: #7A7A7A;\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - self.label_sign_go = QLabel(self.frame_sign) - self.label_sign_go.setObjectName(u"label_sign_go") - self.label_sign_go.setGeometry(QRect(30, 15, 71, 20)) - self.label_sign_go.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color:#7A7A7A;") - self.label_sign_go.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - self.label_sign_photo = QLabel(self.frame_sign) - self.label_sign_photo.setObjectName(u"label_sign_photo") - self.label_sign_photo.setGeometry(QRect(30, 39, 61, 20)) - self.label_sign_photo.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color: red;") - self.label_sign_photo.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - self.pushButton_sign_photo = QPushButton(self.frame_sign) - self.pushButton_sign_photo.setObjectName(u"pushButton_sign_photo") - self.pushButton_sign_photo.setGeometry(QRect(10, 44, 10, 10)) - self.pushButton_sign_photo.setStyleSheet(u"*{\n" -"background-color: rgb(255, 0, 0);\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - self.label_sign_feed = QLabel(self.frame_sign) - self.label_sign_feed.setObjectName(u"label_sign_feed") - self.label_sign_feed.setGeometry(QRect(30, 89, 61, 20)) - self.label_sign_feed.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color: black;") - self.label_sign_feed.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - self.pushButton_sign_take = QPushButton(self.frame_sign) - self.pushButton_sign_take.setObjectName(u"pushButton_sign_take") - self.pushButton_sign_take.setGeometry(QRect(10, 70, 10, 10)) - self.pushButton_sign_take.setStyleSheet(u"*{\n" -"background-color: rgb(255, 0, 0);\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - self.label_sign_take = QLabel(self.frame_sign) - self.label_sign_take.setObjectName(u"label_sign_take") - self.label_sign_take.setGeometry(QRect(30, 65, 61, 20)) - self.label_sign_take.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n" -"font: 700 12pt \"Microsoft YaHei UI\";\n" -"color: black;") - self.label_sign_take.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) - self.pushButton_sign_feed = QPushButton(self.frame_sign) - self.pushButton_sign_feed.setObjectName(u"pushButton_sign_feed") - self.pushButton_sign_feed.setGeometry(QRect(10, 94, 10, 10)) - self.pushButton_sign_feed.setStyleSheet(u"*{\n" -"background-color: rgb(255, 0, 0);\n" -"font: 9pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 5px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #ff6e00;\n" -"}\n" -"\n" -"") - self.label_status_model = QLabel(self.frame_6) - self.label_status_model.setObjectName(u"label_status_model") - self.label_status_model.setGeometry(QRect(320, 530, 81, 21)) - self.label_status_model.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - self.label_5 = QLabel(self.frame_6) - self.label_5.setObjectName(u"label_5") - self.label_5.setGeometry(QRect(240, 530, 81, 16)) - self.label_5.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.label_status_remoteCmdLen = QLabel(self.frame_6) - self.label_status_remoteCmdLen.setObjectName(u"label_status_remoteCmdLen") - self.label_status_remoteCmdLen.setGeometry(QRect(550, 530, 81, 21)) - self.label_status_remoteCmdLen.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: #black; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - self.label_4 = QLabel(self.frame_6) - self.label_4.setObjectName(u"label_4") - self.label_4.setGeometry(QRect(430, 532, 111, 16)) - self.stackedWidget_feed.addWidget(self.page_6) - self.page_7 = QWidget() - self.page_7.setObjectName(u"page_7") - self.tableWidget_feedSeting = QTableWidget(self.page_7) - self.tableWidget_feedSeting.setObjectName(u"tableWidget_feedSeting") - self.tableWidget_feedSeting.setGeometry(QRect(10, 50, 871, 191)) - self.pushButton_tableFeedSet_addRow = QPushButton(self.page_7) - self.pushButton_tableFeedSet_addRow.setObjectName(u"pushButton_tableFeedSet_addRow") - self.pushButton_tableFeedSet_addRow.setGeometry(QRect(710, 10, 75, 31)) - self.pushButton_tableFeedSet_addRow.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - self.pushButton_tableFeedSet_deleRow = QPushButton(self.page_7) - self.pushButton_tableFeedSet_deleRow.setObjectName(u"pushButton_tableFeedSet_deleRow") - self.pushButton_tableFeedSet_deleRow.setGeometry(QRect(790, 10, 75, 31)) - self.pushButton_tableFeedSet_deleRow.setStyleSheet(u"*{\n" -"color: #ffffff;\n" -"background-color: #FF5722;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #499c8a;\n" -"}\n" -"") - self.pushButton_tableFeedSet_save = QPushButton(self.page_7) - self.pushButton_tableFeedSet_save.setObjectName(u"pushButton_tableFeedSet_save") - self.pushButton_tableFeedSet_save.setGeometry(QRect(630, 10, 75, 31)) - self.pushButton_tableFeedSet_save.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.frame_4 = QFrame(self.page_7) - self.frame_4.setObjectName(u"frame_4") - self.frame_4.setGeometry(QRect(10, 240, 871, 211)) - self.frame_4.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_4.setFrameShadow(QFrame.Shadow.Raised) - self.frame_5 = QFrame(self.frame_4) - self.frame_5.setObjectName(u"frame_5") - self.frame_5.setGeometry(QRect(0, 10, 871, 131)) - self.frame_5.setFrameShape(QFrame.Shape.StyledPanel) - self.frame_5.setFrameShadow(QFrame.Shadow.Raised) - self.label_3 = QLabel(self.frame_5) - self.label_3.setObjectName(u"label_3") - self.label_3.setGeometry(QRect(20, 20, 53, 15)) - self.label_3.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.lineEdit_x1 = QLineEdit(self.frame_5) - self.lineEdit_x1.setObjectName(u"lineEdit_x1") - self.lineEdit_x1.setGeometry(QRect(80, 20, 91, 21)) - self.lineEdit_x1.setReadOnly(True) - self.lineEdit_y1 = QLineEdit(self.frame_5) - self.lineEdit_y1.setObjectName(u"lineEdit_y1") - self.lineEdit_y1.setGeometry(QRect(290, 20, 91, 21)) - self.lineEdit_y1.setReadOnly(True) - self.label_7 = QLabel(self.frame_5) - self.label_7.setObjectName(u"label_7") - self.label_7.setGeometry(QRect(230, 20, 53, 15)) - self.label_7.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.lineEdit_z1 = QLineEdit(self.frame_5) - self.lineEdit_z1.setObjectName(u"lineEdit_z1") - self.lineEdit_z1.setGeometry(QRect(480, 20, 91, 21)) - self.lineEdit_z1.setReadOnly(True) - self.label_8 = QLabel(self.frame_5) - self.label_8.setObjectName(u"label_8") - self.label_8.setGeometry(QRect(420, 20, 53, 15)) - self.label_8.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.lineEdit_y2 = QLineEdit(self.frame_5) - self.lineEdit_y2.setObjectName(u"lineEdit_y2") - self.lineEdit_y2.setGeometry(QRect(290, 50, 91, 21)) - self.lineEdit_y2.setReadOnly(True) - self.lineEdit_x2 = QLineEdit(self.frame_5) - self.lineEdit_x2.setObjectName(u"lineEdit_x2") - self.lineEdit_x2.setGeometry(QRect(80, 50, 91, 21)) - self.lineEdit_x2.setReadOnly(True) - self.label_9 = QLabel(self.frame_5) - self.label_9.setObjectName(u"label_9") - self.label_9.setGeometry(QRect(230, 50, 53, 15)) - self.label_9.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.label_10 = QLabel(self.frame_5) - self.label_10.setObjectName(u"label_10") - self.label_10.setGeometry(QRect(420, 50, 53, 15)) - self.label_10.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.label_11 = QLabel(self.frame_5) - self.label_11.setObjectName(u"label_11") - self.label_11.setGeometry(QRect(20, 50, 53, 15)) - self.label_11.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.lineEdit_z2 = QLineEdit(self.frame_5) - self.lineEdit_z2.setObjectName(u"lineEdit_z2") - self.lineEdit_z2.setGeometry(QRect(480, 50, 91, 21)) - self.lineEdit_z2.setReadOnly(True) - self.lineEdit_z3 = QLineEdit(self.frame_5) - self.lineEdit_z3.setObjectName(u"lineEdit_z3") - self.lineEdit_z3.setGeometry(QRect(480, 80, 91, 21)) - self.lineEdit_z3.setReadOnly(True) - self.lineEdit_x3 = QLineEdit(self.frame_5) - self.lineEdit_x3.setObjectName(u"lineEdit_x3") - self.lineEdit_x3.setGeometry(QRect(80, 80, 91, 21)) - self.lineEdit_x3.setReadOnly(True) - self.label_12 = QLabel(self.frame_5) - self.label_12.setObjectName(u"label_12") - self.label_12.setGeometry(QRect(420, 80, 53, 15)) - self.label_12.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.lineEdit_y3 = QLineEdit(self.frame_5) - self.lineEdit_y3.setObjectName(u"lineEdit_y3") - self.lineEdit_y3.setGeometry(QRect(290, 80, 91, 21)) - self.lineEdit_y3.setReadOnly(True) - self.label_13 = QLabel(self.frame_5) - self.label_13.setObjectName(u"label_13") - self.label_13.setGeometry(QRect(20, 80, 53, 15)) - self.label_13.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.label_14 = QLabel(self.frame_5) - self.label_14.setObjectName(u"label_14") - self.label_14.setGeometry(QRect(230, 80, 53, 15)) - self.label_14.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter) - self.pushButton_get_p1 = QPushButton(self.frame_5) - self.pushButton_get_p1.setObjectName(u"pushButton_get_p1") - self.pushButton_get_p1.setGeometry(QRect(594, 20, 81, 23)) - self.pushButton_get_p1.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.pushButton_get_p2 = QPushButton(self.frame_5) - self.pushButton_get_p2.setObjectName(u"pushButton_get_p2") - self.pushButton_get_p2.setGeometry(QRect(594, 50, 81, 23)) - self.pushButton_get_p2.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.pushButton_get_p3 = QPushButton(self.frame_5) - self.pushButton_get_p3.setObjectName(u"pushButton_get_p3") - self.pushButton_get_p3.setGeometry(QRect(594, 80, 81, 23)) - self.pushButton_get_p3.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: rgb(16, 133, 255);\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.pushButton_set_p3 = QPushButton(self.frame_5) - self.pushButton_set_p3.setObjectName(u"pushButton_set_p3") - self.pushButton_set_p3.setGeometry(QRect(680, 80, 81, 23)) - self.pushButton_set_p3.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.pushButton_set_p1 = QPushButton(self.frame_5) - self.pushButton_set_p1.setObjectName(u"pushButton_set_p1") - self.pushButton_set_p1.setGeometry(QRect(680, 20, 81, 23)) - self.pushButton_set_p1.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.pushButton_set_p2 = QPushButton(self.frame_5) - self.pushButton_set_p2.setObjectName(u"pushButton_set_p2") - self.pushButton_set_p2.setGeometry(QRect(680, 50, 81, 23)) - self.pushButton_set_p2.setStyleSheet(u"\n" -"*{\n" -"color: #ffffff;\n" -"background-color: #1AA094;\n" -"font: 12pt \"\u6977\u4f53\";\n" -"border: 1px solid #dcdfe6;\n" -"border-radius: 6px;\n" -"}\n" -"*:pressed\n" -"{\n" -"background-color: #197971;\n" -"}\n" -"") - self.stackedWidget_feed.addWidget(self.page_7) - self.tabWidget.addTab(self.tab, "") - self.tab_2 = QWidget() - self.tab_2.setObjectName(u"tab_2") - self.pushButton_2 = QPushButton(self.tab_2) - self.pushButton_2.setObjectName(u"pushButton_2") - self.pushButton_2.setGeometry(QRect(10, 10, 75, 23)) - self.pushButton = QPushButton(self.tab_2) - self.pushButton.setObjectName(u"pushButton") - self.pushButton.setGeometry(QRect(10, 39, 75, 23)) - self.tabWidget.addTab(self.tab_2, "") - self.label_date = QLabel(self.centralwidget) - self.label_date.setObjectName(u"label_date") - self.label_date.setGeometry(QRect(690, 640, 91, 16)) - self.label_date.setStyleSheet(u"color:#fff;\n" -"font: 290 9pt \"Microsoft YaHei\";\n" -"font: 700 9pt \"Microsoft YaHei UI\";") - self.label_date.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.frame = QFrame(self.centralwidget) - self.frame.setObjectName(u"frame") - self.frame.setGeometry(QRect(300, 634, 301, 28)) - self.frame.setStyleSheet(u"background-color: #9A9A9A;") - self.frame.setFrameShape(QFrame.Shape.StyledPanel) - self.frame.setFrameShadow(QFrame.Shadow.Raised) - self.label = QLabel(self.frame) - self.label.setObjectName(u"label") - self.label.setGeometry(QRect(20, 7, 81, 16)) - self.label.setStyleSheet(u"color: #F9FFF9;\n" -"font: 700 9pt \"\u7b49\u7ebf\";") - self.label_connect_status = QLabel(self.frame) - self.label_connect_status.setObjectName(u"label_connect_status") - self.label_connect_status.setGeometry(QRect(220, 7, 16, 16)) - self.label_connect_status.setStyleSheet(u"QLabel {\n" -" background-color: #A2EF4D; /* \u8bbe\u7f6e\u80cc\u666f\u989c\u8272 */\n" -" color: #ffffff; /* \u8bbe\u7f6e\u5b57\u4f53\u989c\u8272 */\n" -" border-radius: 8px; /* \u5706\u89d2\u534a\u5f84\u8bbe\u7f6e\u4e3a QLabel \u7684\u4e00\u534a\uff0c\u5f62\u6210\u5706\u5f62 */\n" -" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n" -" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n" -"}\n" -"") - self.label_6 = QLabel(self.frame) - self.label_6.setObjectName(u"label_6") - self.label_6.setGeometry(QRect(160, 7, 51, 16)) - self.label_6.setStyleSheet(u"color: #F9FFF9;\n" -"font: 700 9pt \"\u7b49\u7ebf\";") - MainWindow.setCentralWidget(self.centralwidget) - self.tabWidget.raise_() - self.label_time.raise_() - self.label_date.raise_() - self.frame.raise_() - - self.retranslateUi(MainWindow) - - self.tabWidget.setCurrentIndex(0) - self.stackedWidget_feed.setCurrentIndex(0) - self.stackedWidget_num.setCurrentIndex(0) - self.tabWidget_2.setCurrentIndex(1) - self.tabWidget_control.setCurrentIndex(0) - - - QMetaObject.connectSlotsByName(MainWindow) - # setupUi - - def retranslateUi(self, MainWindow): - MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"\u81ea\u52a8\u5316\u5bc6\u80fa\u751f\u4ea7", None)) - self.label_time.setText(QCoreApplication.translate("MainWindow", u"08:00:00", None)) - self.pushButton_stack_feedControl.setText(QCoreApplication.translate("MainWindow", u"\u76d1\u63a7\u6295\u6599", None)) - self.pushButton_stack_feedSet.setText(QCoreApplication.translate("MainWindow", u"\u6295\u6599\u8bbe\u7f6e", None)) - self.pushButton_8.setText(QCoreApplication.translate("MainWindow", u"IO\u8c03\u8bd5", None)) - self.label_showDetection.setText("") - self.label_maxNum.setText(QCoreApplication.translate("MainWindow", u"10", None)) - self.comboBox_lineIndex.setItemText(0, QCoreApplication.translate("MainWindow", u"1\u53f7\u7ebf", None)) - self.comboBox_lineIndex.setItemText(1, QCoreApplication.translate("MainWindow", u"\u65b0\u5efa\u7ebf", None)) - - self.comboBox_lineIndex.setCurrentText(QCoreApplication.translate("MainWindow", u"1\u53f7\u7ebf", None)) - self.pushButton_num5.setText(QCoreApplication.translate("MainWindow", u"50", None)) - self.pushButton_num1.setText(QCoreApplication.translate("MainWindow", u"10", None)) - self.pushButton_num6.setText(QCoreApplication.translate("MainWindow", u"60", None)) - self.pushButton_num3.setText(QCoreApplication.translate("MainWindow", u"30", None)) - self.pushButton_num4.setText(QCoreApplication.translate("MainWindow", u"40", None)) - self.pushButton_num_free.setText(QCoreApplication.translate("MainWindow", u"\u81ea\u5b9a\u4e49", None)) - self.pushButton_num2.setText(QCoreApplication.translate("MainWindow", u"20", None)) - self.lineEdit_num.setText("") - self.lineEdit_num.setPlaceholderText(QCoreApplication.translate("MainWindow", u"0-100", None)) - self.pushButton_AddNum.setText(QCoreApplication.translate("MainWindow", u"\u8865\u4e00\u888b", None)) - self.pushButton_SubNum.setText(QCoreApplication.translate("MainWindow", u"\u6263\u4e00\u888b", None)) - self.lineEdit_speed.setText(QCoreApplication.translate("MainWindow", u"10", None)) - self.lineEdit_speed.setPlaceholderText(QCoreApplication.translate("MainWindow", u"\u8f93\u5165\u6574\u6570\uff0c\u5207\u52ff\u8d85\u901f", None)) - self.label_2.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u81ea\u52a8\u901f\u5ea6\uff1a", None)) - self.pushButton_speed.setText(QCoreApplication.translate("MainWindow", u"PushButton", None)) - self.textEdit_log_info.setHtml(QCoreApplication.translate("MainWindow", u"\n" -"\n" -"


", None)) - self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_3), QCoreApplication.translate("MainWindow", u"\u65e5\u5fd7", None)) - self.textEdit_log_error.setHtml(QCoreApplication.translate("MainWindow", u"\n" -"\n" -"


", None)) - self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_4), QCoreApplication.translate("MainWindow", u"\u62a5\u8b66", None)) - self.label_move_sign.setText(QCoreApplication.translate("MainWindow", u"\u6b63\u5728\u79fb\u52a8", None)) - self.pushButton_startFeed.setText(QCoreApplication.translate("MainWindow", u"\u542f\u52a8", None)) - self.pushButton_pauseFeed.setText(QCoreApplication.translate("MainWindow", u"\u6682\u505c", None)) - self.pushButton_stopFeed.setText(QCoreApplication.translate("MainWindow", u"\u505c\u6b62", None)) - self.pushButton_reset.setText(QCoreApplication.translate("MainWindow", u"\u590d\u4f4d", None)) - self.pushButton_17.setText(QCoreApplication.translate("MainWindow", u"\u6025\u505c", None)) - self.pushButton_clearAlarm.setText(QCoreApplication.translate("MainWindow", u"\u6e05\u9664\u62a5\u8b66", None)) - self.tabWidget_control.setTabText(self.tabWidget_control.indexOf(self.tab_6), QCoreApplication.translate("MainWindow", u"\u751f\u4ea7\u754c\u9762", None)) - self.label_j1_min.setText(QCoreApplication.translate("MainWindow", u"-10", None)) - self.label_j1_max.setText(QCoreApplication.translate("MainWindow", u"+10", None)) - self.label_j2_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j2_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_j3_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j3_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_j5_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j5_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_j6_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j6_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_j4_min.setText(QCoreApplication.translate("MainWindow", u"-150", None)) - self.label_j4_max.setText(QCoreApplication.translate("MainWindow", u"150", None)) - self.label_26.setText(QCoreApplication.translate("MainWindow", u"J1", None)) - self.label_27.setText(QCoreApplication.translate("MainWindow", u"J2", None)) - self.label_28.setText(QCoreApplication.translate("MainWindow", u"J3", None)) - self.label_29.setText(QCoreApplication.translate("MainWindow", u"J4", None)) - self.label_30.setText(QCoreApplication.translate("MainWindow", u"J5", None)) - self.label_31.setText(QCoreApplication.translate("MainWindow", u"J6", None)) - self.pushButton_j1_add.setText("") - self.pushButton_j1_sub.setText("") - self.pushButton_j2_sub.setText("") - self.pushButton_j2_add.setText("") - self.pushButton_j3_sub.setText("") - self.pushButton_j3_add.setText("") - self.pushButton_j4_add.setText("") - self.pushButton_j5_sub.setText("") - self.pushButton_j6_add.setText("") - self.pushButton_j6_sub.setText("") - self.pushButton_j4_sub.setText("") - self.pushButton_j5_add.setText("") - self.label_j1.setText("") - self.label_j2.setText("") - self.label_j3.setText("") - self.label_j4.setText("") - self.label_j5.setText("") - self.label_j6.setText("") - self.lineEdit_manual_adjust_accuracy.setText(QCoreApplication.translate("MainWindow", u"1", None)) - self.lineEdit_manual_adjust_accuracy.setPlaceholderText(QCoreApplication.translate("MainWindow", u"0.001-20", None)) - self.label_manual_adjust_accuracy.setText(QCoreApplication.translate("MainWindow", u"\u8c03\u6574\u95f4\u9694\uff1a", None)) - self.tabWidget_control.setTabText(self.tabWidget_control.indexOf(self.tab_5), QCoreApplication.translate("MainWindow", u"\u8c03\u8bd5\u754c\u9762", None)) - self.pushButton_sign_go.setText("") - self.label_sign_go.setText(QCoreApplication.translate("MainWindow", u"\u53d6\u6599\u4e2d...", None)) - self.label_sign_photo.setText(QCoreApplication.translate("MainWindow", u"\u62cd\u7167\u4e2d...", None)) - self.pushButton_sign_photo.setText("") - self.label_sign_feed.setText(QCoreApplication.translate("MainWindow", u"\u6295\u6599\u4e2d...", None)) - self.pushButton_sign_take.setText("") - self.label_sign_take.setText(QCoreApplication.translate("MainWindow", u"\u6293\u6599\u4e2d...", None)) - self.pushButton_sign_feed.setText("") - self.label_status_model.setText(QCoreApplication.translate("MainWindow", u"\u81ea\u52a8", None)) - self.label_5.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u6a21\u5f0f\uff1a", None)) - self.label_status_remoteCmdLen.setText(QCoreApplication.translate("MainWindow", u"0", None)) - self.label_4.setText(QCoreApplication.translate("MainWindow", u"\u5f53\u524d\u8fdc\u7a0b\u6307\u4ee4\u6570\u91cf\uff1a", None)) - self.pushButton_tableFeedSet_addRow.setText(QCoreApplication.translate("MainWindow", u"\u65b0\u589e\u7ebf", None)) - self.pushButton_tableFeedSet_deleRow.setText(QCoreApplication.translate("MainWindow", u"\u5220\u9664\u7ebf", None)) - self.pushButton_tableFeedSet_save.setText(QCoreApplication.translate("MainWindow", u"\u4fdd\u5b58", None)) - self.label_3.setText(QCoreApplication.translate("MainWindow", u"X1:", None)) - self.label_7.setText(QCoreApplication.translate("MainWindow", u"Y1:", None)) - self.label_8.setText(QCoreApplication.translate("MainWindow", u"Z1:", None)) - self.label_9.setText(QCoreApplication.translate("MainWindow", u"Y2:", None)) - self.label_10.setText(QCoreApplication.translate("MainWindow", u"Z2:", None)) - self.label_11.setText(QCoreApplication.translate("MainWindow", u"X2:", None)) - self.label_12.setText(QCoreApplication.translate("MainWindow", u"Z3:", None)) - self.label_13.setText(QCoreApplication.translate("MainWindow", u"X3:", None)) - self.label_14.setText(QCoreApplication.translate("MainWindow", u"Y3:", None)) - self.pushButton_get_p1.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d1", None)) - self.pushButton_get_p2.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d2", None)) - self.pushButton_get_p3.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d3", None)) - self.pushButton_set_p3.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d3", None)) - self.pushButton_set_p1.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d1", None)) - self.pushButton_set_p2.setText(QCoreApplication.translate("MainWindow", u"\u8bb0\u5f55\u70b9\u4f4d2", None)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QCoreApplication.translate("MainWindow", u"\u6295\u6599", None)) - self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"PushButton", None)) - self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None)) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("MainWindow", u"Tab 2", None)) - self.label_date.setText(QCoreApplication.translate("MainWindow", u"2024-08-01", None)) - self.label.setText(QCoreApplication.translate("MainWindow", u"\u8bbe\u5907\u72b6\u6001\u76d1\u63a7", None)) - self.label_connect_status.setText("") - self.label_6.setText(QCoreApplication.translate("MainWindow", u"\u901a\u4fe1\u72b6\u6001", None)) - # retranslateUi - diff --git a/untitled.ui b/untitled.ui deleted file mode 100644 index 7b6f7ed..0000000 --- a/untitled.ui +++ /dev/null @@ -1,2918 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 901 - 665 - - - - 自动化密胺生产 - - - background-color: rgb(12, 78, 139); - - - Qt::ToolButtonStyle::ToolButtonIconOnly - - - - - - 780 - 640 - 91 - 16 - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 08:00:00 - - - - - - 0 - 0 - 901 - 631 - - - - background-color:#E6ECF5; - - - 0 - - - - 投料 - - - - - 0 - 8 - 101 - 31 - - - - background-color: #F9FAFC; -font: 700 9pt "Microsoft YaHei UI"; - -border: 1px solid #dcdfe6; - - - - 监控投料 - - - - - - 110 - 8 - 101 - 31 - - - - background-color: #F9FAFC; -font: 700 9pt "Microsoft YaHei UI"; - -border: 1px solid #dcdfe6; - - - - 投料设置 - - - - - - 230 - 8 - 101 - 31 - - - - background-color: #F9FAFC; -font: 700 9pt "Microsoft YaHei UI"; - -border: 1px solid #dcdfe6; - - - - IO调试 - - - - - - -10 - 40 - 891 - 561 - - - - 0 - - - - - - 0 - -10 - 877 - 571 - - - - background-color: #E6ECF5; - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 10 - 10 - 861 - 561 - - - - background-color: rgb(255, 255, 255); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 10 - 10 - 481 - 251 - - - - -background-image: url(:/bg/Image/robot.png); -background-position:center; -background-repeat:no-repeat; - - - - - - true - - - - - - 520 - 150 - 271 - 41 - - - - /**QSlider -{ - background-color: #FFFFFF; - border-style: outset; - border-radius:5px; -} - -QSlider::groove:horizontal -{ - height: 10px; - background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #B1B1B1, stop:1 #c4c4c4); - margin: 10px 0 -} - -QSlider::handle:horizontal -{ - background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green); - width: 10px; - height: 16px; - margin: -5px 3px -5px 6px; - border-radius:5px; - border: 3px solid #007900; -} -**/ -/*第一种风格*/ -/** - groove表示槽的部分 - handle表示滑块 - add-page表示未滑过的槽部分 - sub-page表示已滑过的槽部分 - 在辅助控制器后面可以设置状态,horizontal就是QSS生效的QSlider的状态 -**/ - -QSlider::groove:horizontal -{ - height:10px; - border-radius: 5px; - background-color:rgb(219,219,219); -} - - -QSlider::handle:horizontal -{ - background: QRadialGradient(cx:0, cy:0, radius: 1, fx:0.5, fy:0.5,stop:0 green, stop:1 green); - width: 5px; - height: 5px; - margin: -5px 3px -5px 6px; - border-radius:5px; - border: 3px solid #007900; -} - -QSlider::add-page:horizontal -{ - border-radius: 5px; - background-color: rgb(219,219,219); -} - -QSlider::sub-page:horizontal -{ - border-radius: 5px; - background-color: rgb(80,166,234); -} - - - - - - - - - Qt::Orientation::Horizontal - - - - - - 800 - 160 - 31 - 21 - - - - font: 9pt "楷体"; - - - 10 - - - - - - 520 - 10 - 271 - 41 - - - - QComboBox { - border-radius: 10px; - padding: 5px 5px 5px 5px; - background-color: #2c2c2c; - color: white; - border: 1px solid #474747; - min-width: 80px; -} - - -QComboBox::drop-down { - width: 0px; - border: none; - -} - -QComboBox::down-arrow { - image: none; -} - -QComboBox QAbstractItemView { - border-bottom-right-radius: 10px; - border-bottom-left-radius: 10px; - background-color: #D3D3D3; - border: 1px solid gray; - padding: 4px 4px 4px 4px; - outline: none; -} - - - 1号线 - - - - 1号线 - - - - - 新建线 - - - - - - - 510 - 60 - 291 - 91 - - - - background-color: rgb(255, 255, 255); - - - 0 - - - - - - 10 - 60 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 50 - - - - - - 10 - 20 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 10 - - - - - - 80 - 60 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 60 - - - - - - 150 - 20 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 30 - - - - - - 220 - 20 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 40 - - - - - - 220 - 60 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 自定义 - - - - - - 80 - 20 - 61 - 31 - - - - -*{background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - 20 - - - - - - 150 - 60 - 61 - 31 - - - - background-color: #F9FAFC; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; - - - - - - Qt::AlignmentFlag::AlignCenter - - - 0-100 - - - lineEdit_num - pushButton_num_free - pushButton_num5 - pushButton_num1 - pushButton_4 - pushButton_num3 - pushButton_num4 - pushButton_num2 - - - - - - 30 - 30 - 91 - 41 - - - - *{ -background-color: #499C54; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 补一袋 - - - - - - - - - 170 - 30 - 91 - 41 - - - - *{ -background-color: rgb(255, 0, 0); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 扣一袋 - - - - - - - - - - - 110 - 530 - 113 - 21 - - - - 10 - - - 输入整数,切勿超速 - - - - - - 10 - 530 - 81 - 16 - - - - 当前自动速度: - - - - - - 100 - 530 - 75 - 23 - - - - -*{background-color: #A2EF4D; -border: 1px solid #dcdfe6; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover { - background-color: lightgreen; - color: black; -}*:pressed { - background-color: red; - color: white; - } - - - PushButton - - - - - - 10 - 270 - 491 - 241 - - - - 1 - - - - 日志 - - - - - 0 - 0 - 491 - 211 - - - - *{ - background-color: #D3D3D3; -} - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - 报警 - - - - - 0 - 0 - 491 - 231 - - - - *{ - color: red; - - background-color: #D3D3D3; -} - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><style type="text/css"> -p, li { white-space: pre-wrap; } -hr { height: 1px; border-width: 0; } -li.unchecked::marker { content: "\2610"; } -li.checked::marker { content: "\2612"; } -</style></head><body style=" font-family:'Microsoft YaHei UI'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - - - 390 - 230 - 91 - 21 - - - - background-color: rgba(255, 255, 255, 0); -color: red; - - - 正在移动 - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 510 - 190 - 341 - 321 - - - - QTabBar::tab { - background: #C0C0C0; - padding: 10px; - border-radius: 15px; -} -QTabBar::tab:selected { - background-color: #FFFFFF; - border:2px solid #008000; - border-radius: 15px 15px 0 0; /* 圆角控制 */ -} - - - 0 - - - - 生产界面 - - - - - 0 - 0 - 331 - 281 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 10 - 10 - 91 - 31 - - - - *{ -background-color: #499C54; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 启动 - - - - - - - - - 110 - 10 - 91 - 31 - - - - *{ -background-color: #2196F3; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 暂停 - - - - - - - - - 210 - 10 - 91 - 31 - - - - *{ -background-color: #F44336; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 停止 - - - - - - - - - 10 - 50 - 91 - 31 - - - - *{ -background-color: #FFFFBF; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #FFF000; -} - - - - 复位 - - - - - - - - - 110 - 50 - 91 - 31 - - - - *{ -background-color: rgb(255, 0, 0); -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color: #ff6e00; -} - - - - - 急停 - - - - - - - - - 210 - 50 - 91 - 31 - - - - *{ -background-color: #1CB2B1; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} -*:pressed -{ -background-color:#1cb052; -} - - - - - 清除报警 - - - - - - - - - 84 - 120 - 101 - 51 - - - - * { - background: qradialgradient(cx: 0.5, cy: 0.1 -, radius: 0.8, fx:0.5 ,fy:0, - stop: 0 rgba(255,255,255, 255), - stop: 1 rgba(33, 150, 243, 255)); -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 10px; -} - - - - PushButton - - - - - - - 调试界面 - - - - - 0 - 0 - 331 - 281 - - - - background-color: rgb(85, 170, 255); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 65 - 50 - 171 - 22 - - - - Qt::Orientation::Horizontal - - - - - - 65 - 30 - 31 - 21 - - - - -10 - - - - - - 215 - 30 - 31 - 21 - - - - +10 - - - - - - 65 - 70 - 53 - 21 - - - - -150 - - - - - - 215 - 70 - 21 - 21 - - - - 150 - - - - - - 65 - 90 - 171 - 22 - - - - Qt::Orientation::Horizontal - - - - - - 65 - 110 - 53 - 21 - - - - -150 - - - - - - 215 - 110 - 21 - 21 - - - - 150 - - - - - - 65 - 130 - 171 - 22 - - - - Qt::Orientation::Horizontal - - - - - - 65 - 190 - 53 - 21 - - - - -150 - - - - - - 65 - 210 - 171 - 22 - - - - Qt::Orientation::Horizontal - - - - - - 215 - 190 - 21 - 21 - - - - 150 - - - - - - 65 - 230 - 53 - 21 - - - - -150 - - - - - - 65 - 250 - 171 - 22 - - - - Qt::Orientation::Horizontal - - - - - - 215 - 230 - 21 - 21 - - - - 150 - - - - - - 65 - 150 - 53 - 21 - - - - -150 - - - - - - 65 - 170 - 171 - 22 - - - - Qt::Orientation::Horizontal - - - - - - 215 - 150 - 21 - 21 - - - - 150 - - - - - - 15 - 50 - 21 - 21 - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J1 - - - - - - 15 - 90 - 21 - 21 - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J2 - - - - - - 15 - 130 - 21 - 21 - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J3 - - - - - - 15 - 170 - 21 - 21 - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J4 - - - - - - 15 - 210 - 21 - 21 - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J5 - - - - - - 15 - 250 - 21 - 21 - - - - font: 700 9pt "Microsoft YaHei UI"; - - - J6 - - - - - - 245 - 50 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(0, 255, 0); -} - - - - - - - - - - - - - 30 - 50 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - 30 - 90 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - 245 - 90 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - 30 - 130 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - 245 - 130 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - 245 - 170 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - 30 - 210 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - 245 - 250 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - 30 - 250 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - 30 - 170 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color: rgb(255, 0, 0); -} - - - - - - - - - - - - - 245 - 210 - 31 - 21 - - - - *{ -background-color: #E7EAEA; -border-radius: 10px; -font: 10pt "楷体"; -} -*:hover{ - background-color: rgb(85, 85, 255); -} -*:pressed{ - background-color:rgb(85, 85, 255); -} - - - - - - - - - - - - - 285 - 50 - 41 - 21 - - - - - - - 285 - 90 - 41 - 21 - - - - - - - 285 - 130 - 41 - 21 - - - - - - - 285 - 170 - 41 - 21 - - - - - - - 285 - 210 - 41 - 21 - - - - - - - 285 - 250 - 41 - 21 - - - - - - - 125 - 32 - 53 - 15 - - - - - - - - - - 125 - 70 - 53 - 15 - - - - - - - - - - 125 - 110 - 53 - 15 - - - - - - - - - - 125 - 150 - 53 - 15 - - - - - - - - - - 125 - 190 - 53 - 15 - - - - - - - - - - 125 - 230 - 53 - 15 - - - - - - - - - - 110 - 10 - 61 - 21 - - - - 1 - - - 0.001-20 - - - - - - 50 - 13 - 53 - 15 - - - - 调整间隔: - - - - - - - - - 10 - 10 - 121 - 121 - - - - background-color: rgba(255, 255, 255, 0); - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 10 - 20 - 10 - 10 - - - - *{ -background-color: #7A7A7A; -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:pressed -{ -background-color: #ff6e00; -} - - - - - - - - - - - 30 - 15 - 71 - 20 - - - - background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color:#7A7A7A; - - - 取料中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - 30 - 39 - 61 - 20 - - - - background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color: red; - - - 拍照中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - 10 - 44 - 10 - 10 - - - - *{ -background-color: rgb(255, 0, 0); -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:pressed -{ -background-color: #ff6e00; -} - - - - - - - - - - - 30 - 89 - 61 - 20 - - - - background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color: black; - - - 投料中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - 10 - 70 - 10 - 10 - - - - *{ -background-color: rgb(255, 0, 0); -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:pressed -{ -background-color: #ff6e00; -} - - - - - - - - - - - 30 - 65 - 61 - 20 - - - - background-color: rgba(255, 255, 255, 0); -font: 700 12pt "Microsoft YaHei UI"; -color: black; - - - 抓料中... - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - - 10 - 94 - 10 - 10 - - - - *{ -background-color: rgb(255, 0, 0); -font: 9pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 5px; -} -*:pressed -{ -background-color: #ff6e00; -} - - - - - - - - - - - - 320 - 530 - 81 - 21 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 自动 - - - - - - 240 - 530 - 81 - 16 - - - - 当前模式: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 550 - 530 - 81 - 21 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: #black; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - 0 - - - - - - 430 - 532 - 111 - 16 - - - - 当前远程指令数量: - - - - - - - - - - 10 - 50 - 871 - 191 - - - - - - - 710 - 10 - 75 - 31 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 新增线 - - - - - - 790 - 10 - 75 - 31 - - - - *{ -color: #ffffff; -background-color: #FF5722; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #499c8a; -} - - - - 删除线 - - - - - - 630 - 10 - 75 - 31 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 保存 - - - - - - 10 - 240 - 871 - 211 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 0 - 10 - 871 - 131 - - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 20 - 20 - 53 - 15 - - - - X1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 80 - 20 - 91 - 21 - - - - true - - - - - - 290 - 20 - 91 - 21 - - - - true - - - - - - 230 - 20 - 53 - 15 - - - - Y1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 480 - 20 - 91 - 21 - - - - true - - - - - - 420 - 20 - 53 - 15 - - - - Z1: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 290 - 50 - 91 - 21 - - - - true - - - - - - 80 - 50 - 91 - 21 - - - - true - - - - - - 230 - 50 - 53 - 15 - - - - Y2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 420 - 50 - 53 - 15 - - - - Z2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 20 - 50 - 53 - 15 - - - - X2: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 480 - 50 - 91 - 21 - - - - true - - - - - - 480 - 80 - 91 - 21 - - - - true - - - - - - 80 - 80 - 91 - 21 - - - - true - - - - - - 420 - 80 - 53 - 15 - - - - Z3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 290 - 80 - 91 - 21 - - - - true - - - - - - 20 - 80 - 53 - 15 - - - - X3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 230 - 80 - 53 - 15 - - - - Y3: - - - Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter - - - - - - 594 - 20 - 81 - 23 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位1 - - - - - - 594 - 50 - 81 - 23 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位2 - - - - - - 594 - 80 - 81 - 23 - - - - -*{ -color: #ffffff; -background-color: rgb(16, 133, 255); -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位3 - - - - - - 680 - 80 - 81 - 23 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位3 - - - - - - 680 - 20 - 81 - 23 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位1 - - - - - - 680 - 50 - 81 - 23 - - - - -*{ -color: #ffffff; -background-color: #1AA094; -font: 12pt "楷体"; -border: 1px solid #dcdfe6; -border-radius: 6px; -} -*:pressed -{ -background-color: #197971; -} - - - - 记录点位2 - - - - - - - - - - Tab 2 - - - - - 10 - 10 - 75 - 23 - - - - PushButton - - - - - - 10 - 39 - 75 - 23 - - - - PushButton - - - - - - - - 690 - 640 - 91 - 16 - - - - color:#fff; -font: 290 9pt "Microsoft YaHei"; -font: 700 9pt "Microsoft YaHei UI"; - - - 2024-08-01 - - - Qt::AlignmentFlag::AlignCenter - - - - - - 300 - 634 - 301 - 28 - - - - background-color: #9A9A9A; - - - QFrame::Shape::StyledPanel - - - QFrame::Shadow::Raised - - - - - 20 - 7 - 81 - 16 - - - - color: #F9FFF9; -font: 700 9pt "等线"; - - - 设备状态监控 - - - - - - 220 - 7 - 16 - 16 - - - - QLabel { - background-color: #A2EF4D; /* 设置背景颜色 */ - color: #ffffff; /* 设置字体颜色 */ - border-radius: 8px; /* 圆角半径设置为 QLabel 的一半,形成圆形 */ - border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */ - qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */ -} - - - - - - - - - - 160 - 7 - 51 - 16 - - - - color: #F9FFF9; -font: 700 9pt "等线"; - - - 通信状态 - - - - tabWidget - label_time - label_date - frame - - - - - - - diff --git a/workflow_test.py b/workflow_test.py deleted file mode 100644 index 33403f2..0000000 --- a/workflow_test.py +++ /dev/null @@ -1,353 +0,0 @@ -import time -import threading -from enum import IntEnum - -# --- 1. 简化模拟必要的 Enum 和类 --- - -class FeedStatus(IntEnum): - FNone = 0 - FStart = 1 - FCheck = 2 - FMid = 3 - FPhoto = 4 - FTake = 5 - FDropBag = 9 # 简化,只保留关键状态 - -class CatchStatus: - CNone = 0 - CTake = 1 - COk = 2 - CDrop = 3 - -class Real_Position: - """简化的位置表示""" - def __init__(self, name=""): - self.name = name - - def compare(self, other, is_action=False): - # 简化比较,只比较名字 - return self.name == other.name - - def __str__(self): - return self.name - -class PositionModel: - """简化的位置模型""" - def __init__(self, status, position): - self.status = status - self.position = position - - def get_position(self): - return self.position - -class FeedLine: - """简化 FeedLine,只包含关键点""" - def __init__(self, name, positions: list): # positions: list of PositionModel - self.name = name - # 假设 positions 按顺序排列,且包含 FTake 和 FDropBag 点 - self.positions = positions - self.take_position_model = None - self.drop_position_model = None - self._find_key_positions() - - def _find_key_positions(self): - for pm in self.positions: - if pm.status == FeedStatus.FTake: - self.take_position_model = pm - elif pm.status == FeedStatus.FDropBag: - self.drop_position_model = pm - - def get_take_position(self): - return self.take_position_model - -# --- 2. 简化模拟 Catch 模块 --- -class SimulatedCatch: - def __init__(self, log_func): - self.catch_status = CatchStatus.CNone - self.log_signal = log_func # 用于打印日志的函数 - - def run(self): - """模拟抓取动作""" - if self.catch_status == CatchStatus.CTake: - self.log_signal(logging.INFO, "🤖 Sim Catch: 开始执行抓取动作...") - time.sleep(1) # 模拟抓取耗时 - self.catch_status = CatchStatus.COk - self.log_signal(logging.INFO, "🎉 Sim Catch: 抓取完成!") - elif self.catch_status == CatchStatus.CDrop: - self.log_signal(logging.INFO, "📦 Sim Catch: 开始执行投料动作...") - time.sleep(0.5) # 模拟投料耗时 - self.catch_status = CatchStatus.COk - self.log_signal(logging.INFO, "🎊 Sim Catch: 投料完成!") - -# --- 3. 简化 FeedingConfig --- -class FeedingConfig: - def __init__(self, num: int, feedLine: FeedLine, drop_positions: list): - self.num = num - self.feedLine = feedLine - self.drop_positions = drop_positions # list of Real_Position - -# --- 4. 简化 RobotClient 状态 --- -class SimulatedRobotClient: - def __init__(self, initial_position_name): - self.status_model = type('obj', (object,), {'world_0': 0, 'world_1': 0, 'world_2': 0, 'world_3': 0, 'world_4': 0, 'world_5': 0})() - self.origin_position = Real_Position("Origin") - self.feed_speed = 10 - # 当前模拟位置 - self.current_position = Real_Position(initial_position_name) - - def getRealPosition(self): - return self.current_position - -# --- 5. 模拟传感器 --- -class SimulatedSensor: - def __init__(self, name, initial_state=False): - self.name = name - self.state = initial_state - self.thread = None - self._running = False - - def start_simulation(self, sequence): - """根据一个序列 (时间, 状态) 来模拟传感器状态变化""" - self._running = True - def _run(): - start_time = time.time() - seq_index = 0 - while self._running and seq_index < len(sequence): - elapsed = time.time() - start_time - if elapsed >= sequence[seq_index][0]: # sequence[seq_index][0] 是触发时间 - self.state = sequence[seq_index][1] # sequence[seq_index][1] 是触发状态 - print(f" 📡 [{self.name}] 模拟状态变为: {self.state}") - seq_index += 1 - time.sleep(0.1) # 检查间隔 - self.thread = threading.Thread(target=_run, daemon=True) - self.thread.start() - - def stop_simulation(self): - self._running = False - if self.thread: - self.thread.join() - -# --- 6. 简化版 Feeding 类 (核心逻辑) --- -import logging - -class SimulatedFeeding: - def __init__(self, robotClient: SimulatedRobotClient, sensor2: SimulatedSensor): - self.feedConfig = None - self.feedStatus = FeedStatus.FNone - self.robotClient = robotClient - self.sensor2 = sensor2 # 使用模拟传感器 - self.pause = False - self.is_reverse = False - self.catch = SimulatedCatch(self._simple_log) # 使用模拟 Catch - # --- 码垛模式新增 --- - self.current_drop_index = 0 - - # 简化的日志信号 - # self.log_signal = self._simple_log - self.log_signal = lambda level, message: self._simple_log(level, message) - - - def _simple_log(self, level, message): - level_str = {logging.INFO: "INFO", logging.ERROR: "ERROR", logging.WARNING: "WARN"}.get(level, "LOG") - print(f"[{level_str}] {message}") - - def set_config(self, config: FeedingConfig): - self.feedConfig = config - - def start(self): - if self.feedConfig: - self.feedStatus = FeedStatus.FStart - self.log_signal(logging.INFO, "🚀 启动仿真投料流程") - # self.log_signal(logging.INFO, "🚀 启动仿真投料流程") - - def run(self): - """仿真运行一次主循环""" - if self.feedConfig is None or self.feedStatus == FeedStatus.FNone or self.pause: - return - - # 获取当前模拟位置 - real_position = self.robotClient.current_position - - # --- 简化版 FStart --- - if self.feedStatus == FeedStatus.FStart: - # self.log_signal(logging.INFO, "🟢 FStart: 初始化流程") - self.log_signal(logging.INFO, "🟢 FStart: 初始化流程") - self.current_drop_index = 0 # 重置投料点索引 - # 模拟移动到抓取点 (直接设置位置) - take_pos_model = self.feedConfig.feedLine.get_take_position() - if take_pos_model: - self.robotClient.current_position = take_pos_model.get_position() - self.log_signal(logging.INFO, f"🚚 FStart: 移动到抓取点 {self.robotClient.current_position}") - # self.log_signal(logging.INFO, f"🚚 FStart: 移动到抓取点 {self.robotClient.current_position}") - self.feedStatus = FeedStatus.FTake - else: - # self.log_signal(logging.ERROR, "❌ FStart: 未找到抓取点!") - self.log_signal(logging.ERROR, "❌ FStart: 未找到抓取点!") - self.feedStatus = FeedStatus.FNone - return # 等待下次循环 - - # --- 简化版 FTake --- - elif self.feedStatus == FeedStatus.FTake: - # self.log_signal(logging.INFO, "✋ FTake: 检查是否到达抓取点并等待传感器信号") - self.log_signal(logging.INFO, "✋ FTake: 检查是否到达抓取点并等待传感器信号") - take_position_model = self.feedConfig.feedLine.get_take_position() - if not take_position_model or not take_position_model.get_position(): - self.log_signal(logging.ERROR, "❌ FTake: 抓取点配置错误!") - # self.log_signal(logging.ERROR, "❌ FTake: 抓取点配置错误!") - self.feedStatus = FeedStatus.FNone - return - - if not take_position_model.get_position().compare(real_position): - self.log_signal(logging.WARNING, f"⚠️ FTake: 机器人未在抓取点 ({take_position_model.get_position()}), 当前在 {real_position}") - # self.log_signal(logging.WARNING, f"⚠️ FTake: 机器人未在抓取点 ({take_position_model.get_position()}), 当前在 {real_position}") - # 在仿真中,我们假设它会移动到位,所以直接设置 - self.robotClient.current_position = take_position_model.get_position() - self.log_signal(logging.INFO, f"🔧 强制移动到抓取点 {self.robotClient.current_position}") - # self.log_signal(logging.INFO, f"🔧 强制移动到抓取点 {self.robotClient.current_position}") - - # 模拟等待传感器2信号 - # 在实际仿真中,我们可以通过预设序列或用户输入来控制 - # 这里用一个简单的循环等待 (实际应用中应避免阻塞) - wait_start = time.time() - timeout = 10 # 10秒超时 - while not self.sensor2.state: - if time.time() - wait_start > timeout: - # self.log_signal(logging.ERROR, "⏰ FTake: 等待传感器2超时!") - self.log_signal(logging.ERROR, "⏰ FTake: 等待传感器2超时!") - self.feedStatus = FeedStatus.FNone - return - self.log_signal(logging.INFO, "⏳ FTake: 等待传感器2信号...") - time.sleep(1) # 每秒检查一次 - - self.log_signal(logging.INFO, "✅ FTake: 传感器2信号收到,开始抓取") - # 执行抓取动作 - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CTake - return # 等待下一周期 Catch 完成 - if self.catch.catch_status == CatchStatus.CTake: - return # 等待 Catch 模块处理 - if self.catch.catch_status == CatchStatus.COk: - self.catch.catch_status = CatchStatus.CNone - self.log_signal(logging.INFO, "👏 FTake: 抓取成功,准备投料") - # 移动到第一个投料点 - if self.feedConfig.drop_positions: - target_drop_pos = self.feedConfig.drop_positions[self.current_drop_index] - self.robotClient.current_position = target_drop_pos - self.log_signal(logging.INFO, f"🚚 FTake: 移动到投料点 {self.current_drop_index} ({target_drop_pos})") - self.feedStatus = FeedStatus.FDropBag - else: - self.log_signal(logging.ERROR, "❌ FTake: 投料点列表为空!") - self.feedStatus = FeedStatus.FNone - return - - # --- 简化版 FDropBag (码垛核心) --- - elif self.feedStatus == FeedStatus.FDropBag: - if not self.feedConfig.drop_positions: - self.log_signal(logging.ERROR, "❌ FDropBag: 投料点列表为空!") - self.feedStatus = FeedStatus.FNone - return - - target_drop_position = self.feedConfig.drop_positions[self.current_drop_index] - self.log_signal(logging.INFO, f"📦 FDropBag: 当前目标投料点索引: {self.current_drop_index} ({target_drop_position})") - - # 检查是否到达目标投料点 (仿真中直接比较) - if target_drop_position.compare(real_position): - self.log_signal(logging.INFO, f"🎯 FDropBag: 到达投料点 {self.current_drop_index}") - - # 执行投料动作 - if self.catch.catch_status == CatchStatus.CNone: - self.catch.catch_status = CatchStatus.CDrop - self.log_signal(logging.INFO, "🪂 FDropBag: 开始执行投料动作...") - return # 等待下一周期检查 COk - if self.catch.catch_status == CatchStatus.CDrop: - self.log_signal(logging.INFO, "🪂 FDropBag: 投料动作进行中...") - return # 等待 Catch 模块完成 - if self.catch.catch_status == CatchStatus.COk: - self.catch.catch_status = CatchStatus.CNone - self.log_signal(logging.INFO, f"🎉 FDropBag: 在投料点 {self.current_drop_index} 投料完成") - - # 更新投料计数 - self.feedConfig.num -= 1 - self.log_signal(logging.INFO, f'🔢 剩余投料次数: {self.feedConfig.num}') - - # 检查是否所有投料任务完成 - if self.feedConfig.num > 0: - # 更新投料点索引 (循环) - self.current_drop_index = (self.current_drop_index + 1) % len(self.feedConfig.drop_positions) - self.log_signal(logging.INFO, f"🔄 更新投料点索引为: {self.current_drop_index}") - - # 移动到固定的抓取点 (仿真中直接设置位置) - take_position_model = self.feedConfig.feedLine.get_take_position() - if take_position_model: - self.log_signal(logging.INFO, f"🔄 移动到固定抓取点...") - self.robotClient.current_position = take_position_model.get_position() - self.log_signal(logging.INFO, f"📍 已移动到抓取点 {self.robotClient.current_position}") - self.feedStatus = FeedStatus.FTake # 设置状态为 FTake - else: - self.log_signal(logging.ERROR, "❌ 无法获取抓取点位置!") - self.feedStatus = FeedStatus.FNone - - else: - # 所有投料完成 - self.log_signal(logging.INFO, "🎊 所有投料任务完成") - self.feedStatus = FeedStatus.FNone # 结束流程 - - else: - # 如果还没到达目标投料点 (仿真中直接移动) - self.log_signal(logging.INFO, f"🚚 正在移动到投料点 {self.current_drop_index} ({target_drop_position})") - self.robotClient.current_position = target_drop_position - self.log_signal(logging.INFO, f"📍 已移动到投料点 {self.current_drop_index} ({self.robotClient.current_position})") - -# --- 7. 主程序入口 --- -if __name__ == "__main__": - # --- 配置仿真环境 --- - logging.basicConfig(level=logging.INFO) # 设置日志级别 - - # 1. 定义位置点 - origin_pos = Real_Position("Origin") - take_pos = Real_Position("Fixed_Take_Point") - drop_pos_1 = Real_Position("Drop_Point_1") - drop_pos_2 = Real_Position("Drop_Point_2") - drop_pos_3 = Real_Position("Drop_Point_3") - - # 2. 创建 FeedLine (简化) - feedline_positions = [ - PositionModel(FeedStatus.FTake, take_pos), - PositionModel(FeedStatus.FDropBag, Real_Position("Placeholder_Drop_Pos")) # 占位,实际由 drop_positions 列表决定 - ] - feed_line = FeedLine("SimFeedLine", feedline_positions) - - # 3. 定义投料点列表 (码垛点) - drop_points = [drop_pos_1, drop_pos_2, drop_pos_3] - - # 4. 创建 FeedingConfig - total_bags = 5 # 总共要投的料包数 - feeding_config = FeedingConfig(num=total_bags, feedLine=feed_line, drop_positions=drop_points) - - # 5. 创建模拟机器人和传感器 - robot_client = SimulatedRobotClient("Origin") - sensor2 = SimulatedSensor("Sensor2", initial_state=False) # 初始无信号 - - # 6. 创建并配置仿真 Feeding - sim_feeding = SimulatedFeeding(robot_client, sensor2) - sim_feeding.set_config(feeding_config) - - # 7. (可选) 预设传感器2信号序列 [(时间(秒), 状态), ...] - # 例如:在第2秒时变为True,第8秒时变为False,第15秒时再变为True... - sensor2_sequence = [(2, True), (8, False), (15, True), (22, False), (30, True)] - sensor2.start_simulation(sensor2_sequence) - - # 8. 启动流程 - sim_feeding.start() - - # 9. 运行仿真主循环 - try: - while sim_feeding.feedStatus != FeedStatus.FNone: - sim_feeding.run() - sim_feeding.catch.run() # 触发模拟抓取/投料逻辑 - time.sleep(0.5) # 控制仿真循环速度 - except KeyboardInterrupt: - print("\n🛑 仿真被用户中断") - finally: - sensor2.stop_simulation() - print("🏁 仿真结束")