所以我有一個回圈在畫布上制作多個畫布影像。
但是當我運行我的代碼時,只出現一張影像。
(假設視窗已經設定root并被PIL匯入)
1 x,y = 0
2 tiles = []
3 tilesize = 32
4 gridwidth = 10
5 gridheight = 10
3 canvas=Canvas(root, width=500, height=500, bg="#800000")
4 for i in tiles:
5 image = PIL.ImageTk.PhotoImage(PIL.Image.open("tile.png").resize((tilesize, tilesize), PIL.Image.ANTIALIAS))
6 tiles.append(canvas.create_image(x*tilesize, y*tilesize, image=image, anchor=NW))
7 x =1
8 if x%gridwidth == 0:
9 y =1
10 x=0
11 if y == gridheight 1:
12 # Do some error handling stuff
如果在此之后如果我添加print(tiles)我會看到一個遞增值串列,應該是這樣。例如:
[1, 2, 3, 4, 5...98, 99, 100]
如果我運行這個:
13 test=[]
14 for i in tiles:
15 test.append(canvas.coords(i))
16 print(test)
我看到所有的瓷磚都有不同的坐標,但它們都顯示為一個影像。我的預期輸出是它們顯示為網格,但這不會發生。為什么會發生這種情況,有什么解決辦法嗎?不,該grid功能對我當前的背景關系沒有幫助。
uj5u.com熱心網友回復:
image由于您對 for 回圈中創建的所有影像使用相同的變數,因此只有最后一個影像被參考,image并且之前的影像將被垃圾收集。
使用串列來存盤影像的實體:
...
from PIL import Image, ImageTk
...
imagelist = []
for i in range(gridwidth*gridheight):
y, x = divmod(i, gridwidth)
image = ImageTk.PhotoImage(Image.open("tile.png").resize((tilesize, tilesize), Image.ANTIALIAS))
tiles.append(canvas.create_image(x*tilesize, y*tilesize, image=image, anchor=NW))
imagelist.append(image) # save the image reference
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/417500.html
標籤:
