如何在 python 中使用 Tkinter 使用单个循环创建一系列矩形?
How to create a series of rectangles with a single loop using Tkinter in python?
我正在尝试根据存储在列表中的值绘制一系列矩形。
对于初学者来说,嵌套循环通常是可行的方法。然而,经过一些测试,结果证明这是一个非常糟糕的主意。
这是一个例子:
bs = 20
x_values = ['3', '4', '5', '6']
y_values = ['11', '11', '11', '11']
for X in x_values:
for Y in y_values:
x1 = int(X) * bs
y1 = int(Y) * bs
x2 = int(x1) + bs
y2 = int(y1) + bs
self.canvas.create_rectangle(x1, y1, x2, y2, fill='red', width=1,outline='white', tag='obj')
不用说,这是一个糟糕的想法。对于像这样的小尺寸的东西,它可能工作得很好。但是,如果元素列表增加,那将导致问题。总而言之,这个方法不行。
经过一些研究,我尝试了其他方法。
bs = 20
x_values = ['3', '4', '5', '6']
y_values = ['11', '11', '11', '11']
canvas.create_rectangle([int(X) * bs for X in x],
[int(Y) * bs for Y in y],
[(int(X) * bs) + bs for X in x],
[(int(Y) * bs) + bs for Y in y])
我想做的很简单。我没有像以前那样线性循环遍历所有值,而是决定动态生成元素 ,即 for 循环 returns 值,Tkinter 读取它并使用它作为坐标。然后当下一个值生成时,最后一个值将被转储。
出于某种原因,Tkinter 正在一次读取所有变量并返回错误:
_tkinter.TclError: wrong # coordinates: expected 0 or 4, got 16
我将如何解决这个问题?
假设您要绘制四个矩形,您可以将两个 x 和 y 坐标列表组合成一个 x,y 对列表,其中 zip:
coords = zip(x_values, y_values)
这将导致以下结果:
[('3', '11'), ('4', '11'), ('5', '11'), ('6', '11')]
如果您现在想要绘制四个矩形,其中每个坐标都用于定义实际坐标,您可以像这样遍历每一对:
for x1, y1 in zip(x_values, y_values):
x1 = int(x1) * bs
y1 = int(y1) * bs
x2 = x1 + bs
y2 = y1 + bs
canvas.create_rectangle(x1,y1,x2,y2, fill="red")
我正在尝试根据存储在列表中的值绘制一系列矩形。
对于初学者来说,嵌套循环通常是可行的方法。然而,经过一些测试,结果证明这是一个非常糟糕的主意。
这是一个例子:
bs = 20
x_values = ['3', '4', '5', '6']
y_values = ['11', '11', '11', '11']
for X in x_values:
for Y in y_values:
x1 = int(X) * bs
y1 = int(Y) * bs
x2 = int(x1) + bs
y2 = int(y1) + bs
self.canvas.create_rectangle(x1, y1, x2, y2, fill='red', width=1,outline='white', tag='obj')
不用说,这是一个糟糕的想法。对于像这样的小尺寸的东西,它可能工作得很好。但是,如果元素列表增加,那将导致问题。总而言之,这个方法不行。
经过一些研究,我尝试了其他方法。
bs = 20
x_values = ['3', '4', '5', '6']
y_values = ['11', '11', '11', '11']
canvas.create_rectangle([int(X) * bs for X in x],
[int(Y) * bs for Y in y],
[(int(X) * bs) + bs for X in x],
[(int(Y) * bs) + bs for Y in y])
我想做的很简单。我没有像以前那样线性循环遍历所有值,而是决定动态生成元素 ,即 for 循环 returns 值,Tkinter 读取它并使用它作为坐标。然后当下一个值生成时,最后一个值将被转储。
出于某种原因,Tkinter 正在一次读取所有变量并返回错误:
_tkinter.TclError: wrong # coordinates: expected 0 or 4, got 16
我将如何解决这个问题?
假设您要绘制四个矩形,您可以将两个 x 和 y 坐标列表组合成一个 x,y 对列表,其中 zip:
coords = zip(x_values, y_values)
这将导致以下结果:
[('3', '11'), ('4', '11'), ('5', '11'), ('6', '11')]
如果您现在想要绘制四个矩形,其中每个坐标都用于定义实际坐标,您可以像这样遍历每一对:
for x1, y1 in zip(x_values, y_values):
x1 = int(x1) * bs
y1 = int(y1) * bs
x2 = x1 + bs
y2 = y1 + bs
canvas.create_rectangle(x1,y1,x2,y2, fill="red")