如何在python中使用Tkinter创建一系列具有单个循环的矩形?

2024-04-19 15:18:32 发布

您现在位置: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')

不用说,这是一个非常糟糕的想法。对于这种小尺寸的东西,它可能工作得很好。但是,如果元素列表增加,则会导致问题。总之,这种方法是不可行的。在

经过一番研究,我尝试了其他方法。在

^{pr2}$

我想做的很简单。我决定动态生成元素,也就是说,for循环返回值,Tkinter读取并使用它作为坐标。然后,当生成下一个值时,最后一个值将被转储。在

出于某种原因,Tkinter一次读取所有变量并返回错误:

_tkinter.TclError: wrong # coordinates: expected 0 or 4, got 16

我该怎么解决这个问题呢?在


Tags: 方法in元素列表forbstkinter绘制
1条回答
网友
1楼 · 发布于 2024-04-19 15:18:32

假设要绘制四个矩形,可以使用zip将x和y坐标的两个列表组合成一个x,y对列表:

coords = zip(x_values, y_values)

这将导致以下结果:

^{pr2}$

如果现在要绘制四个矩形,其中每个坐标都用于定义实际坐标,则可以按如下方式循环每对矩形:

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

相关问题 更多 >