diff --git a/TP4/src/model/Key.py b/TP4/src/model/Key.py
index 7519fec550ffc7313e453ee63d5303388c92547d..885b980032215a3dc6c4e6d12cf22bdda1faf561 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 093d6dfd76d2d35c140b2a3baebf9345c5ba714d..4920168863ce39c582af563c37df603daa6adb88 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 5c8d08125a7ed1973257e03aa2a4eae0866a9d4b..c89b24b23fa8c13f4b6bd48b984445830a197d69 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)