更新配置文件以支持相机功能,删除旧的YAML配置,修改主窗口UI以适应新功能,添加相机显示和设置的条件逻辑。
This commit is contained in:
parent
6f41403925
commit
5977b29a9c
@ -4,7 +4,8 @@
|
||||
"version": "1.0.0",
|
||||
"features": {
|
||||
"enable_serial_ports": false,
|
||||
"enable_keyboard_listener": false
|
||||
"enable_keyboard_listener": false,
|
||||
"enable_camera": false
|
||||
}
|
||||
},
|
||||
"database": {
|
||||
@ -15,5 +16,11 @@
|
||||
"user": "",
|
||||
"password": "",
|
||||
"name": ""
|
||||
},
|
||||
"camera": {
|
||||
"enabled": false,
|
||||
"default_exposure": 20000,
|
||||
"default_gain": 10,
|
||||
"default_framerate": 30
|
||||
}
|
||||
}
|
||||
@ -1,5 +0,0 @@
|
||||
app:
|
||||
debug: true
|
||||
name: jt-mes-system
|
||||
version: 1.0.0
|
||||
description: 佳腾管理系统
|
||||
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
from PySide6.QtWidgets import (
|
||||
QMainWindow, QWidget, QLabel, QGridLayout, QVBoxLayout, QHBoxLayout,
|
||||
QTableWidget, QTableWidgetItem, QHeaderView, QFrame, QSplitter,
|
||||
QPushButton, QLineEdit, QAbstractItemView
|
||||
QPushButton, QLineEdit, QAbstractItemView, QComboBox
|
||||
)
|
||||
from PySide6.QtGui import QFont, QAction, QBrush, QColor
|
||||
from PySide6.QtCore import Qt
|
||||
@ -81,8 +81,8 @@ class MainWindowUI(QMainWindow):
|
||||
self.project_layout.setContentsMargins(5, 5, 5, 5)
|
||||
|
||||
# 项目表格
|
||||
self.project_table = QTableWidget(4, 5)
|
||||
self.project_table.setHorizontalHeaderLabels(["项目", "用电", "数量", "产量", "开机率"])
|
||||
self.project_table = QTableWidget(4, 4)
|
||||
self.project_table.setHorizontalHeaderLabels(["用电", "数量", "产量", "开机率"])
|
||||
self.project_table.setVerticalHeaderLabels(["当日", "当月", "当年", "累计"])
|
||||
self.project_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||
self.project_table.verticalHeader().setSectionResizeMode(QHeaderView.Stretch)
|
||||
@ -164,11 +164,12 @@ class MainWindowUI(QMainWindow):
|
||||
self.order_layout = QHBoxLayout()
|
||||
self.order_label = QLabel("订单")
|
||||
self.order_label.setFont(QFont("微软雅黑", 12, QFont.Bold))
|
||||
self.order_label.setFixedHeight(30)
|
||||
self.order_label.setFixedHeight(35)
|
||||
self.order_label.setStyleSheet("padding: 0 5px; color: #333333;")
|
||||
|
||||
self.order_edit = QLineEdit()
|
||||
self.order_edit.setReadOnly(True)
|
||||
self.order_edit.setFixedHeight(35)
|
||||
self.order_edit.setReadOnly(False)
|
||||
self.order_edit.setFont(QFont("微软雅黑", 12))
|
||||
self.order_edit.setText("ORD-2025-001") # 设置默认订单号
|
||||
self.order_edit.setStyleSheet("background-color: #f9f9f9; border: 1px solid #cccccc; border-radius: 3px; padding: 2px 5px;")
|
||||
@ -183,7 +184,7 @@ class MainWindowUI(QMainWindow):
|
||||
self.material_frame = QFrame()
|
||||
self.material_frame.setFrameShape(QFrame.StyledPanel)
|
||||
self.material_frame.setLineWidth(1)
|
||||
self.material_frame.setFixedHeight(300) # 增加高度以匹配图片
|
||||
self.material_frame.setFixedHeight(380) # 增加高度以匹配图片
|
||||
self.material_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }")
|
||||
self.material_layout = QHBoxLayout(self.material_frame)
|
||||
self.material_layout.setContentsMargins(0, 0, 0, 0)
|
||||
@ -221,10 +222,20 @@ class MainWindowUI(QMainWindow):
|
||||
self.tray_label.setStyleSheet("background-color: #e0e0e0; border-right: 1px solid #cccccc; font-weight: bold;")
|
||||
self.tray_layout.addWidget(self.tray_label)
|
||||
|
||||
self.tray_edit = QLineEdit()
|
||||
self.tray_edit.setReadOnly(True)
|
||||
self.tray_edit = QComboBox()
|
||||
self.tray_edit.setStyleSheet("border: none; padding: 5px 10px;")
|
||||
self.tray_edit.setFont(QFont("微软雅黑", 12))
|
||||
self.tray_edit.setEditable(True) # 允许手动输入
|
||||
self.tray_edit.setInsertPolicy(QComboBox.NoInsert) # 不自动插入用户输入到列表中
|
||||
self.tray_edit.setMaxVisibleItems(10) # 设置下拉框最多显示10个项目
|
||||
self.tray_edit.completer().setCaseSensitivity(Qt.CaseInsensitive) # 设置补全不区分大小写
|
||||
self.tray_edit.completer().setFilterMode(Qt.MatchContains) # 设置模糊匹配模式
|
||||
self.tray_edit.addItem("托盘1")
|
||||
self.tray_edit.addItem("托盘2")
|
||||
self.tray_edit.addItem("托盘3")
|
||||
self.tray_edit.addItem("托盘4")
|
||||
self.tray_edit.addItem("托盘5")
|
||||
self.tray_edit.addItem("托盘6")
|
||||
self.tray_layout.addWidget(self.tray_edit)
|
||||
|
||||
self.left_layout.addWidget(self.tray_frame)
|
||||
@ -233,7 +244,7 @@ class MainWindowUI(QMainWindow):
|
||||
self.output_frame = QFrame()
|
||||
self.output_frame.setFrameShape(QFrame.StyledPanel)
|
||||
self.output_frame.setLineWidth(1)
|
||||
self.output_frame.setFixedHeight(200) # 增加高度以匹配图片
|
||||
self.output_frame.setFixedHeight(150) # 增加高度以匹配图片
|
||||
self.output_frame.setStyleSheet("QFrame { background-color: #f8f8f8; }")
|
||||
self.output_layout = QHBoxLayout(self.output_frame)
|
||||
self.output_layout.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,7 @@
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
# 导入PySide6
|
||||
@ -31,10 +32,21 @@ class MainWindow(MainWindowUI):
|
||||
if user_name and corp_name:
|
||||
self.setWindowTitle(f"腾智微丝产线包装系统 - {user_name} ({corp_name})")
|
||||
|
||||
# 加载配置文件
|
||||
self.config = self.load_config()
|
||||
self.camera_enabled = self.config.get('camera', {}).get('enabled', False)
|
||||
|
||||
# # 创建相机显示组件并添加到上料区
|
||||
# self.camera_display = CameraDisplayWidget()
|
||||
# self.material_content_layout.addWidget(self.camera_display)
|
||||
# 只有在相机启用时创建相机显示组件
|
||||
if self.camera_enabled:
|
||||
# 创建相机显示组件并添加到上料区
|
||||
self.camera_display = CameraDisplayWidget()
|
||||
self.material_content_layout.addWidget(self.camera_display)
|
||||
else:
|
||||
# 在上料区添加占位标签
|
||||
self.material_placeholder = QLabel("相机功能已禁用")
|
||||
self.material_placeholder.setAlignment(Qt.AlignCenter)
|
||||
self.material_placeholder.setStyleSheet("color: #888888; background-color: #f0f0f0;")
|
||||
self.material_content_layout.addWidget(self.material_placeholder)
|
||||
|
||||
# 为下料区添加占位标签,确保它保持为空
|
||||
self.output_placeholder = QLabel("下料区 - 暂无内容")
|
||||
@ -54,7 +66,7 @@ class MainWindow(MainWindowUI):
|
||||
self.setCentralWidget(self.stacked_widget)
|
||||
|
||||
# 连接信号和槽
|
||||
# self.connect_signals()
|
||||
self.connect_signals()
|
||||
|
||||
# 默认显示主页面
|
||||
self.stacked_widget.setCurrentIndex(0)
|
||||
@ -67,6 +79,18 @@ class MainWindow(MainWindowUI):
|
||||
|
||||
logging.info(f"主窗口已创建,用户: {user_name}")
|
||||
|
||||
def load_config(self):
|
||||
"""加载配置文件"""
|
||||
config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "config", "app_config.json")
|
||||
try:
|
||||
with open(config_path, 'r', encoding='utf-8') as f:
|
||||
config = json.load(f)
|
||||
logging.info(f"已加载配置文件: {config_path}")
|
||||
return config
|
||||
except Exception as e:
|
||||
logging.error(f"加载配置文件失败: {e}")
|
||||
return {}
|
||||
|
||||
def connect_signals(self):
|
||||
# 连接菜单动作
|
||||
self.main_action.triggered.connect(self.show_main_page)
|
||||
@ -78,14 +102,15 @@ class MainWindow(MainWindowUI):
|
||||
self.start_button.clicked.connect(self.handle_start)
|
||||
self.stop_button.clicked.connect(self.handle_stop)
|
||||
|
||||
# 连接相机显示组件信号
|
||||
# 只有在相机启用时连接相机信号
|
||||
if self.camera_enabled and hasattr(self, 'camera_display'):
|
||||
self.camera_display.signal_camera_status.connect(self.handle_camera_status)
|
||||
|
||||
def initialize_data(self):
|
||||
"""初始化界面数据"""
|
||||
# 设置订单和批号
|
||||
self.order_edit.setText("ORD-2025-001")
|
||||
self.tray_edit.setText("BAT-2025-001")
|
||||
self.tray_edit.setCurrentText("托盘1")
|
||||
|
||||
# 初始化项目表格数据示例
|
||||
project_data = [
|
||||
@ -96,8 +121,8 @@ class MainWindow(MainWindowUI):
|
||||
]
|
||||
|
||||
for row in range(4):
|
||||
for col in range(1, 5): # 从第2列开始(跳过项目列)
|
||||
item = QTableWidgetItem(project_data[row][col-1])
|
||||
for col in range(0, 4): # 从第2列开始(跳过项目列)
|
||||
item = QTableWidgetItem(project_data[row][col])
|
||||
# item.setTextAlignment(Qt.AlignCenter) # 设置文本居中对齐
|
||||
self.project_table.setItem(row, col, item)
|
||||
|
||||
@ -112,6 +137,8 @@ class MainWindow(MainWindowUI):
|
||||
def show_main_page(self):
|
||||
self.stacked_widget.setCurrentWidget(self.central_widget)
|
||||
|
||||
# 只有在相机启用时处理相机显示
|
||||
if self.camera_enabled and hasattr(self, 'camera_display'):
|
||||
# 如果相机已连接,直接开始显示相机画面
|
||||
if self.camera_display.camera_manager.isOpen:
|
||||
if not self.camera_display.camera_manager.isGrabbing:
|
||||
@ -120,6 +147,8 @@ class MainWindow(MainWindowUI):
|
||||
logging.info("显示主页面")
|
||||
|
||||
def show_settings_page(self):
|
||||
# 只有在相机启用时才创建相机设置组件
|
||||
if self.camera_enabled:
|
||||
# 延迟创建相机设置组件
|
||||
if self.camera_settings is None:
|
||||
self.camera_settings = CameraSettingsWidget()
|
||||
@ -132,16 +161,16 @@ class MainWindow(MainWindowUI):
|
||||
|
||||
# 切换到设置页面
|
||||
self.stacked_widget.setCurrentWidget(self.camera_settings)
|
||||
else:
|
||||
# 如果相机未启用,显示提示信息
|
||||
QMessageBox.information(self, "设置", "相机功能已在配置文件中禁用,无法打开相机设置页面。")
|
||||
|
||||
logging.info("显示设置页面")
|
||||
|
||||
def handle_input(self):
|
||||
"""处理上料按钮点击事件"""
|
||||
logging.info("上料按钮被点击")
|
||||
|
||||
# 如果相机已经配置,则开始显示
|
||||
if self.camera_display.camera_manager.isOpen and not self.camera_display.camera_manager.isGrabbing:
|
||||
self.camera_display.start_display()
|
||||
|
||||
QMessageBox.information(self, "操作提示", "开始上料操作")
|
||||
# 这里添加上料相关的业务逻辑
|
||||
|
||||
@ -155,6 +184,8 @@ class MainWindow(MainWindowUI):
|
||||
"""处理开始按钮点击事件"""
|
||||
logging.info("开始按钮被点击")
|
||||
|
||||
# 只有在相机启用时处理相机显示
|
||||
if self.camera_enabled and hasattr(self, 'camera_display'):
|
||||
# 开始显示相机画面
|
||||
if self.camera_display.camera_manager.isOpen:
|
||||
self.camera_display.start_display()
|
||||
@ -166,6 +197,8 @@ class MainWindow(MainWindowUI):
|
||||
"""处理暂停按钮点击事件"""
|
||||
logging.info("暂停按钮被点击")
|
||||
|
||||
# 只有在相机启用时处理相机显示
|
||||
if self.camera_enabled and hasattr(self, 'camera_display'):
|
||||
# 停止显示相机画面
|
||||
self.camera_display.stop_display()
|
||||
|
||||
@ -206,6 +239,8 @@ class MainWindow(MainWindowUI):
|
||||
|
||||
def closeEvent(self, event):
|
||||
"""窗口关闭事件"""
|
||||
# 只有在相机启用时处理相机关闭
|
||||
if self.camera_enabled and hasattr(self, 'camera_display'):
|
||||
# 停止相机显示
|
||||
self.camera_display.stop_display()
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user