From 371dd810ca079f78cbdacb37df1d848df352ecfe Mon Sep 17 00:00:00 2001 From: En Yi Date: Fri, 6 Jul 2018 18:13:05 +0800 Subject: [PATCH] Fix the sudoku board layout --- graphic_components/board.py | 33 ++++++++++++++++++++++++--- graphic_components/sudoku_graphics.py | 1 + main.py | 6 ++--- 3 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 graphic_components/sudoku_graphics.py diff --git a/graphic_components/board.py b/graphic_components/board.py index baf29b7..50ca655 100644 --- a/graphic_components/board.py +++ b/graphic_components/board.py @@ -15,7 +15,7 @@ import sys, math class BoxBoard(QGraphicsWidget): # Initialisation - def __init__(self, width, height, parent = None): + def __init__(self, width, height, parent=None): super().__init__(parent) self.width = width self.height = height @@ -48,6 +48,33 @@ class BoxBoard(QGraphicsWidget): def sizeHint(self, which, constraint=None): return(QSizeF(self.width+10, self.height+10)) + +class GameBoard(BoxBoard): + + def __init__(self, width, height, parent=None): + super().__init__(width, height, parent) + + self.gamegrid = SudokuGrid(self.width, self.height, parent=self) + self.numring = NumberRing(parent=self) + + self.gamegrid.update() + self.numring.update() + + def show_number_ring(self, x=0, y=0): + if not self.gamegrid.selected: + self.numring.setPos(x, y) + self.numring.setVisible(True) + self.gamegrid.selected = True + else: + self.numring.setVisible(False) + self.gamegrid.selected = False + + def select_ring_number(self, val): + if val == 'X': + val = 0 + self.gamegrid.replace_cell_number(int(val)) + self.show_number_ring() + class SudokuGrid(QGraphicsObject): # Prepare the signal buttonClicked = pyqtSignal(float, float) @@ -178,8 +205,8 @@ class NumberPainter(QGraphicsItem): class NumberRing(QGraphicsItem): - def __init__(self): - super().__init__() + def __init__(self, parent= None): + super().__init__(parent = parent) self.setVisible(False) self.radius = 48 diff --git a/graphic_components/sudoku_graphics.py b/graphic_components/sudoku_graphics.py new file mode 100644 index 0000000..d30bd08 --- /dev/null +++ b/graphic_components/sudoku_graphics.py @@ -0,0 +1 @@ +# Put all Sudoku related graphics here \ No newline at end of file diff --git a/main.py b/main.py index adc68d3..584b59d 100644 --- a/main.py +++ b/main.py @@ -21,7 +21,7 @@ class SudokuWindow(QGraphicsView): self.setScene(self.scene) self.setSceneRect(self.scene.sceneRect()) - self.gameboard = board.BoxBoard(400, 400) + self.gameboard = board.GameBoard(400, 400) self.menuboard = board.BoxBoard(400, 50) self.gamegrid = board.SudokuGrid(450, 450) self.numring = board.NumberRing() @@ -38,8 +38,8 @@ class SudokuWindow(QGraphicsView): #self.scene.addItem(self.gameboard) self.scene.addItem(self.form) - self.scene.addItem(self.gamegrid) - self.scene.addItem(self.numring) + #self.scene.addItem(self.gamegrid) + #self.scene.addItem(self.numring) self.setBackgroundBrush(QBrush(Qt.black)) self.setRenderHint(QPainter.Antialiasing) self.setGeometry(0, 0, 600, 600)