This is all the code so far. I have tried changing the padding values, the if statement conditions, and adding an elif condition for when both (row + 1) % 3 == 0 and (col + 1) % 3 == 0. They all seemed to have no positive effect on the grid.
import tkinter
mW = tkinter.Tk()
mW.title('Sudoku')
mW.geometry('800x640')
def grid_layout(grid_dim):
entries = []
for i in range(0, grid_dim ** 2):
row = i // grid_dim
col = i % grid_dim
entries.append(tkinter.Entry(mW, width=3, highlightthickness=1, highlightbackground='#000000'))
if (row + 1) % 3 == 0:
entries[i].grid(row=row, column=col, pady=(0, 10), ipadx=5, ipady=5)
elif (col + 1) % 3 == 0:
entries[i].grid(row=row, column=col, padx=(0, 10), ipadx=5, ipady=5)
else:
entries[i].grid(row=row, column=col, ipadx=5, ipady=5)
grid_layout(9)
mW.mainloop()
Problem is because last cell need both pady=(0, 10)
and padx=(0, 10)
- so use two if
instead of if/elif
if (row+1) % 3 == 0:
entries[i].grid(row=row, column=col, pady=(0, 10), ipadx=5, ipady=5)
if (col+1) % 3 == 0:
entries[i].grid(row=row, column=col, padx=(0, 10), ipadx=5, ipady=5)
else:
entries[i].grid(row=row, column=col, ipadx=5, ipady=5)
You can also do it little different - using (0,0)
as default value for all cells
pad_y = (0, 0)
pad_x = (0, 0)
if (row+1) % 3 == 0:
pad_y = (0, 10)
if (col+1) % 3 == 0:
pad_x = (0, 10)
entries[i].grid(row=row, column=col, ipadx=5, ipady=5, padx=pad_x, pady=pad_y)
EDIT:
I would write it little different - using two for
-loops. And skiping pad
for last cell in row and last cell in column.
import tkinter as tk
# --- functions ---
def grid_layout(mW, grid_dim):
entries = []
for row in range(grid_dim):
for col in range(grid_dim):
entry = tk.Entry(mW, width=3, highlightthickness=1, highlightbackground='#000000')
pad_y = (0, 0)
pad_x = (0, 0)
if (row+1) % 3 == 0 and (row+1) < grid_dim: # skip for last row
pad_y = (0, 10)
if (col+1) % 3 == 0 and (col+1) < grid_dim: # skip for last column
pad_x = (0, 10)
entry.grid(row=row, column=col, ipadx=5, ipady=5, padx=pad_x, pady=pad_y)
entries.append(entry)
return entries
# --- main ---
mW = tk.Tk()
mW.title('Sudoku')
entries = grid_layout(mW, 9) # send result
mW.mainloop()
And I send mW
to function and entries
send back in return
because
Explicit is better than implicit.
See: Zen of Python