使tkinter网格交错

问题描述

在这里https://scipython.com/blog/a-simple-colouring-grid/使用这个grid.py着色程序 构成网格的相关代码

self.cells = []
    for iy in range(n):
        for ix in range(n):
            xpad,ypad = pad * (ix+1),pad * (iy+1)
            x,y = xpad + ix*xsize,ypad + iy*ysize
            rect = self.w.create_rectangle(x,y,x+xsize,y+ysize,fill=UNFILLED)
            self.cells.append(rect)

我想知道是否能做到,所以方格如下图所示:

staggered grid

解决方法

您可以为给定行上的单元格的每个x坐标添加/减去“交错偏移”。通过将行乘以(-1)**row来确定“行”的等级所确定的值的符号。

也许是这样吗?:

    self.cells = []
    for row in range(n):
        stagger_offset = (xsize // 4) * (-1)**row   # will be positive for even rows,negative otherwise
        y0 = pad * (row + 1) + row * ysize
        y1 = y0 + ysize
        for col in range(n):
            x0 = pad * (col + 1) + col * xsize + stagger_offset
            x1 = x0 + xsize
            self.cells.append(self.w.create_rectangle(x0,y0,x1,y1,fill=UNFILLED))

您可能需要在偶数/奇数行的开头/结尾插入半个单元格,具体取决于您喜欢的视觉方面。