【发布时间】:2019-08-14 15:47:58
【问题描述】:
我正在尝试使用 tkinter 画布绘制网格。逻辑相当简单:对于网格中的每个节点,我使用其左上角和右下角绘制一个矩形 [代码如下]。
问题在于 tkinter 没有分别渲染第一列和第一行中节点的左边界和上边界。就像 tkinter 将画布偏移了一些小的像素。 是否有配置来纠正这个问题?我目前的解决方法是从cellW 和cellH 中减去一些小值,然后抵消每个节点的x1 和y1...这是非常哈基。
我没有做任何奇怪的事情,只是根窗口上的一个简单画布。
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()
【问题讨论】:
-
请提供minimal reproducible example - 您的代码缺少一些重要部分,导致我们无法运行您的代码。
-
@BryanOakley,我已经更新了代码。谢谢。
标签: python tkinter tkinter-canvas