diff --git a/src/gui/boardview.py b/src/gui/boardview.py --- a/src/gui/boardview.py +++ b/src/gui/boardview.py @@ -1,45 +1,41 @@ -import tkinter as tk - +from .resizablecanvas import ResizableCanvas from go import BLACK,WHITE ## Handles and presents the game state as detected by the program. -class BoardView(tk.Canvas): +class BoardView(ResizableCanvas): def __init__(self, master=None): - self._master=master - tk.Canvas.__init__(self, master, highlightthickness=0) + super().__init__(master) + + self.configure(width=360,height=360,background="#ffcc00") - self.width=360 - self.height=360 - self.padding=18 - self.cellWidth=(self.width-2*self.padding)/18 - self.cellHeight=(self.height-2*self.padding)/18 - self.configure(width=self.width,height=self.height,background="#ffcc00") + self._padding=18 + self._cellWidth=(self._width-2*self._padding)/18 + self._cellHeight=(self._height-2*self._padding)/18 - self.drawGrid() - master.bind("", self._onResize) + self._drawGrid() def redrawState(self,gameState): self.delete("black","white") for r,row in enumerate(gameState): for c,point in enumerate(row): - self.drawStone(r,c,point) + self._drawStone(r, c, point) - def drawGrid(self): - padding=self.padding + def _drawGrid(self): + padding=self._padding for i in range(19): - self.create_line(padding,18*i+padding,self.width-padding,18*i+padding,tags="row",fill="#000000") # rows - self.create_line(18*i+padding,padding,18*i+padding,self.height-padding,tags="col",fill="#000000") # cols + self.create_line(padding,18*i+padding,self._width-padding,18*i+padding,tags="row",fill="#000000") # rows + self.create_line(18*i+padding,padding,18*i+padding,self._height-padding,tags="col",fill="#000000") # cols - self.drawStars() + self._drawStars() - def drawStars(self): + def _drawStars(self): radius=2 for r in range(3,19,6): for c in range(3,19,6): - x=c*self.cellHeight+self.padding - y=r*self.cellWidth+self.padding + x=c*self._cellHeight+self._padding + y=r*self._cellWidth+self._padding self.create_oval(x-radius,y-radius,x+radius,y+radius,tags="star",fill='#000000') ## Draws a stone at provided coordinates. @@ -49,7 +45,7 @@ class BoardView(tk.Canvas): # @param r row coordinate, [0-18], counted from top # @param c column coordinate, [0-18], counted from left # @param color color indicator, go.BLACK or go.WHITE - def drawStone(self,r,c,color): + def _drawStone(self, r, c, color): if color==BLACK: hexCode='#000000' tag="black" @@ -58,23 +54,7 @@ class BoardView(tk.Canvas): tag="white" else: return False - x=c*self.cellWidth+self.padding - y=r*self.cellHeight+self.padding - radius=self.cellWidth/2 + x=c*self._cellWidth+self._padding + y=r*self._cellHeight+self._padding + radius=self._cellWidth/2 self.create_oval(x-radius,y-radius,x+radius,y+radius,tags=tag,fill=hexCode) - - def _onResize(self, event): - wScale=float(event.width)/self.width - hScale=float(event.height)/self.height - scale=min(wScale,hScale) - - self.width*=scale - self.height*=scale - self.scale("all",0,0,scale,scale) # rescale all the objects tagged with the "all" tag - - x=(event.width-self.width)/2 - y=(event.height-self.height)/2 - - # place the window, giving it an explicit size - self.place(in_=self._master, x=x, y=y, - width=self.width, height=self.height)