From 72f4071de7ddc739d4cef6c7e022f848996c1de5 Mon Sep 17 00:00:00 2001 From: Lucas Philippe <lucasphilippe@MacBook-Air-de-Lucas.local> Date: Thu, 22 Feb 2024 11:48:25 +0100 Subject: [PATCH] =?UTF-8?q?Saisie=20caract=C3=A8re=20par=20caract=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TP4/src/model/Key.py | 4 +++ TP4/src/widgets/EditeurWindow.py | 6 ++++- TP4/src/widgets/KeyboardWidget.py | 43 +++++++++++++++++++++++++++---- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/TP4/src/model/Key.py b/TP4/src/model/Key.py index 7519fec..885b980 100644 --- a/TP4/src/model/Key.py +++ b/TP4/src/model/Key.py @@ -7,3 +7,7 @@ class Key: self.position = QPoint(self.x, self.y) self.symbol = symbol self.rect = QRect(self.x, self.y, width * (keyWidth + keySpacing) - keySpacing, keyHeight) + + + def isOver(self, point): + return self.rect.contains(point) \ No newline at end of file diff --git a/TP4/src/widgets/EditeurWindow.py b/TP4/src/widgets/EditeurWindow.py index 093d6df..4920168 100644 --- a/TP4/src/widgets/EditeurWindow.py +++ b/TP4/src/widgets/EditeurWindow.py @@ -1,5 +1,6 @@ from PyQt5.QtWidgets import QWidget, QLineEdit, QVBoxLayout from src.widgets.KeyboardWidget import KeyboardWidget +from PySide6.QtCore import Slot class EditeurWindow(QWidget): def __init__(self): @@ -14,4 +15,7 @@ class EditeurWindow(QWidget): layout = QVBoxLayout() layout.addWidget(line_edit) layout.addWidget(keyboard_widget) - self.setLayout(layout) \ No newline at end of file + self.setLayout(layout) + + # Connexion su dignal + keyboard_widget.newletter.connect(line_edit.insert) diff --git a/TP4/src/widgets/KeyboardWidget.py b/TP4/src/widgets/KeyboardWidget.py index 5c8d081..c89b24b 100644 --- a/TP4/src/widgets/KeyboardWidget.py +++ b/TP4/src/widgets/KeyboardWidget.py @@ -1,13 +1,17 @@ import json -from PyQt5.QtCore import Qt, QSize -from PyQt5.QtGui import QPainter +from PyQt5.QtCore import Qt, QSize, QPoint, pyqtSignal +from PyQt5.QtGui import QPainter, QColor from PyQt5.QtWidgets import QWidget from documents.FileDefinition import LAYOUT_FILE from src.model.Key import Key +from PySide6.QtCore import Signal +DEFAULT_COLOR = QColor("white") +OVER_COLOR = QColor("gray") class KeyboardWidget(QWidget): + newletter = pyqtSignal(str) def __init__(self): super().__init__() self.keys = [] @@ -18,8 +22,12 @@ class KeyboardWidget(QWidget): self.keyboardWidth = 0 self.keyboardHeight = 0 + self.mousePos = QPoint(0,0) + self.pressedKey = None + # Initialiser le clavier self.loadLayoutJson() + self.setMouseTracking(True) self.update() def loadLayoutJson(self): @@ -52,11 +60,36 @@ class KeyboardWidget(QWidget): def paintEvent(self, event): self.sizeHint() - painter = QPainter(self) for key in self.keys: - painter.drawRect(key.rect) - painter.drawText(key.rect, Qt.AlignCenter, key.symbol) + if key.isOver(self.mousePos): + self.paintKey(key, OVER_COLOR) + else: + self.paintKey(key, DEFAULT_COLOR) def sizeHint(self): return QSize(self.keyboardWidth, self.keyboardHeight) + def mouseMoveEvent(self, event): + self.mousePos = event.pos() + self.update() + + def mousePressEvent(self, event): + for key in self.keys: + if key.isOver(self.mousePos): + self.pressedKey = key + return + def mouseReleaseEvent(self, event): + for key in self.keys: + if key.isOver(self.mousePos): + if key == self.pressedKey: + self.pressedKey = None + self.newletter.emit(key.symbol) + return + else: + return + + def paintKey(self, key, color): + painter = QPainter(self) + painter.setBrush(color) + painter.drawRect(key.rect) + painter.drawText(key.rect, Qt.AlignCenter, key.symbol) -- GitLab