Commit for Gitea

This commit is contained in:
DuOtto
2026-04-28 12:14:58 +02:00
parent 225ecc2e17
commit a12182baa2
116 changed files with 2630 additions and 381 deletions
+164
View File
@@ -0,0 +1,164 @@
import cv2, numpy as np
import sys
import os
import json
from pathlib import Path
from Tbd.helper import default_profile, CameraObject
from UI.SetupPageWidget import SetupPage
from UI.HomePageWidget import HomeWindow
from UI.GameWindow import GameWindow
from UI.UILogger import UILogger
from Tbd.TrackingController import TrackingController
from PySide6.QtCore import Qt, QTimer
from PySide6.QtGui import QImage, QPixmap
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
QStackedWidget,
QMessageBox,
QPlainTextEdit
)
from PySide6.QtWidgets import QLineEdit
from PySide6.QtGui import QIntValidator
from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QPushButton, QHBoxLayout, QSizePolicy
from typing import List
CONFIG_PATH = Path("config/profile_default.json")
class MainWindow(QMainWindow):
"""
Main control window: left sidebar + right content area.
"""
cameraList = []
def __init__(self):
super().__init__()
self.P_mats = {}
self.setWindowTitle("Gaming Table Control")
self.resize(1200, 1200)
# Central root widget
root = QWidget()
self.setCentralWidget(root)
self.main_layout = QVBoxLayout(root)
self.main_interaction_layout = QHBoxLayout()
# Create Logger
self.console = QPlainTextEdit()
self.logger = UILogger(self.console)
# ---------- Sidebar ----------
self.sidebar = QVBoxLayout()
self.btn_home = QPushButton("Home")
self.btn_start = QPushButton("Start Game")
self.btn_stop = QPushButton("Stop Game")
self.btn_setup = QPushButton("Setup Cameras")
self.btn_exit = QPushButton("Exit")
for btn in [self.btn_home, self.btn_start, self.btn_stop, self.btn_setup, self.btn_exit]:
btn.setMinimumHeight(40)
self.sidebar.addWidget(btn)
self.sidebar.addStretch(1) # push buttons to top
# ---------- Content area (stack) ----------
self.stack = QStackedWidget()
# Home page
home_page = QWidget()
self.homeWidget = HomeWindow(
cameraList=self.cameraList,
on_cameraList_changed=self.on_cameraList_changed,
P_mats=self.P_mats,
logger=self.logger
)
home_layout = QVBoxLayout(home_page)
home_label = QLabel("Welcome to the Gaming Table Control")
home_label.setAlignment(Qt.AlignCenter)
home_layout.addWidget(home_label)
home_layout.addWidget(self.homeWidget)
# Setup page
self.setup_page = SetupPage(
cameraList=self.cameraList,
on_cameraList_changed=self.on_cameraList_changed,
logger=self.logger
)
# Options page (placeholder)
stop_page = QWidget()
stop_layout = QVBoxLayout(stop_page)
stop_label = QLabel("The game was stopped")
stop_label.setAlignment(Qt.AlignCenter)
stop_layout.addWidget(stop_label)
# Add pages to stack
self.page_home_index = self.stack.addWidget(home_page)
self.page_setup_index = self.stack.addWidget(self.setup_page)
self.page_stop_index = self.stack.addWidget(stop_page)
# ---------- Assemble layout ----------
self.main_interaction_layout.addLayout(self.sidebar) # left side
self.main_interaction_layout.addWidget(self.stack, 1) # right side grows
self.main_layout.addLayout(self.main_interaction_layout)
self.main_layout.addWidget(self.console)
# ---------- Connections ----------
self.btn_home.clicked.connect(self.show_home)
self.btn_setup.clicked.connect(self.show_setup)
self.btn_stop.clicked.connect(self.show_stop)
self.btn_start.clicked.connect(self.start_game)
self.btn_exit.clicked.connect(self.close)
self.game_window = None
# --------------------
def on_cameraList_changed(self):
self.homeWidget.updateCameras()
self.logger.log("Camera List changed")
for camera in self.cameraList:
self.logger.log(str(camera.index))
def show_home(self):
self.stack.setCurrentIndex(self.page_home_index)
def show_setup(self):
self.stack.setCurrentIndex(self.page_setup_index)
def show_stop(self):
self.stack.setCurrentIndex(self.page_stop_index)
if(self.tracking) is not None:
self.tracking.stop()
def start_game(self):
self.tracking = TrackingController(
cameraList=self.cameraList,
P_mats=self.P_mats,
logger=self.logger,
tick_ms=30
)
self.tracking.start()
def main():
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()