79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
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"))) |