From 4e49c9f0322fe11e2cd72b25922ed83deedd3b6d Mon Sep 17 00:00:00 2001 From: En Yi Date: Tue, 10 Jul 2018 11:23:50 +0800 Subject: [PATCH] Change to use FocusEvents --- graphic_components/board.py | 8 ++++++-- graphic_components/sudoku_graphics.py | 15 ++++++++++++--- main.py | 2 +- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/graphic_components/board.py b/graphic_components/board.py index 1f31612..3376f09 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -67,14 +67,18 @@ class GameBoard(BoxBoard): self.gamegrid.buttonClicked.connect(self.show_number_ring) self.numring.connect_button_signals(self.select_ring_number) + self.gamegrid.setFocus(Qt.MouseFocusReason) + def show_number_ring(self, x=0, y=0): + print('Before', self.gamegrid.hasFocus(), self.numring.hasFocus()) if not self.gamegrid.freeze: self.numring.setPos(x, y) self.numring.setVisible(True) - self.gamegrid.freeze = True + self.numring.setFocus() else: - self.numring.setVisible(False) self.gamegrid.freeze = False + self.gamegrid.setFocus() + print('After', self.gamegrid.hasFocus(), self.numring.hasFocus()) def select_ring_number(self, val): if val == 'X': diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py index 202d576..7a837ae 100644 --- a/graphic_components/sudoku_graphics.py +++ b/graphic_components/sudoku_graphics.py @@ -21,7 +21,6 @@ class BaseSudokuItem(QGraphicsObject): self.freeze = False - class NumberPainter(BaseSudokuItem): # TODO: Use different font to differentiate the status of a cell @@ -100,8 +99,7 @@ class SudokuGrid(BaseSudokuItem): self.setAcceptHoverEvents(True) self.setAcceptedMouseButtons(Qt.LeftButton) - - self.freeze = False + self.setFlag(QGraphicsItem.ItemIsFocusable, True) def replace_cell_number(self, val): self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val) @@ -145,6 +143,12 @@ class SudokuGrid(BaseSudokuItem): else: self.buttonClicked.emit(0, 0) + def focusOutEvent(self, event): + self.freeze = True + + #def focusInEvent(self, event): + # self.freeze = False + class NumberRing(BaseSudokuItem): # TODO: Add functions to animated the ring appearing @@ -172,6 +176,8 @@ class NumberRing(BaseSudokuItem): self.cell_buttons.append(btn) + self.setFlag(QGraphicsItem.ItemIsFocusable, True) + def boundingRect(self): return QRectF(-5, -5, self.cell_width+self.radius*2+10, self.cell_height + self.radius * 2 + 10) @@ -187,3 +193,6 @@ class NumberRing(BaseSudokuItem): def freeze_buttons(self, state): for btn in self.cell_buttons: btn.freeze = state + + def focusOutEvent(self, event): + self.setVisible(False) diff --git a/main.py b/main.py index ffd013b..7ebe8f0 100644 --- a/main.py +++ b/main.py @@ -43,7 +43,7 @@ class SudokuWindow(QGraphicsView): self.fitInView(self.form.boundingRect(), Qt.KeepAspectRatio) self.show() - self.menuboard.diff_display.diffClicked.connect(self.freeze_game) + #self.menuboard.diff_display.diffClicked.connect(self.freeze_game) def freeze_game(self, freeze): self.menuboard.show_difficulty(freeze)