add(派单任务和管片任务的刷新)
This commit is contained in:
@ -11,8 +11,10 @@ from utils.image_paths import ImagePaths
|
||||
任务控件,如:管片任务、派单任务
|
||||
"""
|
||||
class TaskWidget(QWidget):
|
||||
# 任务详情信号: task1表示第一条任务
|
||||
# 任务详情信号: task1表示第一条任务 (用于详情对话框)
|
||||
task_details_signal = Signal(str)
|
||||
# 任务选择按钮选中的信号 (用于上方的计划表单)
|
||||
task_selected_signal = Signal(str)
|
||||
|
||||
def __init__(self, taskTitle:str, parent=None):
|
||||
super().__init__(parent)
|
||||
@ -40,6 +42,7 @@ class TaskWidget(QWidget):
|
||||
|
||||
# 用字典存储每个任务的可修改控件(键:任务名,值:控件字典)
|
||||
self.task_controls = {} # 结构:{"task1": {"volume_label": xxx, "time_label": xxx, ...}, ...}
|
||||
self.current_selected_task = None # 选择按钮,当前选中的任务的任务名
|
||||
|
||||
# 三条任务条目
|
||||
self._add_task("task1", "SHRB1-3", ImagePaths.TASK_RECT1)
|
||||
@ -87,12 +90,17 @@ class TaskWidget(QWidget):
|
||||
}}
|
||||
""")
|
||||
select_btn.setCheckable(True)
|
||||
select_btn.clicked.connect(lambda checked, tn=task_name: self._on_select_btn_clicked(tn, checked))
|
||||
controls["select_btn"] = select_btn
|
||||
row1_layout.addWidget(select_btn)
|
||||
|
||||
# 任务编号
|
||||
task_id_label = QLabel(task_id)
|
||||
task_id_label.setStyleSheet("font-size: 18px; color: #16ffff;padding-left: 6px;")
|
||||
# 1. 设置鼠标样式为手型,提示可点击
|
||||
task_id_label.setCursor(Qt.PointingHandCursor)
|
||||
# 2. 绑定点击事件:点击标签时,选中对应的select_btn
|
||||
task_id_label.mousePressEvent = lambda event, tn=task_name: self._on_task_id_clicked(tn)
|
||||
controls["task_id_label"] = task_id_label
|
||||
row1_layout.addWidget(task_id_label)
|
||||
|
||||
@ -124,7 +132,7 @@ class TaskWidget(QWidget):
|
||||
row2_layout = QHBoxLayout()
|
||||
# 方量标签
|
||||
volume_label = QLabel("方量 200")
|
||||
volume_label.setStyleSheet("color: #a1c1d7; font-size: 14px;padding-left: 19px;")
|
||||
volume_label.setStyleSheet("color: #a1c1d7; font-size: 14px;padding-left: 6px;")
|
||||
controls["volume_label"] = volume_label
|
||||
row2_layout.addWidget(volume_label)
|
||||
|
||||
@ -138,13 +146,19 @@ class TaskWidget(QWidget):
|
||||
time_label.setStyleSheet("color: #a1c1d7; font-size: 14px;")
|
||||
controls["time_label"] = time_label
|
||||
row2_layout.addWidget(time_label)
|
||||
|
||||
# 状态文本标签
|
||||
status_text_label = QLabel()
|
||||
status_text_label.setStyleSheet("color: #16ffff; font-size: 14px;")
|
||||
controls["status_text_label"] = status_text_label
|
||||
row2_layout.addWidget(status_text_label)
|
||||
|
||||
# 状态标签
|
||||
# 状态图标标签
|
||||
status_icon_label = QLabel()
|
||||
status_icon_label.setPixmap(QPixmap(status_icon))
|
||||
controls["status_icon_label"] = status_icon_label
|
||||
row2_layout.addWidget(status_icon_label, alignment=Qt.AlignRight)
|
||||
|
||||
# 添加水平布局2到item_layout
|
||||
item_layout.addLayout(row2_layout)
|
||||
|
||||
# 分隔线
|
||||
@ -165,6 +179,42 @@ class TaskWidget(QWidget):
|
||||
# 发送任务详情信号
|
||||
self.task_details_signal.emit(task_name)
|
||||
|
||||
def _on_select_btn_clicked(self, task_name: str, checked: bool):
|
||||
"""
|
||||
处理选择按钮点击事件,实现互斥选中
|
||||
:param task_name: 点击的任务名(task1/task2/task3)
|
||||
:param checked: 按钮是否被选中(True/False)
|
||||
"""
|
||||
# 1. 如果是选中操作(checked=True)
|
||||
if checked:
|
||||
# 取消之前选中的任务按钮
|
||||
if self.current_selected_task and self.current_selected_task != task_name:
|
||||
prev_select_btn = self.task_controls[self.current_selected_task]["select_btn"]
|
||||
prev_select_btn.setChecked(False) # 取消选中
|
||||
# 更新当前选中的任务
|
||||
self.current_selected_task = task_name
|
||||
# 通知任务选中按钮更新了选中
|
||||
self.task_selected_signal.emit(task_name)
|
||||
else:
|
||||
# 2. 如果是取消选中操作(checked=False)
|
||||
# 重新设为选中状态,阻止取消 (确保该按钮继续为选中状态,保证至少有一个按钮被选中)
|
||||
current_select_btn = self.task_controls[task_name]["select_btn"]
|
||||
current_select_btn.setChecked(True)
|
||||
# 确保选中标记不丢失
|
||||
self.current_selected_task = task_name
|
||||
|
||||
def _on_task_id_clicked(self, task_name: str):
|
||||
"""
|
||||
点击任务编号标签时,选中对应的选择按钮(复用互斥逻辑)
|
||||
:param task_name: 点击的任务名(task1/task2/task3)
|
||||
"""
|
||||
if task_name in self.task_controls:
|
||||
# 1. 获取对应select_btn
|
||||
select_btn = self.task_controls[task_name]["select_btn"]
|
||||
# 2. 模拟点击相应的选择按钮
|
||||
if not select_btn.isChecked():
|
||||
select_btn.click()
|
||||
|
||||
# --------------------------
|
||||
# 对外接口:修改任务属性
|
||||
# 三个任务条目对应的任务名task_name,分别为 task1、task2、task3
|
||||
@ -185,11 +235,36 @@ class TaskWidget(QWidget):
|
||||
time_label = self.task_controls[task_name]["time_label"]
|
||||
time_label.setText(time_str)
|
||||
|
||||
def set_task_status(self, task_name:str, status_str: str, icon_path:str):
|
||||
"""修改指定任务的状态, 比如: 已下发、计划中等"""
|
||||
ICON_COLOR_MAP = {
|
||||
ImagePaths.TASK_RECT1: "#16ffff",
|
||||
ImagePaths.TASK_RECT2: "#ffab11",
|
||||
ImagePaths.TASK_RECT3: "#54f529",
|
||||
ImagePaths.TASK_RECT4: "#ff6a5c",
|
||||
ImagePaths.TASK_RECT5: "#f6f44b"
|
||||
}
|
||||
DEFAULT_COLOR = "#000000"
|
||||
if task_name in self.task_controls:
|
||||
status_label = self.task_controls[task_name]["status_text_label"] # 状态文本
|
||||
status_label.setText(status_str)
|
||||
icon_label = self.task_controls[task_name]["status_icon_label"] # 状态图标
|
||||
icon_label.setPixmap(QPixmap(icon_path))
|
||||
# 修改状态文本的颜色
|
||||
status_text_color = ICON_COLOR_MAP.get(icon_path, DEFAULT_COLOR)
|
||||
status_label.setStyleSheet(f"QLabel {{ color: {status_text_color}; font-size: 14px;}}")
|
||||
|
||||
def set_task_id(self, task_name:str, new_id: str):
|
||||
"""修改指定任务的编号, 如: SHRB2-3"""
|
||||
if task_name in self.task_controls:
|
||||
task_id_label = self.task_controls[task_name]["task_id_label"]
|
||||
task_id_label.setText(new_id)
|
||||
task_id_label.setText(new_id)
|
||||
|
||||
def set_task_select_btn_selected(self, task_name:str):
|
||||
"""设置 任务选择按钮选中 (主要用于刷新计划表单)"""
|
||||
if task_name in self.task_controls:
|
||||
task_select_btn = self.task_controls[task_name]["select_btn"]
|
||||
task_select_btn.click()
|
||||
|
||||
def get_task_volume(self, task_name:str):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user