Change to use FocusEvents

master
En Yi 2018-07-10 11:23:50 +08:00
parent bed8f5a303
commit 4e49c9f032
3 changed files with 19 additions and 6 deletions

View File

@ -67,14 +67,18 @@ class GameBoard(BoxBoard):
self.gamegrid.buttonClicked.connect(self.show_number_ring) self.gamegrid.buttonClicked.connect(self.show_number_ring)
self.numring.connect_button_signals(self.select_ring_number) self.numring.connect_button_signals(self.select_ring_number)
self.gamegrid.setFocus(Qt.MouseFocusReason)
def show_number_ring(self, x=0, y=0): def show_number_ring(self, x=0, y=0):
print('Before', self.gamegrid.hasFocus(), self.numring.hasFocus())
if not self.gamegrid.freeze: if not self.gamegrid.freeze:
self.numring.setPos(x, y) self.numring.setPos(x, y)
self.numring.setVisible(True) self.numring.setVisible(True)
self.gamegrid.freeze = True self.numring.setFocus()
else: else:
self.numring.setVisible(False)
self.gamegrid.freeze = False self.gamegrid.freeze = False
self.gamegrid.setFocus()
print('After', self.gamegrid.hasFocus(), self.numring.hasFocus())
def select_ring_number(self, val): def select_ring_number(self, val):
if val == 'X': if val == 'X':

View File

@ -21,7 +21,6 @@ class BaseSudokuItem(QGraphicsObject):
self.freeze = False self.freeze = False
class NumberPainter(BaseSudokuItem): class NumberPainter(BaseSudokuItem):
# TODO: Use different font to differentiate the status of a cell # TODO: Use different font to differentiate the status of a cell
@ -100,8 +99,7 @@ class SudokuGrid(BaseSudokuItem):
self.setAcceptHoverEvents(True) self.setAcceptHoverEvents(True)
self.setAcceptedMouseButtons(Qt.LeftButton) self.setAcceptedMouseButtons(Qt.LeftButton)
self.setFlag(QGraphicsItem.ItemIsFocusable, True)
self.freeze = False
def replace_cell_number(self, val): def replace_cell_number(self, val):
self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val) self.sudoku_grid.replace_cell_number(self.mouse_h, self.mouse_w, val)
@ -145,6 +143,12 @@ class SudokuGrid(BaseSudokuItem):
else: else:
self.buttonClicked.emit(0, 0) self.buttonClicked.emit(0, 0)
def focusOutEvent(self, event):
self.freeze = True
#def focusInEvent(self, event):
# self.freeze = False
class NumberRing(BaseSudokuItem): class NumberRing(BaseSudokuItem):
# TODO: Add functions to animated the ring appearing # TODO: Add functions to animated the ring appearing
@ -172,6 +176,8 @@ class NumberRing(BaseSudokuItem):
self.cell_buttons.append(btn) self.cell_buttons.append(btn)
self.setFlag(QGraphicsItem.ItemIsFocusable, True)
def boundingRect(self): def boundingRect(self):
return QRectF(-5, -5, self.cell_width+self.radius*2+10, return QRectF(-5, -5, self.cell_width+self.radius*2+10,
self.cell_height + self.radius * 2 + 10) self.cell_height + self.radius * 2 + 10)
@ -187,3 +193,6 @@ class NumberRing(BaseSudokuItem):
def freeze_buttons(self, state): def freeze_buttons(self, state):
for btn in self.cell_buttons: for btn in self.cell_buttons:
btn.freeze = state btn.freeze = state
def focusOutEvent(self, event):
self.setVisible(False)

View File

@ -43,7 +43,7 @@ class SudokuWindow(QGraphicsView):
self.fitInView(self.form.boundingRect(), Qt.KeepAspectRatio) self.fitInView(self.form.boundingRect(), Qt.KeepAspectRatio)
self.show() 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): def freeze_game(self, freeze):
self.menuboard.show_difficulty(freeze) self.menuboard.show_difficulty(freeze)