posedet/qt_widgets.py
2025-06-22 16:51:48 +08:00

74 lines
3.0 KiB
Python

import os
import tempfile
import cv2
import numpy as np
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
QPushButton, QComboBox, QRadioButton, QButtonGroup,
QFileDialog, QTextEdit, QProgressBar, QFrame,
QScrollArea, QGroupBox, QGridLayout, QSlider,
QSpinBox, QCheckBox, QTabWidget, QSplitter)
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer, QMutex, QMutexLocker
from PyQt5.QtGui import QPixmap, QImage, QPalette, QFont, QMovie
from motion_app_qt import MotionComparisonAppQt
from video_display_widget import VideoDisplayWidget
from similarity_display_widget import SimilarityDisplayWidget
from control_panel_widget import ControlPanelWidget
class MainWidget(QWidget):
def __init__(self):
super().__init__()
self.motion_app = MotionComparisonAppQt()
self.setup_ui()
def setup_ui(self):
# Main layout - horizontal splitter
main_splitter = QSplitter(Qt.Horizontal)
# Control panel (sidebar) - fixed width
self.control_panel = ControlPanelWidget(self.motion_app)
self.control_panel.setMinimumWidth(300)
self.control_panel.setMaximumWidth(350)
# Main content area
content_widget = QWidget()
content_layout = QVBoxLayout(content_widget)
# Video display area - priority for real-time performance
self.video_display = VideoDisplayWidget(self.motion_app)
content_layout.addWidget(self.video_display, stretch=2)
# Similarity analysis area - can have latency
self.similarity_display = SimilarityDisplayWidget(self.motion_app)
content_layout.addWidget(self.similarity_display, stretch=1)
# Add widgets to splitter
main_splitter.addWidget(self.control_panel)
main_splitter.addWidget(content_widget)
main_splitter.setStretchFactor(0, 0) # Control panel fixed
main_splitter.setStretchFactor(1, 1) # Content area expandable
# Main layout
main_layout = QHBoxLayout(self)
main_layout.addWidget(main_splitter)
main_layout.setContentsMargins(0, 0, 0, 0)
# Connect signals
self.setup_connections()
def setup_connections(self):
# Connect control panel signals to main app
self.control_panel.video_selected.connect(self.video_display.load_video)
self.control_panel.start_comparison.connect(self.start_comparison)
self.control_panel.stop_comparison.connect(self.stop_comparison)
self.control_panel.initialize_system.connect(self.motion_app.initialize_all)
def start_comparison(self, video_path):
self.video_display.start_comparison(video_path)
self.similarity_display.start_analysis()
def stop_comparison(self):
self.video_display.stop_comparison()
self.similarity_display.stop_analysis()
self.motion_app.cleanup()