Files
Table-Python/source/UI/CameraSetupWidget.py
2026-04-28 12:14:58 +02:00

68 lines
2.1 KiB
Python

import cv2, numpy as np
from Tbd.helper import CameraObject
from PySide6.QtCore import Qt, QTimer, QSize
from PySide6.QtGui import QImage, QPixmap
from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QSizePolicy, QHBoxLayout, QLineEdit, QPushButton
from typing import List
from PySide6.QtWidgets import QScrollArea, QFrame
class CameraSetupWidget(QWidget):
def __init__(self, cameraObject: CameraObject):
super().__init__()
self.cameraObject = cameraObject
self.mainLayout = QHBoxLayout(self)
self.frame_preview_widget = QLabel()
self.preview_max_size = QSize(800, 600)
self.frame_preview_widget.setMaximumSize(self.preview_max_size)
self.camerOptionsLayout = QVBoxLayout()
self.start_preview_button = QPushButton("Start")
self.stop_preview_button = QPushButton("Stop")
self.camerOptionsLayout.addWidget(self.start_preview_button)
self.camerOptionsLayout.addWidget(self.stop_preview_button)
self.mainLayout.addLayout(self.camerOptionsLayout)
self.mainLayout.addWidget(self.frame_preview_widget)
self.start_preview_button.clicked.connect(self._start_camera_preview)
self.stop_preview_button.clicked.connect(self._stop_camera_preview)
self.frame_update_timer = QTimer(self)
self.frame_update_timer.timeout.connect(self._update_frame)
def _start_camera_preview(self):
self.frame_update_timer.start(30)
def _stop_camera_preview(self):
self.frame_update_timer.stop()
def _update_frame(self):
ok, frame = self.cameraObject.capture.read()
if not ok or frame is None:
return
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
height, width, ch = frame_rgb.shape
qimg = QImage(frame_rgb.data, width, height, ch * width, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qimg)
pixmap = pixmap.scaled(
self.frame_preview_widget.maximumSize(),
Qt.KeepAspectRatio,
Qt.SmoothTransformation,
)
self.frame_preview_widget.setPixmap(pixmap)