Я пытаюсь нарисовать сетку с помощью tkinter canvas.Логика довольно проста: для каждого узла в сетке я рисую прямоугольник, используя его верхний левый и нижний правый углы [код ниже].
Проблема в том, что tkinter не отображает левую и верхнюю границы узлов в первом столбце и строке соответственно.Как будто tkinter смещает холст на небольшое количество пикселей. Есть ли конфигурация, чтобы исправить это? Мой текущий способ - вычесть небольшое значение из cellW
и cellH
, а затем сместить x1
и y1
каждого узла ... это очень хакерский,![missing left and top borders](https://i.stack.imgur.com/9MT3x.png)
Я не делаю ничего странного, просто простое полотно в корневом окне.
import tkinter as tk
winH = 400
winW = 400
ncols = 10
nrows = 10
cellW = winW / ncols
cellH = winH / nrows
class Node:
def __init__(self, row, col):
self.row = row
self.col = col
return
def generatGrid(nrows, ncols):
grid = []
for r in range(nrows):
row = [ Node(r, c) for c in range(ncols) ]
grid.append(row)
return grid
def drawNode(canvas, node):
x1 = cellW * node.col
y1 = cellH * node.row
x2 = x1 + cellW
y2 = y1 + cellH
canvas.create_rectangle(x1, y1, x2, y2)
return
def drawGrid(canvas, grid):
for row in grid:
for node in row:
drawNode(canvas, node)
return
window = tk.Tk()
canvas = tk.Canvas(window, width=winW, height=winH)
canvas.pack()
grid = generatGrid(nrows, ncols)
drawGrid(canvas, grid)
window.mainloop()