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)