【发布时间】:2015-09-08 20:55:46
【问题描述】:
我正在尝试使用 Tkinter 将网格绘制成具有多行和多列的矩形。我几乎有了它,但我不知道为什么,画布中没有显示两条周边线。
import tkinter as tk
class GridWindow:
def __init__(self, parent):
self.myParent = parent
self.myContainer1 = tk.Frame(parent)
self.myContainer1.pack()
self.cellwidth = 25
self.cellheight = 25
self.rect = {}
def draw_grid(self, rows, columns):
self.myCanvas = tk.Canvas(self.myContainer1)
self.myCanvas.configure(width=self.cellheight*rows,
height=self.cellwidth*columns)
self.myCanvas.pack(side=tk.RIGHT)
for column in range(rows):
for row in range(columns):
x1 = column * self.cellwidth
y1 = row * self.cellheight
x2 = x1 + self.cellwidth
y2 = y1 + self.cellheight
self.rect[row, column] = self.myCanvas.create_rectangle(x1, y1, x2, y2, fill="white")
def runApp(rows, columns):
root = tk.Tk()
myapp = GridWindow(root)
myapp.draw_grid(rows, columns)
root.mainloop()
if __name__ == '__main__':
runApp(10, 10)
使用该代码,窗口如下所示:
我设法通过一些小技巧解决了这个问题,但我不知道它为什么会起作用。唯一的区别是现在我向每个画布维度添加 2 个像素,向每个单元格维度添加 4 个像素。代码如下:
import tkinter as tk
class GridWindow:
def __init__(self, parent):
self.myParent = parent
self.myContainer1 = tk.Frame(parent)
self.myContainer1.pack()
self.cellwidth = 25
self.cellheight = 25
self.rect = {}
def draw_grid(self, rows, columns):
self.myCanvas = tk.Canvas(self.myContainer1)
self.myCanvas.configure(width=self.cellheight*rows+2,
height=self.cellwidth*columns+2)
self.myCanvas.pack(side=tk.RIGHT)
for column in range(rows):
for row in range(columns):
x1 = column * self.cellwidth+4
y1 = row * self.cellheight+4
x2 = x1 + self.cellwidth
y2 = y1 + self.cellheight
self.rect[row, column] = self.myCanvas.create_rectangle(x1, y1, x2, y2, fill="white")
def runApp(rows, columns):
root = tk.Tk()
myapp = GridWindow(root)
myapp.draw_grid(rows, columns)
root.mainloop()
if __name__ == '__main__':
runApp(10, 10)
现在看起来像这样:
因此,如果有人可以解释我的这种行为,或者我做错了什么,我将不胜感激,欢迎提出任何建议。
【问题讨论】:
标签: python user-interface python-3.x tkinter