diff --git a/src/interface.cpp b/src/interface.cpp
index 09e673b831178346ffd11fec6a5d6327ebcb08f9..862c2f1769a1c2f46b9b6b51afa43d6b7365956a 100644
--- a/src/interface.cpp
+++ b/src/interface.cpp
@@ -750,9 +750,12 @@ void MainWindow::play_snake()
 
     on_pushButton_clicked(); // reset la grille
 
+    QWidget::grabKeyboard();
+
     static auto restore = [&]
     {
         ui_update_alphabet(simulation.getAlphabet());
+        QWidget::releaseKeyboard();
         snake_timer.stop();
         on_pushButton_clicked(); // reset la grille
     };
@@ -889,26 +892,26 @@ void MainWindow::closeEvent(QCloseEvent *e)
 
 void MainWindow::keyPressEvent(QKeyEvent *event)
 {
-    if (event->key() == Qt::Key_Q)
+    if (event->key() == Qt::Key_Q || event->key() == Qt::Key_Left)
         m_arrow_key_state[0] = true;
-    if (event->key() == Qt::Key_S)
+    if (event->key() == Qt::Key_S || event->key() == Qt::Key_Down)
         m_arrow_key_state[1] = true;
-    if (event->key() == Qt::Key_D)
+    if (event->key() == Qt::Key_D || event->key() == Qt::Key_Right)
         m_arrow_key_state[2] = true;
-    if (event->key() == Qt::Key_Z)
+    if (event->key() == Qt::Key_Z || event->key() == Qt::Key_Up)
         m_arrow_key_state[3] = true;
     QMainWindow::keyPressEvent(event);
 }
 
 void MainWindow::keyReleaseEvent(QKeyEvent *event)
 {
-    if (event->key() == Qt::Key_Q)
+    if (event->key() == Qt::Key_Q || event->key() == Qt::Key_Left)
         m_arrow_key_state[0] = false;
-    if (event->key() == Qt::Key_S)
+    if (event->key() == Qt::Key_S || event->key() == Qt::Key_Down)
         m_arrow_key_state[1] = false;
-    if (event->key() == Qt::Key_D)
+    if (event->key() == Qt::Key_D || event->key() == Qt::Key_Right)
         m_arrow_key_state[2] = false;
-    if (event->key() == Qt::Key_Z)
+    if (event->key() == Qt::Key_Z || event->key() == Qt::Key_Up)
         m_arrow_key_state[3] = false;
     QMainWindow::keyReleaseEvent(event);
 }