mirror of
http://git.xinwangdao.com/cnnc-embedded-parts-detect/detect-gui.git
synced 2025-06-24 21:14:12 +08:00
134 lines
4.7 KiB
Python
134 lines
4.7 KiB
Python
|
import logging
|
||
|
|
||
|
from PyQt5.QtWidgets import (
|
||
|
QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QHBoxLayout, QFrame
|
||
|
)
|
||
|
from PyQt5.QtCore import Qt
|
||
|
from PyQt5.QtGui import QColor
|
||
|
|
||
|
from core.context import AppContext
|
||
|
|
||
|
|
||
|
# 相机组件
|
||
|
class CameraWidget(QWidget):
|
||
|
def __init__(self):
|
||
|
super().__init__()
|
||
|
self.ratio = AppContext.get_ratio()
|
||
|
|
||
|
# 设备信息部分
|
||
|
device_info = QWidget()
|
||
|
device_info.setFixedHeight(self.ratio * 80)
|
||
|
device_layout = QHBoxLayout()
|
||
|
self.serial_label = QLabel("高清相机: DH51215AAK00001")
|
||
|
self.status_label = QLabel("状态: 未连接")
|
||
|
self.power_button = QPushButton("通电")
|
||
|
self.connect_button = QPushButton("连接")
|
||
|
self.capture_button = QPushButton("拍照")
|
||
|
self.power_button.setFixedHeight(self.ratio * 42)
|
||
|
self.power_button.setFixedWidth(self.ratio * 64)
|
||
|
self.connect_button.setFixedHeight(self.ratio * 42)
|
||
|
self.connect_button.setFixedWidth(self.ratio * 64)
|
||
|
self.capture_button.setFixedHeight(self.ratio * 42)
|
||
|
self.capture_button.setFixedWidth(self.ratio * 64)
|
||
|
device_layout.addWidget(self.serial_label)
|
||
|
device_layout.addWidget(self.status_label)
|
||
|
device_layout.addWidget(self.power_button)
|
||
|
device_layout.addWidget(self.connect_button)
|
||
|
device_layout.addWidget(self.capture_button)
|
||
|
device_info.setLayout(device_layout)
|
||
|
|
||
|
# 事件
|
||
|
self.power_button.clicked.connect(self.on_power)
|
||
|
self.on_power() # init
|
||
|
|
||
|
# 信号
|
||
|
AppContext.get_edge_context().get_component('gpio').signals.gpio_camera_opened.connect(
|
||
|
lambda pin: self.power_button.setText("断电"))
|
||
|
AppContext.get_edge_context().get_component('gpio').signals.gpio_camera_closed.connect(
|
||
|
lambda pin: self.power_button.setText("通电"))
|
||
|
|
||
|
# 数据展示部分
|
||
|
data_display = QFrame()
|
||
|
data_display.setStyleSheet("background-color: white;")
|
||
|
data_display.setFrameShape(QFrame.StyledPanel)
|
||
|
|
||
|
# 垂直布局
|
||
|
layout = QVBoxLayout()
|
||
|
layout.addWidget(device_info)
|
||
|
layout.addWidget(data_display)
|
||
|
self.setLayout(layout)
|
||
|
|
||
|
def on_power(self):
|
||
|
gpio_manager = AppContext.get_edge_context().get_component('gpio')
|
||
|
if gpio_manager.camera_value == 0:
|
||
|
gpio_manager.close_camera()
|
||
|
else:
|
||
|
gpio_manager.open_camera()
|
||
|
|
||
|
|
||
|
# 雷达组件
|
||
|
class LidarWidget(QWidget):
|
||
|
def __init__(self):
|
||
|
super().__init__()
|
||
|
self.ratio = AppContext.get_ratio()
|
||
|
|
||
|
# 设备信息部分
|
||
|
device_info = QWidget()
|
||
|
device_info.setFixedHeight(self.ratio * 80)
|
||
|
device_layout = QHBoxLayout()
|
||
|
self.serial_label = QLabel("激光雷达: 3GGDLCM00201561")
|
||
|
self.status_label = QLabel("状态: 未连接")
|
||
|
self.power_button = QPushButton("通电")
|
||
|
self.connect_button = QPushButton("启动")
|
||
|
self.power_button.setFixedHeight(self.ratio * 42)
|
||
|
self.power_button.setFixedWidth(self.ratio * 64)
|
||
|
self.connect_button.setFixedHeight(self.ratio * 42)
|
||
|
self.connect_button.setFixedWidth(self.ratio * 64)
|
||
|
device_layout.addWidget(self.serial_label)
|
||
|
device_layout.addWidget(self.status_label)
|
||
|
device_layout.addWidget(self.power_button)
|
||
|
device_layout.addWidget(self.connect_button)
|
||
|
device_info.setLayout(device_layout)
|
||
|
|
||
|
# 事件
|
||
|
self.power_button.clicked.connect(self.on_power)
|
||
|
self.on_power() # init
|
||
|
|
||
|
# 信号
|
||
|
AppContext.get_edge_context().get_component('gpio').signals.gpio_lidar_opened.connect(
|
||
|
lambda pin: self.power_button.setText("断电"))
|
||
|
AppContext.get_edge_context().get_component('gpio').signals.gpio_lidar_closed.connect(
|
||
|
lambda pin: self.power_button.setText("通电"))
|
||
|
|
||
|
# 数据展示部分
|
||
|
data_display = QFrame()
|
||
|
data_display.setStyleSheet("background-color: white;")
|
||
|
data_display.setFrameShape(QFrame.StyledPanel)
|
||
|
|
||
|
# 垂直布局
|
||
|
layout = QVBoxLayout()
|
||
|
layout.addWidget(device_info)
|
||
|
layout.addWidget(data_display)
|
||
|
self.setLayout(layout)
|
||
|
|
||
|
def on_power(self):
|
||
|
gpio_manager = AppContext.get_edge_context().get_component('gpio')
|
||
|
if gpio_manager.lidar_value == 0:
|
||
|
gpio_manager.close_lidar()
|
||
|
else:
|
||
|
gpio_manager.open_lidar()
|
||
|
|
||
|
|
||
|
class DeviceWidget(QWidget):
|
||
|
def __init__(self):
|
||
|
super().__init__()
|
||
|
|
||
|
layout = QHBoxLayout()
|
||
|
self.camera_widget = CameraWidget()
|
||
|
self.lidar_widget = LidarWidget()
|
||
|
|
||
|
layout.addWidget(self.camera_widget)
|
||
|
layout.addWidget(self.lidar_widget)
|
||
|
|
||
|
self.setLayout(layout)
|