<p>您可以使用生成器函数为每条线生成坐标和每个单元格的填充。<br/>
<em>注<code>row % 4 < 2</code>:这是为连续行生成相同填充图案的原因,这些行</em><br/>
您可以轻松地调整以下代码示例以适应<code>Grid class</code></p>
<p><a href="https://i.stack.imgur.com/XluVX.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/XluVX.png" alt="enter image description here"/></a></p>
<pre><code>import tkinter as tk
WIDTH, HEIGHT = 300, 300
def line_fills(row, numcells):
"""yields the fill value of each cells of a line, from
the row position of the line
"""
fill = True if row % 4 < 2 else False # note %4: this is what generates identical fill pattern for consecutive rows the rows
for _ in range(numcells):
yield fill
fill = not fill
def line_coords(row, numcells, side):
"""yields the rectangle coordinates of each cells in a line, from
the row position of the line
"""
y0, y1 = row * side, (row+1) * side
for col in range(numcells):
x0, x1 = col * side, (col+1) * side
yield x0, y0, x1, y1
def staggered_grid(canvas):
"""generates and draws a staggered grid on a canvas
"""
side = 10
w, h = WIDTH // side + 1, HEIGHT // side + 1
fills = ['', 'grey']
for row in range(h):
for coord, fill in zip(line_coords(row, w, side), line_fills(row, w)):
fill = 'grey' if fill else ''
canvas.create_rectangle(*coord, fill=fill)
root = tk.Tk()
canvas = tk.Canvas(root, width=WIDTH, height=HEIGHT)
canvas.pack()
staggered_grid(canvas)
root.mainloop()
</code></pre>