tkinter canvas未绘制顶部和左侧线条

2024-09-30 01:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用tkinter画布画一个网格。逻辑相当简单:对于网格中的每个节点,我使用其左上角和右下角绘制一个矩形[代码如下]。在

问题是tkinter没有分别呈现第一列和第一行中节点的左边框和上边框。就像tkinter将画布偏移一小部分像素。是否有配置来更正此问题?我当前的解决方法是从cellWcellH中减去一些小值,然后偏移每个节点的x1和{}……这非常麻烦。missing left and top borders

我没有做任何奇怪的事情,只是一个简单的画布在根窗口。在

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()

Tags: innodeforreturntkinterdefcolgrid
1条回答
网友
1楼 · 发布于 2024-09-30 01:33:41

我发现画布的一个恼人之处是边框是坐标空间的一部分。当你在左边画一条线时,它会被边框遮住。在

Is there a config to correct this?

是的。在

可以通过完全禁用与边界相关的属性来解决此问题:

canvas = tk.Canvas(window, width=winW, height=winH, 
                   borderwidth=0, highlightthickness=0)

如果希望画布周围有某种边框,可以将画布放置在框架中,然后使用框架绘制边框。在

相关问题 更多 >

    热门问题