detect-gui/widget/task_list.py
2024-11-22 10:21:44 +08:00

147 lines
5.6 KiB
Python

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 task in tasks:
x = offset
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.setStyleSheet("border: 1px solid rgba(58,54,219,0.45); border-radius: 6px;")
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}')