Skip to content

Commit 4f17241

Browse files
committed
Changed figure size to 64x64
1 parent d580e35 commit 4f17241

File tree

13 files changed

+149
-0
lines changed

13 files changed

+149
-0
lines changed

chesslib/gui_tkinter.py

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
import board
2+
import pieces
3+
import Tkinter as tk
4+
from PIL import Image, ImageTk
5+
6+
class BoardGUI(tk.Frame):
7+
def __init__(self, parent, chessboard, rows=8, columns=8, size=32, color1="white", color2="grey"):
8+
''' size is the size of a square, in pixels '''
9+
10+
self.chessboard = chessboard
11+
self.rows = rows
12+
self.columns = columns
13+
self.size = size
14+
self.color1 = color1
15+
self.color2 = color2
16+
self.pieces = {}
17+
self.selected = None
18+
self.selected_piece = None
19+
self.hilighted = None
20+
self.icons = {}
21+
self.parent = parent
22+
23+
canvas_width = columns * size
24+
canvas_height = rows * size
25+
26+
tk.Frame.__init__(self, parent)
27+
self.canvas = tk.Canvas(self, borderwidth=0, highlightthickness=0,
28+
width=canvas_width, height=canvas_height, background="grey")
29+
self.canvas.pack(side="top", fill="both", expand=True, padx=2, pady=2)
30+
31+
self.canvas.bind("<Button-1>", self.click)
32+
33+
self.button_quit = tk.Button(self, text="New", fg="black", command=self.reset)
34+
self.button_quit.pack(side=tk.LEFT)
35+
self.button_save = tk.Button(self, text="Save", fg="black", command=self.chessboard.save_to_file)
36+
self.button_save.pack(side=tk.LEFT)
37+
38+
self.label_status = tk.Label(self, text=" White's turn ", fg="black")
39+
self.label_status.pack(side=tk.LEFT)
40+
self.button_quit = tk.Button(self, text="Quit", fg="black", command=self.close)
41+
self.button_quit.pack(side=tk.RIGHT)
42+
43+
def close(self):
44+
self.parent.destroy()
45+
46+
def click(self, event):
47+
col_pix, row_pix = self.ysize, self.ysize
48+
col = event.x / col_pix
49+
row = 7-(event.y / row_pix)
50+
# self.label_status["text"] = "%s, %s, %s, %s" % (event.x, event.y, col, row)
51+
self.selected = (row, col)
52+
pos = self.chessboard.letter_notation(self.selected)
53+
piece = self.chessboard[pos]
54+
if piece is not None and (piece.color == self.chessboard.player_turn):
55+
self.selected_piece = (piece, pos)
56+
self.hilighted = map(self.chessboard.number_notation, (self.chessboard[pos].possible_moves(pos)))
57+
58+
if self.selected_piece and ((piece is None) or\
59+
(piece.color != self.selected_piece[0].color)):
60+
# making a move
61+
try:
62+
self.chessboard.move(self.selected_piece[1], pos)
63+
except board.ChessError as e:
64+
self.label_status["text"] = e.__class__.__name__
65+
else:
66+
self.label_status["text"] = " " + self.selected_piece[0].color.capitalize() +": "+ self.selected_piece[1]+pos
67+
68+
self.selected_piece = None
69+
self.hilighted = None
70+
self.pieces = {}
71+
self.refresh(event)
72+
self.draw_pieces()
73+
self.refresh(event)
74+
self.refresh(event)
75+
76+
def addpiece(self, name, image, row=0, column=0):
77+
'''Add a piece to the playing board'''
78+
self.canvas.create_image(0,0, image=image, tags=(name, "piece"), anchor="c")
79+
self.placepiece(name, row, column)
80+
81+
def placepiece(self, name, row, column):
82+
'''Place a piece at the given row/column'''
83+
self.pieces[name] = (row, column)
84+
x0 = (column * self.size) + int(self.size/2)
85+
y0 = ((7-row) * self.size) + int(self.size/2)
86+
self.canvas.coords(name, x0, y0)
87+
88+
def refresh(self, event={}):
89+
'''Redraw the board'''
90+
try:
91+
self.xsize = int((event.width-1) / self.columns)
92+
self.ysize = int((event.height-1) / self.rows)
93+
except Exception:
94+
pass
95+
96+
self.size = min(self.xsize, self.ysize)
97+
self.canvas.delete("square")
98+
color = self.color2
99+
for row in range(self.rows):
100+
color = self.color1 if color == self.color2 else self.color2
101+
for col in range(self.columns):
102+
x1 = (col * self.size)
103+
y1 = ((7-row) * self.size)
104+
x2 = x1 + self.size
105+
y2 = y1 + self.size
106+
if (self.selected is not None) and (row, col) == self.selected:
107+
self.canvas.create_rectangle(x1, y1, x2, y2, outline="black", fill="orange", tags="square")
108+
elif(self.hilighted is not None and (row, col) in self.hilighted):
109+
self.canvas.create_rectangle(x1, y1, x2, y2, outline="black", fill="spring green", tags="square")
110+
else:
111+
self.canvas.create_rectangle(x1, y1, x2, y2, outline="black", fill=color, tags="square")
112+
color = self.color1 if color == self.color2 else self.color2
113+
for name in self.pieces:
114+
self.placepiece(name, self.pieces[name][0], self.pieces[name][1])
115+
self.canvas.tag_raise("piece")
116+
self.canvas.tag_lower("square")
117+
118+
def draw_pieces(self):
119+
self.canvas.delete("piece")
120+
for coord, piece in self.chessboard.iteritems():
121+
x,y = self.chessboard.number_notation(coord)
122+
if piece is not None:
123+
filename = "img/%s%s.png" % (piece.color, piece.abbriviation.lower())
124+
piecename = "%s%s%s" % (piece.abbriviation, x, y)
125+
126+
if(filename not in self.icons):
127+
self.icons[filename] = ImageTk.PhotoImage(file=filename, width=32, height=32)
128+
129+
self.addpiece(piecename, self.icons[filename], x, y)
130+
self.placepiece(piecename, x, y)
131+
132+
def reset(self):
133+
self.chessboard.load(board.FEN_STARTING)
134+
self.refresh()
135+
self.draw_pieces()
136+
self.refresh()
137+
138+
def display(chessboard):
139+
root = tk.Tk()
140+
root.title("Simply Chess")
141+
b= BoardGUI(root, chessboard)
142+
b.pack(side="top", fill="both", expand="false", padx=4, pady=4)
143+
b.draw_pieces()
144+
145+
#root.resizable(0,0)
146+
root.mainloop()
147+
148+
if __name__ == "__main__":
149+
display()

img/blackb.png

2.9 KB
Loading

img/blackk.png

3.26 KB
Loading

img/blackn.png

2.32 KB
Loading

img/blackp.png

1.58 KB
Loading

img/blackq.png

3.93 KB
Loading

img/blackr.png

1.25 KB
Loading

img/whiteb.png

3.56 KB
Loading

img/whitek.png

3.35 KB
Loading

img/whiten.png

2.41 KB
Loading

img/whitep.png

1.92 KB
Loading

img/whiteq.png

4.83 KB
Loading

img/whiter.png

1.74 KB
Loading

0 commit comments

Comments
 (0)