from PySide6.QtWidgets import ( QGraphicsScene ) from PySide6.QtGui import QBrush, QColor from PySide6.QtCore import QTimer, QRectF, QSize import random from app.ui.key import KeyItem class KeyboardScene(QGraphicsScene): def __init__(self): super().__init__() self.keys = {} self.letter_rows = [ "QWERTYUIOP", "ASDFGHJKL", "ZXCVBNM", ] self.space_key = KeyItem("Space") self.addItem(self.space_key) self.timer = QTimer() self.timer.timeout.connect(self.simulate_prediction) self.timer.start(2000) self.create_keys() def create_keys(self): for row in self.letter_rows: for char in row: key = KeyItem(char) self.addItem(key) self.keys[char] = key def layout_keys(self, view_size: QSize): view_width = view_size.width() view_height = view_size.height() padding = 10.0 spacing = 6.0 max_scale = 2.0 rows = self.letter_rows + [" "] row_count = len(rows) max_keys_in_row = max(len(row) for row in rows) total_spacing_x = (max_keys_in_row - 1) * spacing total_spacing_y = (row_count - 1) * spacing available_width = view_width - 2 * padding - total_spacing_x available_height = view_height - 2 * padding - total_spacing_y key_width = available_width / max_keys_in_row key_height = available_height / row_count y = padding for row in self.letter_rows: x = padding for char in row: key = self.keys[char] key.set_geometry(x, y, key_width, key_height) x += key_width + spacing y += key_height + spacing # Space key layout space_width = key_width * 7 + spacing * 6 self.space_key.set_geometry(padding, y, space_width, key_height) self.setSceneRect(QRectF(0, 0, view_width, view_height)) def simulate_prediction(self): most_likely = random.choice(list(self.keys.keys())) print(f"[Prediction] Most likely: {most_likely}") for char, key in self.keys.items(): if char == most_likely: key.set_scale_factor(1.8) key.setBrush(QBrush(QColor("orange"))) else: key.set_scale_factor(1.0) key.setBrush(QBrush(QColor("lightgray")))