add(派单任务和管片任务的刷新)
This commit is contained in:
@ -278,6 +278,14 @@ class ArcProgressWidget(QWidget):
|
||||
# 管片编号设置
|
||||
def setSegmentNumber(self, segmentNumberStr:str):
|
||||
self.segment_number_label.setText(segmentNumberStr)
|
||||
|
||||
# 环号设置
|
||||
def setRingNumber(self, ringNumber:int):
|
||||
self.ring_number_label.setText(f"环号: {ringNumber}")
|
||||
|
||||
# 管片尺寸(规格)设置 (比如:6900*1500)
|
||||
def setSegmentSize(self, SizeSpecification:str):
|
||||
self.segment_size_label.setText(SizeSpecification)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@ -337,10 +337,10 @@ class DispatchDetailsDialog(QDialog):
|
||||
self.modify_btn.show()
|
||||
|
||||
# 2、修改 派单方量标签的值
|
||||
volume_label = self.rows[4].value
|
||||
# volume_label = self.rows[4].value
|
||||
# modifyed_value 为float类型, 一位小数
|
||||
modifyed_value = self.volume_value_adjuster.get_value()
|
||||
volume_label.setText(str(modifyed_value))
|
||||
# volume_label.setText(str(modifyed_value))
|
||||
|
||||
# 3、发送派单方量确定修改的信号 (发送派单任务名 + 确认修改之后的派单方量)
|
||||
self.confirm_modify_volume.emit(self.dispatch_task_name, modifyed_value)
|
||||
@ -383,6 +383,16 @@ class DispatchDetailsDialog(QDialog):
|
||||
if 0 <= row < len(self.rows):
|
||||
self.rows[row].value.setText(str(new_value_text) if new_value_text is not None else "")
|
||||
|
||||
def set_dispatch_task_name(self, task_name:str):
|
||||
"""设置/刷新 派单任务名"""
|
||||
self.dispatch_task_name = task_name
|
||||
|
||||
def set_modify_volume_status(self, status:bool):
|
||||
"""设置是否能够在派单详情界面修改方量,
|
||||
status为False即不能修改方量, 为True表示能够修改方量
|
||||
"""
|
||||
self.modify_btn.setVisible(status)
|
||||
|
||||
|
||||
# 测试代码
|
||||
if __name__ == "__main__":
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
|
||||
QApplication)
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtCore import Qt, Signal, QTimer
|
||||
from PySide6.QtGui import QPainter, QPixmap
|
||||
from .value_adjuster import ValueAdjuster
|
||||
from .switch_button import SwitchButton
|
||||
@ -10,6 +10,14 @@ import resources.resources_rc
|
||||
from utils.image_paths import ImagePaths
|
||||
|
||||
class PlanWidget(QWidget):
|
||||
# 自动派单切换信号
|
||||
# True: 自动派单 False: 手动派单
|
||||
auto_dispatch_signal = Signal(bool)
|
||||
|
||||
# 计划表单最终的确认的修改的方量
|
||||
# 对应的任务名, 最终的方量
|
||||
final_modify_volume_signal = Signal(str, float)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
# 加载背景图
|
||||
@ -25,6 +33,16 @@ class PlanWidget(QWidget):
|
||||
"auto_dispatch": None # 自动派单(SwitchButton)
|
||||
}
|
||||
|
||||
# ==================================================
|
||||
# 用于计划表单的修改方量的最终确认
|
||||
# 1、确认最终修改的方量的计时器(超时代表着确认了最终的方量)
|
||||
self.volume_timer = QTimer(self)
|
||||
self.volume_timer.setInterval(2500) # 2.5秒延迟(根据需求调整)
|
||||
self.volume_timer.setSingleShot(True) # 单次触发:避免重复执行
|
||||
self.volume_timer.timeout.connect(self._sync_final_volume)
|
||||
# 2、该计划表单对应的任务名
|
||||
self.plan_table_task_name = None
|
||||
|
||||
# 主垂直布局
|
||||
main_layout = QVBoxLayout(self)
|
||||
main_layout.setContentsMargins(13, 5, 6, 15)
|
||||
@ -63,6 +81,8 @@ class PlanWidget(QWidget):
|
||||
row2_layout.addWidget(label2)
|
||||
|
||||
self.fangliang_adjuster = ValueAdjuster() # 导入的方量调整控件
|
||||
self.fangliang_adjuster.minus_btn.clicked.connect(self._reset_volume_timer)
|
||||
self.fangliang_adjuster.plus_btn.clicked.connect(self._reset_volume_timer)
|
||||
row2_layout.addWidget(self.fangliang_adjuster)
|
||||
main_layout.addLayout(row2_layout)
|
||||
self.controls["volume"] = self.fangliang_adjuster
|
||||
@ -75,7 +95,7 @@ class PlanWidget(QWidget):
|
||||
row3_layout.addWidget(status_icon3)
|
||||
row3_layout.addSpacing(4)
|
||||
|
||||
label3 = QLabel("计划配比")
|
||||
label3 = QLabel("配合比")
|
||||
label3.setStyleSheet("font-size: 18px; color: #03f5ff;")
|
||||
row3_layout.addWidget(label3)
|
||||
|
||||
@ -117,11 +137,24 @@ class PlanWidget(QWidget):
|
||||
row5_layout.addWidget(label5)
|
||||
|
||||
self.switch = SwitchButton()
|
||||
self.switch.switched.connect(self.auto_dispatch_signal)
|
||||
self.switch.setChecked(True)
|
||||
row5_layout.addWidget(self.switch, alignment=Qt.AlignLeft)
|
||||
main_layout.addLayout(row5_layout)
|
||||
self.controls["auto_dispatch"] = self.switch
|
||||
|
||||
def _reset_volume_timer(self):
|
||||
"""每次调整方量时,重置定时器(倒计时重新开始)"""
|
||||
if self.volume_timer.isActive(): # 如果定时器正在运行,先停止
|
||||
self.volume_timer.stop()
|
||||
self.volume_timer.start() # 重启定时器
|
||||
|
||||
def _sync_final_volume(self):
|
||||
"""同步 确认的最终的修改方量"""
|
||||
final_volume = self.fangliang_adjuster.get_value()
|
||||
# print("最终确认的方量为:", final_volume)
|
||||
self.final_modify_volume_signal.emit(self.plan_table_task_name, final_volume)
|
||||
|
||||
def paintEvent(self, event):
|
||||
"""绘制背景图片"""
|
||||
painter = QPainter(self)
|
||||
@ -150,10 +183,21 @@ class PlanWidget(QWidget):
|
||||
self.controls["status"].setText(new_status)
|
||||
|
||||
def set_auto_dispatch(self, is_checked:bool):
|
||||
"""修改自动派单开关状态, true: 开启自动派单, False: 关闭自动派单"""
|
||||
"""修改自动派单开关状态, true: 自动派单, False: 手动派单"""
|
||||
if self.controls["auto_dispatch"]:
|
||||
self.controls["auto_dispatch"].setChecked(is_checked)
|
||||
|
||||
def set_modify_volume_status(self, status:bool):
|
||||
"""设置 计划表单中修改方量控件的状态, 是否能够修改方量
|
||||
status: True, 能够修改方量
|
||||
False, 不能修改方量
|
||||
"""
|
||||
self.fangliang_adjuster.setEnabled(status)
|
||||
|
||||
def set_plan_table_task_name(self, task_name:str):
|
||||
"""设置 计划表单对应的选中任务名"""
|
||||
self.plan_table_task_name = task_name
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
widget = PlanWidget()
|
||||
|
||||
@ -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