Change to use FocusEvents
parent
bed8f5a303
commit
4e49c9f032
|
@ -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':
|
||||||
|
|
|
@ -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)
|
||||||
|
|
2
main.py
2
main.py
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue