From 17b5f8348dc9110562ded1d788107b836ba0a440 Mon Sep 17 00:00:00 2001 From: pengqi Date: Sun, 16 Nov 2025 11:55:28 +0800 Subject: [PATCH] V1.0 --- .idea/.gitignore | 3 + .idea/inspectionProfiles/Project_Default.xml | 18 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/中交三航背景界面.iml | 8 + bottom_control_widget.py | 41 ++ dispatch_task.py | 529 ++++++++++++++++++ main_window.py | 113 ++++ system_nav_bar.py | 141 +++++ 主界面背景.png | Bin 0 -> 2354 bytes 关闭图标.png | Bin 0 -> 229 bytes 底部背景.png | Bin 0 -> 14745 bytes 派单任务信息栏1.png | Bin 0 -> 510 bytes 派单任务信息栏2.png | Bin 0 -> 509 bytes 派单最底部.png | Bin 0 -> 1933 bytes 生产取消按钮.png | Bin 0 -> 226 bytes 生产异常按钮.png | Bin 0 -> 224 bytes 系统logo.png | Bin 0 -> 2158 bytes 系统主界面导航栏.png | Bin 0 -> 23632 bytes 系统总标题.png | Bin 0 -> 6262 bytes 系统消息喇叭.png | Bin 0 -> 348 bytes 系统消息背景.png | Bin 0 -> 3267 bytes 详情弹出背景.png | Bin 0 -> 19062 bytes 详情标题.png | Bin 0 -> 1075 bytes 25 files changed, 874 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/中交三航背景界面.iml create mode 100644 bottom_control_widget.py create mode 100644 dispatch_task.py create mode 100644 main_window.py create mode 100644 system_nav_bar.py create mode 100644 主界面背景.png create mode 100644 关闭图标.png create mode 100644 底部背景.png create mode 100644 派单任务信息栏1.png create mode 100644 派单任务信息栏2.png create mode 100644 派单最底部.png create mode 100644 生产取消按钮.png create mode 100644 生产异常按钮.png create mode 100644 系统logo.png create mode 100644 系统主界面导航栏.png create mode 100644 系统总标题.png create mode 100644 系统消息喇叭.png create mode 100644 系统消息背景.png create mode 100644 详情弹出背景.png create mode 100644 详情标题.png diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..359bb53 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..78dfc6d --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..62ef35e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..56ad756 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/中交三航背景界面.iml b/.idea/中交三航背景界面.iml new file mode 100644 index 0000000..53e58ed --- /dev/null +++ b/.idea/中交三航背景界面.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/bottom_control_widget.py b/bottom_control_widget.py new file mode 100644 index 0000000..49b3025 --- /dev/null +++ b/bottom_control_widget.py @@ -0,0 +1,41 @@ +from PySide6.QtWidgets import (QWidget, QHBoxLayout, QLabel, QPushButton, + QMessageBox, QSpacerItem, QSizePolicy) +from PySide6.QtGui import QPixmap, QPainter, QFont, QPen +from PySide6.QtCore import Qt, QDateTime, QEvent, QSize + +class BottomControlWidget(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + self.initUI() + + def initUI(self): + # 1. 加载背景图并设置控件尺寸 + bg_path = "底部背景.png" + self.bg_pixmap = QPixmap(bg_path) + if self.bg_pixmap.isNull(): + print("警告:底部背景.png 加载失败,请检查路径!") + self.setFixedSize(1280, 66) + else: + self.setFixedSize(self.bg_pixmap.size()) + + # 2. 主布局(水平布局,组件间距6px) + main_layout = QHBoxLayout(self) + main_layout.setContentsMargins(10, 10, 10, 10) # 适当留白避免贴边 + main_layout.setSpacing(6) + + def paintEvent(self, event): + """绘制背景图""" + super().paintEvent(event) + if not self.bg_pixmap.isNull(): + painter = QPainter(self) + painter.drawPixmap(0, 0, self.bg_pixmap) + +if __name__ == "__main__": + import sys + from PySide6.QtWidgets import QApplication + + app = QApplication(sys.argv) + widget = BottomControlWidget() + widget.show() + sys.exit(app.exec()) + \ No newline at end of file diff --git a/dispatch_task.py b/dispatch_task.py new file mode 100644 index 0000000..25ecd33 --- /dev/null +++ b/dispatch_task.py @@ -0,0 +1,529 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +''' +# @Time : 2025/11/10 11:29 +# @Author : reenrr +# @Description : 派单任务的详情按钮点击之后弹出, 显示派单任务的详情 +''' + +from PySide6.QtWidgets import ( + QApplication, + QDialog, + QVBoxLayout, + QHBoxLayout, + QGridLayout, + QLabel, + QWidget, + QPushButton, +) +from PySide6.QtGui import QPixmap, QFont, QPainter, QIcon +from PySide6.QtCore import Qt, QEvent, QSize, QTimer, Slot +from PySide6.QtNetwork import QTcpSocket, QAbstractSocket +import sys +import json +from datetime import datetime + +# ----------- +# 参数配置 +# ----------- +tcp_server_host = "127.0.0.1" +tcp_server_port = 8888 + +RECONNECT_INTERVAL = 2000 # 重连间隔(毫秒) + +class DispatchDetailsDialog(QDialog): + """ + 派单任务的界面 + """ + def __init__(self, parent=None): + super().__init__(parent) + self.setAttribute(Qt.WA_TranslucentBackground) + + self.is_running = False # 系统运行状态标记 + self.latest_json_data = {"erp_id": None, "artifact_id": None} # 缓存服务端发送的最新JSON数据 + + self.statusWidgets = [] # 存储api_field + 对应的value标签 + + # --------------- + # TCP客户端核心配置 + # --------------- + self.tcp_socket = QTcpSocket(self) # TCP socket实例 + self.tcp_server_host = tcp_server_host + self.tcp_server_port = tcp_server_port + self.is_tcp_connected = False # TCP连接状态标记 + self.has_connected_once = False # 连接至服务器至少一次标记(区别首次连接和断开后重连) + self.reconnect_count = 0 # 重连次数计数器 + # 重连定时器,每隔RECONNECT_INTERVAL毫秒重连一次 + self.reconnect_timer = QTimer(self) + self.reconnect_timer.setInterval(RECONNECT_INTERVAL) + self.reconnect_timer.timeout.connect(self._reconnect_to_server) # 绑定重连函数 + + # 绑定TCP信号与槽(事件驱动) + self._bind_tcp_signals() + + # 初始化存储需要修改的控件 + self.id_value_label = None # 对应管片ID值标签 + self.rows = [] # 所有行的单元格列表(包含label、value) + + self._init_ui() + + # ---------------- + # 客户端自动后自动连接服务端 + # ---------------- + print(f"客户端启动,自动连接服务端{self.tcp_server_host}:{self.tcp_server_port}...") + self._connect_to_server() + + # --------------------- + # TCP连接相关函数 + # --------------------- + def _connect_to_server(self): + """主动发起连接(仅在未连接状态下有效""" + if not self.is_tcp_connected and self.tcp_socket.state() != QAbstractSocket.ConnectingState: + self.tcp_socket.abort() # 终止现有连接 + self.tcp_socket.connectToHost(self.tcp_server_host, self.tcp_server_port) + print(f"发起连接请求:{self.tcp_server_host}:{self.tcp_server_port}") + + def _reconnect_to_server(self): + """重连执行函数:无线重连,知道连接成功""" + if not self.is_tcp_connected: + self.reconnect_count += 1 + # 日志优化:每10次重连提示一次,避免日志刷屏 + if self.reconnect_count % 10 == 0: + print(f"已连续重连{self.reconnect_count}次,仍未连接服务端,请检查服务端状态...") + else: + print(f"第{self.reconnect_count}次重连请求:{self.tcp_server_host}:{self.tcp_server_port}") + self._connect_to_server() + + def _bind_tcp_signals(self): + """绑定TCP socket的核心信号(连接、断开、接收数据、错误)""" + # 连接成功信号 + self.tcp_socket.connected.connect(self._on_tcp_connected) + # 断开连接信号 + self.tcp_socket.disconnected.connect(self._on_tcp_disconnected) + # 接收数据信号(有新数据时触发) + self.tcp_socket.readyRead.connect(self._on_tcp_data_received) + # 错误信号(连接/通信出错时触发) + self.tcp_socket.errorOccurred.connect(self._on_tcp_error) + + # ----------------------- + # 界面初始化函数 + # ----------------------- + def _init_ui(self): + self.setWindowFlags(Qt.FramelessWindowHint) + self._load_background() + + main_layout = QVBoxLayout(self) + main_layout.setContentsMargins(32, 20, 32, 50) + main_layout.setSpacing(0) + + # 1. 顶部区域(标题 + 关闭按钮) + self._add_top_area(main_layout) + + # 2. 对应管片ID区域 + self._add_segment_id_area(main_layout) + + # 3. 网格信息区域(单列6行) + self._add_grid_info_area(main_layout) + main_layout.addSpacing(30) + + # 4. 操作按钮区域 + self._init_operation_buttons(main_layout) + + def _init_operation_buttons(self, parent_layout): + """初始化操作按钮(生产异常/生产取消)""" + buttonContainer = QWidget() + buttonLayout = QHBoxLayout(buttonContainer) + buttonLayout.setSpacing(100) + + self.errorButton = QPushButton("生产异常") + self.cancelButton = QPushButton("生产取消") + + self.errorButton.setStyleSheet(""" + QPushButton { + color: #1E1E1E; + font-size: 18px; + font-weight: bold; + padding: 15px 50px; + border: 1px solid; + background-color: #FF0000; + border-color: transparent; + + } + QPushButton:hover { + opacity: 0.9; + background-color: #B71C1C; + } + QPushButton:pressed { + opacity: 0.8; + } + + """) + + self.cancelButton.setStyleSheet(""" + QPushButton { + color: #1E1E1E; + font-size: 18px; + font-weight: bold; + padding: 15px 50px; + border: 1px solid; + background-color: #FFD700; + border-color: transparent; + } + QPushButton:hover { + opacity: 0.9; + background-color: #FFB300 + } + QPushButton:pressed { + opacity: 0.8; + } + """) + + self.errorButton.clicked.connect(self.on_error_clicked) + self.cancelButton.clicked.connect(self.on_cancel_clicked) + + # 初始禁用“停止”和“异常”按钮(未连接时不可用) + self.errorButton.setDisabled(True) + self.cancelButton.setDisabled(True) + + buttonLayout.addStretch(1) + buttonLayout.addWidget(self.errorButton) + buttonLayout.addWidget(self.cancelButton) + buttonLayout.addStretch(1) + + parent_layout.addWidget(buttonContainer) + + def _load_background(self): + self.bg_pixmap = QPixmap("详情弹出背景.png") # 修改为派单任务背景图 + if self.bg_pixmap.isNull(): + print("错误:派单任务背景.png 加载失败,请检查路径!") + self.setFixedSize(800, 500) + else: + self.setFixedSize(self.bg_pixmap.size()) + + def _add_top_area(self, parent_layout): + top_layout = QHBoxLayout() + top_layout.setContentsMargins(0, 0, 0, 36) + + top_layout.addStretch() + + # 标题改为“任务派单” + title_label = QLabel("任务派单") + font = QFont() + font.setPixelSize(24) + font.setLetterSpacing(QFont.AbsoluteSpacing, 2) + font.setBold(True) + title_label.setFont(font) + title_label.setStyleSheet("color: #13fffc; font-weight: Bold;") + title_label.setAlignment(Qt.AlignCenter) + top_layout.addWidget(title_label, alignment=Qt.AlignTop) + + # 关闭按钮 + top_layout.addStretch() + + parent_layout.addLayout(top_layout) + + def _add_segment_id_area(self, parent_layout): + id_layout = QHBoxLayout() + + id_label = QLabel("对应管片ID") # 标签文字修改 + id_label.setFixedSize(318, 32) + id_font = QFont() + id_font.setPixelSize(18) + id_font.setLetterSpacing(QFont.AbsoluteSpacing, 2) + id_font.setBold(True) + id_label.setFont(id_font) + id_label.setStyleSheet( + """ + background-image: url("详情标题.png"); + background-repeat: no-repeat; + background-position: center; + color: #13ffff; + """ + ) + id_label.setContentsMargins(16, 0, 0, 0) + id_label.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + + self.id_value_label = QLabel("") # 初始管片ID值 + value_font = QFont() + value_font.setPixelSize(18) + value_font.setBold(True) + value_font.setLetterSpacing(QFont.AbsoluteSpacing, 2) + self.id_value_label.setFont(value_font) + self.id_value_label.setStyleSheet("color: #13ffff;") + self.id_value_label.setAlignment(Qt.AlignRight | Qt.AlignVCenter) + + id_layout.addWidget(id_label) + id_layout.addStretch() + id_layout.addWidget(self.id_value_label) + id_layout.setContentsMargins(0, 0, 0, 16) + parent_layout.addLayout(id_layout) + parent_layout.setAlignment(id_layout, Qt.AlignTop) + + def _add_grid_info_area(self, parent_layout): + grid_layout = QGridLayout() + grid_layout.setSpacing(12) + + # 初始化信息条目(6行) + info_items = [ + {"name":"任务单号", "value": "", "api_field": "task_id"}, + {"name": "工程名称", "value": "", "api_field": "project_name"}, + {"name": "配比编号", "value": "", "api_field": "produce_mix_id"}, + {"name": "要料状态", "value": "", "api_field": "flag"}, + {"name": "砼强度", "value": "", "api_field": "beton_grade"}, + {"name": "要料方量", "value": "", "api_field": "adjusted_volume"}, + ] + + self.rows.clear() + self.statusWidgets.clear() # 清空缓存 + + for row, item in enumerate(info_items): + cell_widget = self._create_info_cell(item["name"], item["value"]) + self.rows.append(cell_widget) + grid_layout.addWidget(cell_widget, row, 0) + + self.statusWidgets.append({ + 'api_field': item["api_field"], + 'valueLabel': cell_widget.value # 绑定实际UI控件 + } + ) + + parent_layout.addLayout(grid_layout) + + def _create_info_cell(self, label_text, value_text): + cell_widget = QWidget() + cell_bg = QPixmap("派单任务信息栏1.png") # 正常背景图 + cell_widget.setObjectName("infoCell") + if not cell_bg.isNull(): + cell_widget.setFixedSize(cell_bg.size()) + cell_widget.setStyleSheet( + """ + QWidget { + background-image: url(派单任务信息栏1.png); + background-repeat: no-repeat; + background-position: Center; + } + QWidget:hover { + background-image: url(派单任务信息栏2.png); + } + QWidget QLabel#valueLabel { + color: #9fbfd4; + background: none; + } + """ + ) + + cell_layout = QHBoxLayout(cell_widget) + cell_layout.setContentsMargins(0, 0, 0, 0) + + # 左侧标签 + label = QLabel(label_text) + label.setFixedSize(136, 60) + label_font = QFont() + label_font.setPixelSize(16) + label_font.setLetterSpacing(QFont.AbsoluteSpacing, 2) + label.setFont(label_font) + label.setStyleSheet("background: none;color: #fffffd; font-weight:Bold;") + label.setAlignment(Qt.AlignCenter) + cell_widget.label = label + + # 右侧值标签(设置objectName以便样式选择) + value = QLabel(value_text) + value.setObjectName("valueLabel") + value_font = QFont() + value_font.setPixelSize(20) + value.setFont(value_font) + value.setAlignment(Qt.AlignCenter) + cell_widget.value = value + + cell_layout.addWidget(label) # 左侧的标题标签 + cell_layout.addSpacing(60) + cell_layout.addWidget(value) # 右侧的值标签 + + cell_widget.installEventFilter(self) + return cell_widget + + def eventFilter(self, obj, event): + """ + 实现事件过滤器,动态修改右侧值颜色 + """ + # 只处理父控件(infoCell)的事件 + if obj.objectName() == "infoCell": + # 鼠标进入父控件 → 改#13f0f3 + if event.type() == QEvent.Enter: + if hasattr(obj, "value"): # 确保存在value控件 + obj.value.setStyleSheet("background: none; color: #13f0f3;") + # 鼠标离开父控件 → 恢复默认色 + elif event.type() == QEvent.Leave: + if hasattr(obj, "value"): + obj.value.setStyleSheet("background: none; color: #9fbfd4;") + return super().eventFilter(obj, event) + + def paintEvent(self, event): + if not self.bg_pixmap.isNull(): + painter = QPainter(self) + painter.drawPixmap(self.rect(), self.bg_pixmap) + super().paintEvent(event) + + def _update_ui_from_data(self, data): + """根据TCP获取的数据更新界面状态""" + # 1、更新顶部独立的“对应管片ID” + if "artifact_id" in data: + self.id_value_label.setText(str(data["artifact_id"])) + + # 2、更新网格中的所有字段 + for widget in self.statusWidgets: + api_field = widget['api_field'] + value_label = widget['valueLabel'] + if api_field in data: + new_value = str(data[api_field]) + value_label.setText(new_value) + + # ------------------- 对外修改接口 ------------------- + # row 对应行号(0-6),从0开始 + # -------------------------------------------------- + def set_segment_id(self, new_id): + """修改上方的 对应的管片ID的值""" + if self.id_value_label: + self.id_value_label.setText(str(new_id)) + + def set_row_label(self, row, new_label_text: str): + """修改左侧的显示的标签的文本,如: 创建时间、派单时间等""" + if 0 <= row < len(self.rows): + self.rows[row].label.setText(new_label_text) + + def set_row_value(self, row, new_value_text: str): + """修改右侧的显示的值, 如: 2025年9月9日 9:9:9""" + if 0 <= row < len(self.rows): + self.rows[row].value.setText(new_value_text) + + # ------------------ + # 按钮点击事件 + # ------------------ + def on_error_clicked(self): + """点击“生产异常”:向服务端发送异常指令""" + print("🔘 点击「生产异常」按钮") + self._clear_ui_info() + self._send_tcp_request("production_error") + + def on_cancel_clicked(self): + """点击“生产取消”:向服务端发送取消指令""" + print("🔘 点击「生产取消」按钮") + self._clear_ui_info() + self._send_tcp_request("cancel_feed") + + # -------------------- + # 清空界面信息的通用方法 + # -------------------- + def _clear_ui_info(self): + """清空管片ID和网格信息""" + if self.id_value_label: + self.id_value_label.setText("") + for widget in self.statusWidgets: + widget['valueLabel'].setText("") + print("ℹ️ 界面信息已清空") + + # ------------------ + # TCP客户端核心功能 + # ------------------ + @Slot() + def _on_tcp_connected(self): + """TCP连接成功回调""" + self.is_tcp_connected = True + self.has_connected_once = True + self.reconnect_timer.stop() # 停止重连定时器 + self.reconnect_count = 0 # 重连计数器清零 + self.is_running = True + print(f"TCP连接成功:{self.tcp_server_host}:{self.tcp_server_port}") + + # 连接成功后,向服务器发送“请求初始数据”指令 + self._send_tcp_request("get_initial_data") + + # 更新按钮状态:启用“生产异常”“生产取消” + self.errorButton.setDisabled(False) + self.cancelButton.setDisabled(False) + + @Slot() + def _on_tcp_disconnected(self): + """TCP连接断开回调""" + self.is_tcp_connected = False + self.is_running = False + print(f"TCP连接断开:{self.tcp_server_host}:{self.tcp_server_port}") + + # 启用/禁用按钮 + self.errorButton.setDisabled(True) + self.cancelButton.setDisabled(True) + + # 清空界面 + self._clear_ui_info() + + if not self.reconnect_timer.isActive(): + print(f"连接断开,将在{RECONNECT_INTERVAL / 1000}秒后启动重连...") + self.reconnect_timer.start() + + @Slot() + def _on_tcp_data_received(self): + """TCP数据接收回调(服务器发送数据时触发)""" + tcp_data = self.tcp_socket.readAll().data().decode("utf-8").strip() + print(f"TCP数据接收:{tcp_data}") + + # 解析数据 + try: + status_data = json.loads(tcp_data) + self.latest_json_data = status_data + self._update_ui_from_data(status_data) + except json.JSONDecodeError as e: + print(f"TCP数据解析失败(非JSON格式):{e}, 原始数据:{tcp_data}") + except Exception as e: + print(f"TCP数据处理异常:{e}") + + @Slot(QAbstractSocket.SocketError) + def _on_tcp_error(self, error): + """TCP错误回调""" + if not self.is_tcp_connected: + error_str = self.tcp_socket.errorString() + print(f"TCP错误:{error_str}") + self.is_tcp_connected = False + self.is_running = False + + # 启用/禁用按钮 + self.errorButton.setDisabled(True) + self.cancelButton.setDisabled(True) + + # 首次连接失败时,启动重连定时器 + if not self.reconnect_timer.isActive(): + print(f"将在{RECONNECT_INTERVAL / 1000}秒后启动重连") + self.reconnect_timer.start() + + def _send_tcp_request(self, request_cmd="get_status"): + """向TCP服务器发送请求指令""" + if not self.is_tcp_connected: + print("TCP连接未建立,无法发送请求") + return + + # 构造请求数据 + request_data = json.dumps({ + "cmd": request_cmd, + "erp_id": self.latest_json_data["erp_id"], + "artifact_id": self.latest_json_data["artifact_id"], + "timestamp": self.get_current_time(), + "client_info": "布料系统客户端" + }) + "\n" # 增加换行符作为数据结束标识 + + # 发送请求数据 + self.tcp_socket.write(request_data.encode("utf-8")) + print(f"TCP请求发送:{request_data.strip()}") + + # ------------------ + # 时间相关的通用方法 + # ------------------ + def get_current_time(self): + """获取格式化的当前时间""" + return datetime.now().strftime('%Y-%m-%d %H:%M:%S') + + +# 测试代码 +if __name__ == "__main__": + app = QApplication(sys.argv) + dialog = DispatchDetailsDialog() + dialog.show() + sys.exit(app.exec()) diff --git a/main_window.py b/main_window.py new file mode 100644 index 0000000..038d2e3 --- /dev/null +++ b/main_window.py @@ -0,0 +1,113 @@ +# coding: utf-8 +from typing import List +from PySide6.QtCore import Qt, Signal, QEasingCurve, QUrl, QSize, QTimer, QEvent +from PySide6.QtGui import QIcon, QDesktopServices, QColor, QPalette, QBrush, QImage +from PySide6.QtWidgets import (QApplication, QHBoxLayout, QVBoxLayout, + QFrame, QWidget, QSpacerItem, QSizePolicy, QMainWindow, QPushButton) + +from system_nav_bar import SystemNavBar +from bottom_control_widget import BottomControlWidget +from dispatch_task import DispatchDetailsDialog + + +class MainWindow(QWidget): + def __init__(self): + super().__init__() + self.initWindow() + self.createSubWidgets() # 创建子部件 + self.setupLayout() # 设置布局 + + def initWindow(self): + """初始化窗口基本属性""" + self.setWindowTitle("中交三航主界面") # 设置窗口标题 + # 设置最小尺寸(可根据需求调整) + # 触摸屏尺寸为 1280*800 + self.setMinimumSize(1280, 800) + self.setObjectName("MainWindow") + + # Qt.FramelessWindowHint + self.setWindowFlags(Qt.FramelessWindowHint) # 无边框窗口 + + # 设置主界面背景图片 + try: + self.background_image = QImage("主界面背景.png") + if self.background_image.isNull(): + raise Exception("图片为空,可能路径错误或格式不支持") + # print("图片加载成功") + except Exception as e: + print(f"主界面背景图片加载失败: {e}") + self.background_image = None + return # 加载背景失败 + + self.update_background() + + def createSubWidgets(self): + """创建所有子部件实例""" + self.system_nav_bar = SystemNavBar() # 最上方:系统导航栏 + self.bottom_control_widget = BottomControlWidget() # 最下方: 控制的按钮 (系统诊断、系统中心等) + + # 中间:任务派单 + self.dispatch_dialog = DispatchDetailsDialog(self) + + def setupLayout(self): + """设置垂直布局,从上到下排列部件""" + main_layout = QVBoxLayout(self) # 主布局:垂直布局 + main_layout.setSpacing(0) # 部件间距0px + main_layout.setContentsMargins(0, 0, 0, 0) # 左上右下边距0px + + # 添加最上方的 系统导航栏(包括系统标题、中交三航的logo等) + main_layout.addWidget(self.system_nav_bar, alignment=Qt.AlignTop) + # 添加中间内容区 + main_layout.addWidget(self.dispatch_dialog, alignment=Qt.AlignCenter) + # 添加最下方的 控制按钮控件 + main_layout.addWidget(self.bottom_control_widget, alignment=Qt.AlignBottom) + + # 关闭按钮 + self.system_nav_bar.msg_container.close_btn.clicked.connect(self.close) + # 将布局应用到主窗口 + self.setLayout(main_layout) + + def show_dispatch_dialog(self): + """显示派单详细弹窗(居中显示在主界面)""" + # 计算弹窗居中位置 + main_geometry = self.frameGeometry() + dialog_geometry = self.dispatch_dialog.frameGeometry() + dialog_geometry.moveCenter(main_geometry.center()) + self.dispatch_dialog.move(dialog_geometry.topLeft()) + + # 显示弹窗 + self.dispatch_dialog.show() + + def update_background(self): + """更新主界面背景图片""" + if self.background_image and not self.background_image.isNull(): + palette = self.palette() + # 按当前窗口尺寸缩放图片 + scaled_image = self.background_image.scaled( + self.size(), + Qt.IgnoreAspectRatio, + Qt.SmoothTransformation + ) + palette.setBrush(QPalette.Window, QBrush(scaled_image)) + self.setPalette(palette) + self.setAutoFillBackground(True) + + def resizeEvent(self, e): + """窗口大小变化时的回调""" + super().resizeEvent(e) + self.update_background() # 重新加载背景图片 + + + def keyPressEvent(self, event): + if event.key() == Qt.Key_Escape: # 按下Esc键, 退出界面 + self.close() + super().keyPressEvent(event) + + +if __name__ == "__main__": + import sys + app = QApplication([]) + window = MainWindow() + window.show() # 显示主界面 + # window.showFullScreen() # 全屏显示主界面 + sys.exit(app.exec()) diff --git a/system_nav_bar.py b/system_nav_bar.py new file mode 100644 index 0000000..35ed612 --- /dev/null +++ b/system_nav_bar.py @@ -0,0 +1,141 @@ +from PySide6.QtWidgets import (QWidget, QLabel, QHBoxLayout, + QSpacerItem, QSizePolicy, QPushButton) +from PySide6.QtGui import QPixmap, QFont, QPainter, QIcon +from PySide6.QtCore import Qt, QTimer, QDateTime + +# 自定义消息容器, 显示系统消息 +class MsgContainer(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + self.setFixedSize(770, 24) + + # 加载消息区域背景图 + self.bg_pixmap = QPixmap("系统消息背景.png") # 替换为实际路径 + if self.bg_pixmap.isNull(): + print("警告:系统消息背景.png 加载失败") + + # 消息区域内部布局(喇叭+文本) + msg_layout = QHBoxLayout(self) + msg_layout.setContentsMargins(0, 0, 0, 0) # 调整内边距,避免内容贴边 + msg_layout.setSpacing(3) # 喇叭和文本的间距 + + # 消息喇叭图标 + self.msg_icon = QLabel() + self.msg_icon.setFixedSize(13, 18) + # self.msg_icon.setStyleSheet("background-color:red;") + self.msg_icon.setPixmap(QPixmap("系统消息喇叭.png")) # 替换为实际路径 + msg_layout.addWidget(self.msg_icon, alignment=Qt.AlignVCenter | Qt.AlignLeft) + + # 消息文本 + current_time = QDateTime.currentDateTime().toString("hh:mm:ss") + self.msg_text = QLabel(f"{current_time} 开始启动智能浇筑系统") + self.msg_text.setFixedWidth(740) + # self.msg_text.setStyleSheet("color: white; font-size: 14px;background-color:red;") # 文本样式 + self.msg_text.setStyleSheet("color: white; font-size: 16px;font-weight:Bold;") + self.msg_text.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) + msg_layout.addWidget(self.msg_text) + + # 关闭按钮 + self._create_close_button(msg_layout) + + def _create_close_button(self, parent_layout): + self.close_btn = QPushButton() + self.close_btn.setFixedSize(20, 20) + + close_icon = QPixmap("关闭图标.png") + if not close_icon.isNull(): + self.close_btn.setIcon(QIcon(close_icon)) + + self.close_btn.setStyleSheet( + """ + QPushButton { + background-color: transparent; + border: none; + padding: 0px; + } + QPushButton:hover { + background-color: red; + border-radius: 2px; + } + """ + ) + + parent_layout.addWidget(self.close_btn) + + def paintEvent(self, event): + # 绘制消息区域背景图 + super().paintEvent(event) # 确保子控件正常绘制 + if self.bg_pixmap.isNull(): + return # 图片加载失败则不绘制 + + painter = QPainter(self) + painter.setRenderHint(QPainter.SmoothPixmapTransform) # 缩放平滑 + painter.drawPixmap(self.rect(), self.bg_pixmap) + +class SystemNavBar(QWidget): + def __init__(self, parent=None): + super().__init__(parent) + # 设置尺寸 + self.setFixedSize(1280, 80) + + # 1. 加载背景图 + self.bg_pixmap = QPixmap("系统主界面导航栏.png") # 替换为实际图片路径 + if self.bg_pixmap.isNull(): + print("警告:背景图加载失败,请检查路径!") + + main_layout = QHBoxLayout(self) + main_layout.setContentsMargins(9, 9, 9, 19) + main_layout.setSpacing(100) # 注意:左侧的logo+系统标题的容器 和 系统消息的间隔 + + # 左侧区域:logo + 系统标题 + left_container = QWidget() + left_container.setFixedSize(400, 53) + left_layout = QHBoxLayout(left_container) # 容器内部的水平布局 + left_layout.setContentsMargins(0, 0, 0, 0) # 容器内边距 + left_layout.setSpacing(6) # 设置logo和标题之间的间隙为6px + # 系统logo + self.logo = QLabel() + self.logo.setFixedSize(53, 53) + self.logo.setPixmap(QPixmap("系统logo.png")) + left_layout.addWidget(self.logo, alignment=Qt.AlignTop) + # 系统总标题 + self.title = QLabel() + self.title.setPixmap(QPixmap("系统总标题.png")) + left_layout.addWidget(self.title, alignment=Qt.AlignCenter) + main_layout.addWidget(left_container, alignment=Qt.AlignTop) + + # 中间区域:系统消息(喇叭+文本+背景) + self.msg_container = MsgContainer() + main_layout.addWidget(self.msg_container, alignment=Qt.AlignBottom | Qt.AlignRight) + + # 右侧区域:实时时间 + self.time_label = QLabel() + self.time_label.setStyleSheet("color: white; font-size: 16px;font-weight:Bold;") + main_layout.addWidget(self.time_label, alignment= Qt.AlignTop | Qt.AlignRight) + + # 启动时间更新定时器 + self.timer = QTimer(self) + self.timer.timeout.connect(self.update_time) + self.timer.start(1000) # 每秒更新一次 + + def paintEvent(self, event): + super().paintEvent(event) + + painter = QPainter(self) + painter.setRenderHint(QPainter.SmoothPixmapTransform) # 缩放时平滑 + + painter.drawPixmap(0, 0, self.bg_pixmap) + + def update_time(self): + current_time = QDateTime.currentDateTime().toString("yyyy/MM/dd hh:mm:ss") + self.time_label.setText(current_time) + +# 测试代码 +if __name__ == "__main__": + import sys + from PySide6.QtWidgets import QApplication, QMainWindow + + app = QApplication(sys.argv) + nav_bar = SystemNavBar() + nav_bar.show() + sys.exit(app.exec()) \ No newline at end of file diff --git a/主界面背景.png b/主界面背景.png new file mode 100644 index 0000000000000000000000000000000000000000..dc65b12a12f9a5b9c756fea55721793913efeb90 GIT binary patch literal 2354 zcmbVOeQZ-z6fYlRA21fMf`V+%w>b*fzSp;|ACDC*>tx;5(QS>}h=5(+Tl==Que5Kp zD>$VXA|{A95S)xuCQ>Ka9|A@on+e1a5{P3~q9bA^L|`}|CL06;c<$@kfI*3zr0xCq z-QPLqch0@(7E9&w%#1l15{V?!RBEh-U#&zkS&}vpMvKFl9q^OxEv@%UBvYS3p9zwV zJTJ6giMN%X|Y6vAMrzo0K(}e}txZ&W<$28K_ z##hIE!Ay@k1;I-bL?94Q1PT1Y1z<@#iKOjI7`8yMsOduE$w0Q}ofSc*)*3Y;2>}<(8 z2s0OD*2aLMeu8Hq$1LU$A-XtjVayK^z6g zF?3<0M#B_pD7jjrQ^_f?Lyn^=o;v8JE}j+;N#2OQ!5as4LDgK{g1wg z!~A@s5U}}Jg9FrhV&4%EJb^B3JP+cZDT;d!UG4-NUJNu$K2WrbcQi)Q9nPo|E>*6%K=i1c*`$BnSiTjm+WfnyZU{RyU~G7q1}0irF*DcOmf5|W;px8-imyb@qu?mtqkVR zC!XrODFchnSO{A5fBaW;Y%&~d%GrrlWziZVI_bWH^k@b2pX=`mZ&x$*A~mEPUC~0_ik8jFdUf=(-D&>q9@;S zsEs^~bRNsADo+=^&p`Cu+ZOg-s@yl&9*@~zaNOwnXr{6TW1GdE82+YRbeowYm8wp4KzHO? zQTn4*qTt!TR@_DVV9`rGmpiU3M!}WAdF%RWsJX>b8y)y$6iJoQM44is0a`q?I-vu7 zV@Ec01h@w~vZFM1HV+V)YZC2e(TF*2wTOA3a?cBtWpxiB0Y$sN2R~ngIQuQ_r>CZ& z5!jWlM2W-4uD=AHho#%&F{1CQL%;ozG8v7W2Txz#IUS84_~|I=!zWPxUx?QS=vS7( z^#DuVYI&H{t3N3xYBpBh?R+_Jr}Rw1D-n#auc4&HE0)HI^24Gm%5>= z+|zeU8e<(j61r?o%hp~j^Gn%a@ACL`6Gxb9og%;SM5&ZS-y=;~5yF{{L2*XOzAoRr z-fR{8d1}4u664j)@o%=dZSk+-=l)8VEO%v@oj9)U!c1gJYD@<);T3K0RY{-S^oe4 literal 0 HcmV?d00001 diff --git a/底部背景.png b/底部背景.png new file mode 100644 index 0000000000000000000000000000000000000000..3a66c09eecf9e9bc4d85a3f6f8e7a2a4755c7c56 GIT binary patch literal 14745 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⪙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 literal 0 HcmV?d00001 diff --git a/派单最底部.png b/派单最底部.png new file mode 100644 index 0000000000000000000000000000000000000000..92f9b557ea4a7985aa4eca56dd1dc034e3935c99 GIT binary patch literal 1933 zcmd5-%Wu?19G)OiXed%ELw3S%+jrokp8Q1Wujx%>4{$c+I>UZ(-H$SP@hv~|t9DoCditiM-dFu!Odq0gD8*(G~ zl7u2QC=*R?^y5^a0XTiOpVDxXOW5S?DDkv^e*H~@5%aW*c7TJl$~)1@PR7@FRvY2Y zX6Q2Q>=}5vPn3d~OA7mOH_1ug(*}BpS{KJig9C`%^t6S-AlwMnU{z!sItJE5j4fDk z4bz#Mo1Z@gEo@(>hY71fgE9XY^(bk+qTO zx-P;NvMgO8^n5#!w67=m$*~5X=V2D5G7U&jx@qdzX_z*#9b(yE;CX`a5E=*;wYHy!Is}`fVWEhq7m0%W**uH)#IVGi640#ZwI zNt2M*d{0y47*WIsvmM*D9jrGgt>_k=W4hZ69o=D=SFmmJiW`pQeGzUIB`}s}|5N^} zEK)5YJEWXPMZ*r`K>rSLa5vH1W4M|a#j+e#YEuq7o~Q|zsZnjj{Wa!Q5zjpZe9s87d`^=+n Qi$BcT(yIUS;@8)o0#cVF5dZ)H literal 0 HcmV?d00001 diff --git a/生产取消按钮.png b/生产取消按钮.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff0693a7fbea7662d0518974bc8cf79f607c03b GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^8-Un^gAGV(P1`g9NUijAaSW-L^Y#)WFN31MfenvU zAIj>Us4UUR)XjN4?=Qbg?V-T5giAa=vl=~(4Kmr(&K_7IIm3i`GJOTFpRu{gz^v*e S$@vxNXa-MLKbLh*2~7YA6i$%< literal 0 HcmV?d00001 diff --git a/生产异常按钮.png b/生产异常按钮.png new file mode 100644 index 0000000000000000000000000000000000000000..487422254799142e139028665faa7a140d8e50c3 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^8-UoDgAGWUPj1oxQp-JE978JRyuHN8%b+N5V8i3J z4fUQ8l_ffvx;d}kedc$mJrtOhaEZrfR->n}K_;8p*#k=?XP7Wgrla7lv}cUg&P-i% Td325doy_3r>gTe~DWM4fN$pL# literal 0 HcmV?d00001 diff --git a/系统logo.png b/系统logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e50db7328fdf3b83da3565461df467c43fade506 GIT binary patch literal 2158 zcmV-!2$A=RP)y^5E!yp{GRj9n|tqjzx$cr z`Q6|9-S-qi2!5bA;8|cU5CypX@Pa{BCr}0C0~>*FubEB)?mj$(5FZF3Y~uEj#Ii{U z;dO=ciig!e9&qoE>`hm70C)f}E4y!a_cn%=G^d+U_HZn40#N<`xo#*MFiG<8@}B@K z-Hgj650?Yu2g0J=WhIlh;c5+1kMZ_EEZU(M@Hwn287rW5%>N`BD$h!F$#Wh-I5lP~UVJi`ilB&3B5> zgsKSe_aGrQoTQlpvP5L{%flU=MqdA;mWN(0q`IM<;6NX_-`fiU0(|K**?DhsB@35n zdF>4?Mw6xAz*3fQDkfaf2V3^@Nxp%}Lm?$Ol&Mp~_)nRE1zXB7XQap${*`lphkr4L zgN0}KM`k&t9gsSE2+uw-ug}1J3W+DyXenxjEvsUgF-?OIR_beYSgm$>yx_<=Ufx(r zm>a}SILoZN$H_-QQ3X$Ks-)zkmcOT`^a=QuLt@EFEoYjcJR?Phl~h;XB9&1nRSt7s z<(E?oq^(KBTdhE+YmobsW{jsYBZcx-cyyI^@PXglkV{!76l7fM9fd*;uAa89ucv(0 z>pM`nyP;5CJI$et6iyfu|M58{=B7ChN8!q{0AhT+XZ&J6`vuV zPWR+*n9D~e;B-ax-~g}RP{NBdy$B2#;xtxPb^(boEFws58#>JLIWjUx{v)T$E;`*4 z6zIzf)77kd>-fL}msQr#V1~4(?{^wIexd?{p^cEx(fnq8f!vo6;{Z>4?GU3PG_}aF5%9xj^76hOYl%BQMr3!>@p%0g8T3L z8H<)_*$@0K9zuL<{B}J2xdI+prscDY6u!(nenHDJI4RvM_npt$5g3YB!jF z&jddI@+2$r8Zpu+U!#(%>QnOXmnOi{WDSv;XjCdCw&4Lh^@tJm?kdvHLBKP4a{Sq^ zV_yoOW*`*!Jd~DBM zDwT?flP0m))J06Rfy!^YaQ9cqtHy4%5fJQ)0(VYVv~aKq7Kgy%C6l--A+m447K@Fi z*5;Dg>S*s=y$>mQX}VXc9U(`ev~OwYXd}>D&FHaR-6_r?W5;DK>AU!*po?MysB3I; zzm!8pVBpIw3s9)sc!MUYGk-SeN<0lQ#0#7ZjjqMmyP4$xzS{0 zeNA8WP+>^Q0}o@d5n$9}f0-6)@vrbco8%vq9VCE(%Vymfr_?ZYfeRN-}i5{PA|7rN=H!E*6Zc0;ihta?UAvwfYT=U{py7-!*VOY z3Z;T=Y4JS2tB%9P=dKwun=EpL=I!Mnw=EWPH@Fh3&5qS}?W!s~c9s`*H^jPV_sjU~ z$!HQ|Z~TzBuKMy~wctpFh)K;6kFCrR)jGXnVVXL{(iJ)4Z`%%t^WW9Wi*C>Ua?#RQ zBaiE9TSV&9IbvdJjwmWV--Jt&7tU)ASb^A&wx-Nd%-hqzb;z5!q~L2Z-cWpnYm zyQrrgFHfzra_kv(rpXot~oN3vyMbef$n)Civq&bmTxyAul@9 zKpFG)Rx?gBf(he>%k7|`0QCAcbhY&ZHHG{J-u3;7iy9ps#AqOW;}Ohe3&BBw17-Sx z1iW{kfrkeNP?$c4duO^4Juc?DPq{v7uN1=*L9SDN3ZD!TBoCJYn{ET3n@M6Uz526P zE^yy%3cC-OfAwcC>ESO`A@9qZxZ6ik7<>pk*v;7UVex9kbbncrKIDy&N`oI6U#d-| k%q1m*kEQoGJtM$>0a@j)Og_BNNB{r;07*qoM6N<$g3j6~DF6Tf literal 0 HcmV?d00001 diff --git a/系统主界面导航栏.png b/系统主界面导航栏.png new file mode 100644 index 0000000000000000000000000000000000000000..7db6d8b2ef44ce7e7a48a1a5f6c6ce574611d7df GIT binary patch literal 23632 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 literal 0 HcmV?d00001 diff --git a/系统总标题.png b/系统总标题.png new file mode 100644 index 0000000000000000000000000000000000000000..64f34be3e06c40a65fd53ea4f523cebbfe4850e2 GIT binary patch literal 6262 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 BcfbGu literal 0 HcmV?d00001 diff --git a/详情弹出背景.png b/详情弹出背景.png new file mode 100644 index 0000000000000000000000000000000000000000..7c003c296102c6b712a95145c0c41a34fd28cfd3 GIT binary patch literal 19062 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 literal 0 HcmV?d00001