我知道我過去曾問過類似的問題,并且答案效果很好,但我無法理解如何在這種特定情況下移動此形狀。
本質上應該是多排這種形狀的,都是挨著的,下一行需要稍微偏移,然后來回……

我確實嘗試使用points[::x]并points[x::y]跳過我不想更改的值,這是我從上一個問題中學到的,但我無法弄清楚如何撰寫代碼以使形狀像在影像中那樣顯示。我也一直在嘗試使用 zip(),但因為在它沒有按照我想要的方式作業之前我從未使用過它
下面是詳細說明需要復制的起始形狀的代碼的一部分。
from tkinter import *
root = Tk()
canvas = Canvas()
canvas.pack()
points = [5, 10, 15, 5, 15, 5, 25, 5, 25, 5, 35, 10, 35, 10, 25, 20, 25, 20, 15, 20]
canvas.create_polygon(points, outline="white", fill="black", width=2)
root.mainloop()
uj5u.com熱心網友回復:
您可以復制和修改資料points以在不同的地方繪制多邊形,但在同一個地方繪制并獲取物件 ID 會更簡單
polygon_id = canvas.create_polygon(...)
并將其移動一些偏移量
canvas.move(polygon_id, offset_x, offset_y)
完整的作業代碼:

import tkinter as tk # PEP8: `import *` is not preferred
root = tk.Tk()
canvas = tk.Canvas()
canvas.pack()
points = [5, 10, 15, 5, 15, 5, 25, 5, 25, 5, 35, 10, 35, 10, 25, 20, 25, 20, 15, 20]
for offset_y in range(0, 300, 30):
for offset_x in range(0, 300, 30):
polygon_id = canvas.create_polygon(points, outline="white", fill="black", width=2)
canvas.move(polygon_id, offset_x, offset_y)
root.mainloop()
另一個例子 - 與row_offset:

import tkinter as tk # PEP8: `import *` is not preferred
root = tk.Tk()
canvas = tk.Canvas()
canvas.pack()
points = [5, 10, 15, 5, 15, 5, 25, 5, 25, 5, 35, 10, 35, 10, 25, 20, 25, 20, 15, 20]
row_offset = 15
for offset_y in range(0, 300, 15):
for offset_x in range(0, 360, 30):
polygon_id = canvas.create_polygon(points, outline="white", fill="black", width=2)
canvas.move(polygon_id, offset_x row_offset, offset_y)
if row_offset == 15:
row_offset = 0
else:
row_offset = 15
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/456974.html
