diff --git a/app/main_window.py b/app/main_window.py index d944e11..c3ea035 100644 --- a/app/main_window.py +++ b/app/main_window.py @@ -1,10 +1,11 @@ +from dataclasses import asdict from enum import Enum from typing import Any import logging -from PySide6.QtWidgets import QGridLayout, QHBoxLayout, QMainWindow, QStyle, QToolButton, QWidget, QVBoxLayout, QPushButton, QLabel +from PySide6.QtWidgets import QGridLayout, QHBoxLayout, QMainWindow, QStyle, QToolButton, QWidget, QVBoxLayout, QPushButton, QLabel, QTextEdit from PySide6.QtGui import QIcon, QPixmap -from PySide6.QtCore import Qt, QSize +from PySide6.QtCore import QTimer, Qt, QSize from .video_stream.controller import VideoStreamController, FrameMetrics logger = logging.getLogger(__name__) @@ -79,6 +80,9 @@ class MainWindow(QMainWindow): self.setup_ui() self.video_controller.start() + self.timer = QTimer() + self.timer.timeout.connect(self.update_metrics) + self.timer.start(1000) # Update metrics every second def setup_ui(self): self.central_widget = QWidget() @@ -86,6 +90,14 @@ class MainWindow(QMainWindow): self.central_widget.setStyleSheet("background-color: #001e1e;") self.video_label = QLabel(self.central_widget) + self.video_label.setText("Video Stream") + self.video_label.setAlignment(Qt.AlignmentFlag.AlignCenter) + self.video_label.setStyleSheet("color: white; font-size: 24px; background-color: #001e1e;") + + self.metrics_label = QTextEdit(self.central_widget) + self.metrics_label.setReadOnly(True) + # self.metrics_label.setFixedWidth(300) + self.metrics_label.setStyleSheet("background-color: rgba(20, 20, 20, 0.5); color: white; font-size: 14px; border: none; padding: 8px;") self.toolbar_widget = QWidget(self.central_widget) self.toolbar_widget.setMinimumWidth(400) @@ -133,6 +145,10 @@ class MainWindow(QMainWindow): def resizeEvent(self, event: Any) -> None: super().resizeEvent(event) + self.video_label.setGeometry(self.central_widget.rect()) + + panel_width = min(300, max(280, self.central_widget.width() // 3)) + self.metrics_label.setGeometry(18, 18, panel_width, 500) self.toolbar_widget.adjustSize() toolbar_size = self.toolbar_widget.sizeHint() @@ -203,4 +219,16 @@ class MainWindow(QMainWindow): super().closeEvent(event) def update_frame(self, frame): - self.video_label.setPixmap(QPixmap.fromImage(frame)) \ No newline at end of file + # self.video_label.setPixmap(QPixmap.fromImage(frame)) + pass + + def update_metrics(self, metrics: FrameMetrics): + if metrics is None: + self.metrics_label.setPlainText("No metrics available") + return + metrics_text = "" + + for key, value in asdict( metrics).items(): + metrics_text += f"{key}: {value}\n" + + self.metrics_label.setPlainText(metrics_text) \ No newline at end of file