import json from datetime import datetime import pandas as pd from PyQt5.QtCore import Qt, QRect from PyQt5.QtWidgets import QWidget, QVBoxLayout, QGridLayout, QLineEdit, QLabel, QHBoxLayout, QPushButton, QFileDialog, \ QScrollArea, QPlainTextEdit, QMessageBox from core.context import AppContext from widget.task_run import TaskRunDialog class TaskListWidget(QWidget): def __init__(self, parent=None): super(TaskListWidget, self).__init__(parent) self.ratio = AppContext.get_ratio() self.run_dialog = None scroll_area = QScrollArea() scroll_area.setStyleSheet("border: none;") scroll_area.setWidgetResizable(True) scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) self.content_widget = QWidget() scroll_area.setWidget(self.content_widget) widget = QWidget() widget_layout = QVBoxLayout(widget) widget_layout.setContentsMargins(10, 10, 10, 10) widget_layout.setSpacing(0) widget_layout.addWidget(scroll_area) layout = QVBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(0) layout.addWidget(widget) self.init_ui() AppContext.get_edge_context().get_component('dat_task').signals.on_receive_task.connect(self.init_ui) def init_ui(self): task_table = AppContext.get_edge_context().get_component("dat_task") tasks = task_table.list_task(1) if len(tasks) == 0: return self.content_widget.children().clear() # 添加 TITLE x = 0 y = 0 offset = 10 x = x + offset y = y + offset label_name = QLabel(self.content_widget) label_name.setObjectName("THeader") label_name.setText("任务名称") label_name.setGeometry(QRect(x, y, 200, 30)) x = x + 200 + offset label_sn = QLabel(self.content_widget) label_sn.setObjectName("THeader") label_sn.setText("设备序列号") label_sn.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset label_param = QLabel(self.content_widget) label_param.setObjectName("THeader") label_param.setText("参数") label_param.setGeometry(QRect(x, y, 400, 30)) x = x + 400 + offset label_start = QLabel(self.content_widget) label_start.setObjectName("THeader") label_start.setText("开始时间") label_start.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset label_end = QLabel(self.content_widget) label_end.setObjectName("THeader") label_end.setText("结束时间") label_end.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset label_create = QLabel(self.content_widget) label_create.setObjectName("THeader") label_create.setText("创建时间") label_create.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset label_action = QLabel(self.content_widget) label_action.setObjectName("THeader") label_action.setText("操作") label_action.setGeometry(QRect(x, y, 200, 30)) y = y + 30 + offset for i in range(10): x = offset task = tasks[0] label_name = QLabel(self.content_widget) label_name.setText(task[1]) label_name.setGeometry(QRect(x, y, 200, 30)) x = x + 200 + offset label_sn = QLabel(self.content_widget) label_sn.setText(task[2]) label_sn.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset param = QPlainTextEdit(self.content_widget) param.setPlainText(task[3]) param.setReadOnly(True) param.setGeometry(QRect(x, y, 400, 120)) x = x + 400 + offset label_start = QLabel(self.content_widget) label_start.setText(task[6]) label_start.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset label_end = QLabel(self.content_widget) label_end.setText(task[7]) label_end.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset label_create = QLabel(self.content_widget) label_create.setText(task[8]) label_create.setGeometry(QRect(x, y, 150, 30)) x = x + 150 + offset run_task = QPushButton(self.content_widget) run_task.setStyleSheet("background-color: #3A36DB;") run_task.setObjectName("run_task") run_task.setText("开始任务") run_task.setGeometry(QRect(x, y, 120, 30)) run_task.clicked.connect(lambda: self.start_task(task)) y = y + 120 + offset self.content_widget.setFixedHeight(y + offset) for ctl in self.content_widget.children(): if isinstance(ctl, QWidget): ctl.setVisible(True) def start_task(self, task): task_table = AppContext.get_edge_context().get_component("dat_task") task_table.update_task({ "id": task[0], "state": 1, "start_time": datetime.now() }) try: param_json = json.loads(task[3]) self.run_dialog = TaskRunDialog(param_json) dialog_result = self.run_dialog.exec_() if dialog_result == 0: c = 0 # self.name_text.setText(None) # self.file_content.setPlainText(None) except Exception as e: QMessageBox.warning(self, 'JSON Error', f'Invalid JSON: {e}')