From 1bae9069a0464ba059ec6c201f62b8e5bb857c2f Mon Sep 17 00:00:00 2001 From: Sebastian Lohff Date: Mon, 18 Nov 2013 18:33:43 +0100 Subject: [PATCH] Focus-moving on board works --- game.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/game.py b/game.py index e51e17e..b94a1cf 100644 --- a/game.py +++ b/game.py @@ -42,6 +42,7 @@ class SeopardyGame(QtGui.QWidget): b.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) b.setAutoDefault(False) b.setStyleSheet("QPushButton { font-size: 60px; }") + b.installEventFilter(FocusKeyGrabber(i+1, j+1, self)) b.clicked.connect(lambda sec=sec, j=j: self.go_to_question(sec, j+1)) board.addWidget(b, j+1, i) layout.addLayout(board) @@ -57,6 +58,11 @@ class SeopardyGame(QtGui.QWidget): self.setLayout(layout) + def setFocusToQuestion(self, secno, number): + if secno < 1 or secno > len(self.questions.get_sections()) or number > 5 or number < 1: + return + + self.board.itemAtPosition(number, secno-1).widget().setFocus() def event(self, e): if e.type() == QtCore.QEvent.KeyPress and e.key() == QtCore.Qt.Key_Left: @@ -169,3 +175,26 @@ class SeopardyGame(QtGui.QWidget): btn.setStyleSheet("QPushButton { background-color: %s; color: white; font-size: 20px; border: none; }" % (btncolor.name(),)) btn.setText(btnstr.strip()) + +class FocusKeyGrabber(QtCore.QObject): + def __init__(self, secno, number, parent, *args, **kwargs): + super(FocusKeyGrabber, self).__init__(parent, *args, **kwargs) + self._secno = secno + self._number = number + self._parent = parent + + def eventFilter(self, obj, e): + if e.type() == QtCore.QEvent.KeyPress: + if e.key() == QtCore.Qt.Key.Key_Left: + self._parent.setFocusToQuestion(self._secno-1, self._number) + return True + elif e.key() == QtCore.Qt.Key.Key_Right: + self._parent.setFocusToQuestion(self._secno+1, self._number) + return True + elif e.key() == QtCore.Qt.Key.Key_Up: + self._parent.setFocusToQuestion(self._secno, self._number-1) + return True + elif e.key() == QtCore.Qt.Key.Key_Down: + self._parent.setFocusToQuestion(self._secno, self._number+1) + return True + return QtCore.QObject.eventFilter(self, obj, e)