import cv2 from PyQt5.QtCore import Qt from PyQt5.QtGui import QPixmap, QImage, QTextCursor, QTextCharFormat, QBrush, QColor from PyQt5.QtMultimedia import QCameraInfo from PyQt5.QtWidgets import QDialog, QWidget, QVBoxLayout, QHBoxLayout, QGridLayout, QScrollArea, QPushButton, \ QSpacerItem, QSizePolicy, QLabel, QMessageBox, QPlainTextEdit from components.image_framework import MSG_LOCATION_RECORD, MSG_DETECTION_RECORD, get_msg_info from core.context import AppContext from widget.embed_item import EmbedItem class TaskRunDialog(QDialog): def __init__(self, param, parent=None): super(TaskRunDialog, self).__init__(parent) self.ratio = AppContext.get_ratio() self.checkIndex = 1 self.param = param self.setWindowFlags(Qt.WindowStaysOnTopHint) self.setWindowFlags(Qt.FramelessWindowHint) self.setWindowModality(Qt.ApplicationModal) self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowTitle("检测窗口") # self.showFullScreen() self.bim_widget = None self.check_widget = None self.embed_widgets = [] # 广角镜头预览区 self.view_widget = None self.view_label = None self.picture_label = None self.log_text = None self.start_adjust_button = None self.start_check_button = None self.stop_check_button = None self.stop_task_button = None self.init_ui() self.init_event() def init_event(self): AppContext.get_edge_context().get_component('image-framework').signals.on_image_detect_result.connect( lambda data: self.image_result(data)) # def image_result(self, msg): # qt_image = None # if msg.im2D is not None: # rgb_frame = cv2.cvtColor(msg.im2D, cv2.COLOR_BGR2RGB) # height, width, channels = rgb_frame.shape # bytes_per_line = channels * width # qt_image = QImage(rgb_frame.data, width, height, bytes_per_line, QImage.Format_RGB888) # # if msg.msg_type == MSG_LOCATION_RECORD: # if qt_image is None: # return # try: # view_pixmap = QPixmap.fromImage(qt_image) # sc = view_pixmap.height() / 450 # self.view_label.setFixedWidth(view_pixmap.width() / sc) # self.view_label.setPixmap(view_pixmap) # self.view_label.setGeometry((self.view_widget.width() - self.view_label.width()) / 2, 0, self.view_label.width(), self.view_label.height()) # except Exception as e: # dd = 0 # elif msg.msg_type == MSG_DETECTION_RECORD: # # 显示日志 # # self.log_text.appendPlainText(get_msg_info(msg.record.code).decode('utf-8')) # if msg.record.code < 0: # self.insert_text(get_msg_info(msg.record.code).decode('utf-8'), QColor("red")) # QMessageBox.warning(self, '错误信息', get_msg_info(msg.record.code).decode('utf-8')) # self.set_button_default() # AppContext.get_edge_context().get_component('image-framework').start_location() # elif msg.record.code == 1008: # self.start_adjust_button.setEnabled(False) # self.start_check_button.setEnabled(True) # self.stop_check_button.setEnabled(True) # self.stop_task_button.setEnabled(False) # elif msg.record.code == 1012: # self.insert_text(get_msg_info(msg.record.code).decode('utf-8'), QColor("green")) # QMessageBox.warning(self, '成功信息', "检测结束") # self.set_button_default() # AppContext.get_edge_context().get_component('image-framework').start_location() # else: # self.insert_text(get_msg_info(msg.record.code).decode('utf-8'), QColor("white")) # # if qt_image is None: # return # try: # view_pixmap = QPixmap.fromImage(qt_image) # self.picture_label.setPixmap(view_pixmap) # except Exception as e: # dd = 0 # else: # ddd = 0 def insert_text(self, text, font_color): fmt = QTextCharFormat() fmt.setForeground(QBrush(font_color)) self.log_text.mergeCurrentCharFormat(fmt) self.log_text.appendPlainText(text) def showEvent(self, e): AppContext.get_edge_context().get_component('image-framework').start_location() def init_ui(self): # bim self.bim_widget = QWidget() self.bim_widget.setObjectName("bimWidget") self.bim_widget.setFixedWidth(3000) # 选择区 self.check_widget = QWidget(self.bim_widget) self.check_widget.setObjectName("checkWidget") self.check_widget.setFixedSize(160, 160) self.check_widget.move(90, 230) # # 预埋件 # self.embed_widgets = [] # for item in self.param: # embed_item = EmbedItem(self.bim_widget) # embed_item.setObjectName(item["code"]) # embed_item.setItemParam(item) # self.embed_widgets.append(embed_item) map_widget = QWidget() legend_widget = QWidget() legend_layout = QHBoxLayout() legend_layout.setContentsMargins(0, 0, 0, 0) legend_layout.setSpacing(0) legend_widget.setLayout(legend_layout) legend_check_widget = QWidget() legend_check_widget.setObjectName("legendCheckWidget") legend_std_widget = QWidget() legend_std_widget.setObjectName("legendStdWidget") legend_ok_widget = QWidget() legend_ok_widget.setObjectName("legendOkWidget") legend_ng_widget = QWidget() legend_ng_widget.setObjectName("legendNgWidget") legend_normal_widget = QWidget() legend_normal_widget.setObjectName("legendNormalWidget") legend_check_label = QLabel() legend_check_label.setObjectName("legendCheckLabel") legend_check_label.setText("检测区域") legend_std_label = QLabel() legend_std_label.setObjectName("legendStdLabel") legend_std_label.setText("基准件") legend_ok_label = QLabel() legend_ok_label.setObjectName("legendOkLabel") legend_ok_label.setText("合格件") legend_ng_label = QLabel() legend_ng_label.setObjectName("legendNgLabel") legend_ng_label.setText("不合格件") legend_normal_label = QLabel() legend_normal_label.setObjectName("legendNormalLabel") legend_normal_label.setText("待检测件") legend_layout.addStretch(1) legend_layout.addWidget(legend_check_widget) legend_layout.addSpacing(5) legend_layout.addWidget(legend_check_label) legend_layout.addSpacing(40) legend_layout.addWidget(legend_std_widget) legend_layout.addSpacing(5) legend_layout.addWidget(legend_std_label) legend_layout.addSpacing(40) legend_layout.addWidget(legend_ok_widget) legend_layout.addSpacing(5) legend_layout.addWidget(legend_ok_label) legend_layout.addSpacing(40) legend_layout.addWidget(legend_ng_widget) legend_layout.addSpacing(5) legend_layout.addWidget(legend_ng_label) legend_layout.addSpacing(40) legend_layout.addWidget(legend_normal_widget) legend_layout.addSpacing(5) legend_layout.addWidget(legend_normal_label) legend_layout.addStretch(1) content_widget = QWidget() content_widget.setObjectName("contentWidget") self.picture_label = QLabel() self.picture_label.setObjectName("pictureWidget") self.picture_label.setFixedWidth(930 * 450 / 700) self.picture_label.setFixedHeight(450) self.picture_label.setScaledContents(True) self.picture_label.setStyleSheet("background: #222222;") self.view_widget = QWidget() self.view_widget.setObjectName("viewWidget") self.view_widget.setFixedWidth(1920 * 450 / 1080) self.view_widget.setFixedHeight(450) self.view_label = QLabel(self.view_widget) self.view_label.setObjectName("viewLabel") self.view_label.setFixedHeight(450) self.view_label.setScaledContents(True) self.view_label.setStyleSheet("background: #222222;") view_check_widget = QWidget(self.view_widget) view_check_widget.setObjectName("viewCheckWidget") view_check_widget.setGeometry(self.view_label.geometry().x() + 145, 170, 240, 240) self.log_text = QPlainTextEdit() self.log_text.setObjectName("logText") self.log_text.setFixedHeight(450) self.log_text.setReadOnly(True) tool_widget = QWidget() tool_widget.setObjectName("toolWidget") tool_widget.setFixedWidth(150) tool_widget.setFixedHeight(450) tool_layout = QVBoxLayout() tool_layout.setContentsMargins(0, 0, 0, 0) tool_layout.setSpacing(0) self.start_adjust_button = QPushButton() self.start_adjust_button.setObjectName("startAdjustButton") self.start_adjust_button.setText("开始校准") self.start_adjust_button.setFixedHeight(self.ratio * 42) self.start_adjust_button.clicked.connect(self.start_adjust) self.start_check_button = QPushButton() self.start_check_button.setObjectName("startCheckButton") self.start_check_button.setEnabled(False) self.start_check_button.setText("开始检测") self.start_check_button.setFixedHeight(self.ratio * 42) self.start_check_button.clicked.connect(self.start_check) self.stop_check_button = QPushButton() self.stop_check_button.setObjectName("stopCheckButton") self.stop_check_button.setEnabled(False) self.stop_check_button.setText("停止检测") self.stop_check_button.setFixedHeight(self.ratio * 42) self.stop_check_button.clicked.connect(self.stop_check) self.stop_task_button = QPushButton() self.stop_task_button.setObjectName("stopTaskButton") self.stop_task_button.setText("结束任务") self.stop_task_button.setFixedHeight(self.ratio * 42) self.stop_task_button.clicked.connect(self.stop_task) tool_widget.setLayout(tool_layout) spacer = QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding) tool_layout.addItem(spacer) tool_layout.addWidget(self.start_adjust_button) tool_layout.addSpacing(20) tool_layout.addWidget(self.start_check_button) tool_layout.addSpacing(20) tool_layout.addWidget(self.stop_check_button) tool_layout.addSpacing(20) tool_layout.addWidget(self.stop_task_button) tool_layout.addSpacing(20) content_layout = QHBoxLayout() content_layout.setContentsMargins(0, 0, 0, 20) content_layout.setSpacing(0) content_layout.addWidget(self.view_widget) content_layout.addSpacing(20) content_layout.addWidget(self.log_text) content_layout.addSpacing(20) content_layout.addWidget(self.picture_label) content_layout.addSpacing(20) content_layout.addWidget(tool_widget) content_widget.setLayout(content_layout) layout = QVBoxLayout() layout.setContentsMargins(20, 20, 20, 20) layout.setSpacing(0) layout.addWidget(map_widget) layout.addSpacing(5) layout.addWidget(legend_widget) layout.addSpacing(20) layout.addWidget(content_widget) self.setLayout(layout) map_area = QScrollArea() map_area.setObjectName("mapArea") map_area.setWidgetResizable(True) map_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) map_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) map_widget.setLayout(QGridLayout()) map_widget.layout().setContentsMargins(0, 0, 0, 0) map_widget.layout().setSpacing(0) map_widget.layout().addWidget(map_area) map_area.setWidget(self.bim_widget) self.set_button_default() # index = 0 # for item in self.embed_widgets: # if item.objectName() == 'STD': continue # if self.check_widget.geometry().contains(item.rect): # item.setIndex(str(self.checkIndex)) # if index % 2 == 0: # item.setChecked() # else: # item.setError() # index += 1 # 校准 # def start_adjust(self): # self.start_adjust_button.setEnabled(False) # self.start_check_button.setEnabled(False) # self.stop_check_button.setEnabled(False) # self.stop_task_button.setEnabled(False) # # self.log_text.setPlainText("") # self.picture_label.setPixmap(QPixmap("")) # # result = AppContext.get_edge_context().get_component('image-framework').start_adjust() # if result.code < 0: # self.set_button_default() # QMessageBox.warning(self, '校准启动失败', get_msg_info(msg.record.code).decode('utf-8')) # # def start_check(self): # self.start_adjust_button.setEnabled(False) # self.start_check_button.setEnabled(False) # self.stop_check_button.setEnabled(False) # self.stop_task_button.setEnabled(False) # # result = AppContext.get_edge_context().get_component('image-framework').start_check() # if result.code < 0: # self.set_button_default() # QMessageBox.warning(self, '检测启动失败', get_msg_info(msg.record.code).decode('utf-8')) # # def stop_check(self): # self.start_adjust_button.setEnabled(False) # self.start_check_button.setEnabled(False) # self.stop_check_button.setEnabled(False) # self.stop_task_button.setEnabled(False) # result = AppContext.get_edge_context().get_component('image-framework').stop_check() # if result.code < 0: # QMessageBox.warning(self, '检测停止失败', get_msg_info(msg.record.code).decode('utf-8')) # self.set_button_default() # # def stop_task(self): # AppContext.get_edge_context().get_component('image-framework').stop_all() # self.reject() # # def set_button_default(self): # self.start_adjust_button.setEnabled(True) # self.start_check_button.setEnabled(False) # self.stop_check_button.setEnabled(False) # self.stop_task_button.setEnabled(True)