如何使用 Tkinter Canvas 绘制形状图案?
How do I draw a pattern of shapes using the Tkinter Canvas?
本质上,我在 canvas 中绘制了一个多边形,我想复制它以填满整个 canvas。
总的来说,我对编程还很陌生,我认为我可以使用 for 循环,但它并没有真正按照我想要的方式运行,所以我很好奇是否有人可以告诉我我该怎么做做到这一点。
代码基本上显示了我想做的事情,但我不想重写这 10 次来填满整个 canvas
首先,你只需要打包canvas一次。
然后您可以使用 for 循环为每个新多边形移动点。一个巧妙的技巧是使用 zip()
,它将这些点与位移列表结合起来,但仅适用于列表中的所有其他项目。示例:
from tkinter import *
root = Tk()
canvas = Canvas()
canvas.pack()
points = [125, 100, 225, 100, 225, 100, 250, 150, 250, 150, 100, 150]
shift_list = [0, 50, 100, 150] # values to shift polygon for each repetition
for delta_y in shift_list:
shifted = []
for x, y in zip(points[::2], points[1::2]): # Loop through points
shifted.append(x)
shifted.append(y+delta_y)
canvas.create_polygon(shifted, outline="blue", fill="orange", width=2)
root.mainloop()
行:
for x, y in zip(points[::2], points[1::2])
将获取列表点,但仅获取所有其他项目 points[::2]
并将其与列表点组合,但仅从第二项 points[1::2]
开始的所有其他项目将给出 for 循环 x &每个点的 y 值。这种使用 zip()
的技术非常有用,您应该牢记这一点。
然后只需添加位移值并绘制多边形。
本质上,我在 canvas 中绘制了一个多边形,我想复制它以填满整个 canvas。
总的来说,我对编程还很陌生,我认为我可以使用 for 循环,但它并没有真正按照我想要的方式运行,所以我很好奇是否有人可以告诉我我该怎么做做到这一点。
代码基本上显示了我想做的事情,但我不想重写这 10 次来填满整个 canvas
首先,你只需要打包canvas一次。
然后您可以使用 for 循环为每个新多边形移动点。一个巧妙的技巧是使用 zip()
,它将这些点与位移列表结合起来,但仅适用于列表中的所有其他项目。示例:
from tkinter import *
root = Tk()
canvas = Canvas()
canvas.pack()
points = [125, 100, 225, 100, 225, 100, 250, 150, 250, 150, 100, 150]
shift_list = [0, 50, 100, 150] # values to shift polygon for each repetition
for delta_y in shift_list:
shifted = []
for x, y in zip(points[::2], points[1::2]): # Loop through points
shifted.append(x)
shifted.append(y+delta_y)
canvas.create_polygon(shifted, outline="blue", fill="orange", width=2)
root.mainloop()
行:
for x, y in zip(points[::2], points[1::2])
将获取列表点,但仅获取所有其他项目 points[::2]
并将其与列表点组合,但仅从第二项 points[1::2]
开始的所有其他项目将给出 for 循环 x &每个点的 y 值。这种使用 zip()
的技术非常有用,您应该牢记这一点。
然后只需添加位移值并绘制多边形。