detect-gui/widget/device.py

134 lines
4.7 KiB
Python
Raw Permalink Normal View History

2024-11-21 11:39:52 +08:00
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)