我正在尝试绘制一系列矩形,给出存储在列表中的值。
对于初学者来说,嵌套循环通常是要走的路。然而,经过一些测试后,结果却是一个非常糟糕的主意。
以下是一个例子:
<input type="text" :value="ticket" readonly="readonly">
毋庸置疑,这是一个可怕的主意。对于像这样的小尺寸的东西,它可能工作正常。但是,如果元素列表增加,则会导致问题。总而言之,这种方法是不行的。
经过一番研究,我尝试了别的东西。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')
我试图做的很简单。我没有像以前那样线性地循环遍历所有值,而是决定生成动态元素,也就是说,for循环返回值,Tkinter读取它并将其用作坐标。然后,当生成下一个值时,将转储最后一个值。
由于某种原因,Tkinter一次读取所有变量并返回错误:
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])
我将如何解决这个问题?
答案 0 :(得分:0)
假设您想要绘制四个矩形,您可以将两个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")