![](/img/trans.png)
[英]Trying to create sudoku game using tkinter grid, got problem with the GUI grid
[英]Trying to create a 9 x 9 sudoku grid in tkinter, but the padding (padx) for every ninth square is off. What is the problem in my code?
這是到目前為止的所有代碼。 我嘗試更改填充值、if 語句條件,並在 (row + 1) % 3 == 0 和 (col + 1) % 3 == 0 時添加 elif 條件。它們似乎都沒有積極意義對網格的影響。
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()
問題是因為最后一個單元格同時需要pady=(0, 10)
和padx=(0, 10)
- 所以使用兩個if
而不是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)
您也可以做一些不同的事情 - 使用(0,0)
作為所有單元格的默認值
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)
編輯:
我會寫它有點不同 - 使用兩個for
循環。 並跳過pad
中的最后一個單元格和列中的最后一個單元格。
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()
然后我將mW
發送到 function 並return
entries
,因為
Explicit is better than implicit.
見: Python之禪
您需要添加:
def grid_layout(grid_dim):
entries = []
for i in range(grid_dim*grid_dim):
row = i // grid_dim
col = i % grid_dim
entries.append(tkinter.Entry(mW, width=3, highlightthickness=1, highlightbackground='#000000'))
padx = (10, 0) if col in (3, 6) else None
pady = (10, 0) if row in (3, 6) else None
entries[i].grid(row=row, column=col, padx=padx, pady=pady, ipadx=5, ipady=5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.