2015-10-12 147 views
0

有什麼方法可以用圖像填充Tkinter元素(更具體地說是橢圓形)。如果沒有,有沒有辦法調整圖像以適合橢圓形?我也不想使用PIL。用圖像填充Tkinter畫布元素

canvas.create_oval(val1, val2, val1+sz, val2+sz, fill=clr, outline=outln) 

你會如何得到一個圖像,以適應像這樣的圓圈?
如果你想知道的話,我肯定會剔除圖像周圍的邊緣。

回答

2

在純Tkinter您的選擇是有限的。有一件事你可以做的是創建一個 '面具'圖像,在中間有一個透明的圓圈。然後降低你的背後的自己的形象。 (雖然效率不是很高)

from tkinter import * 

root = Tk() 
canvas = Canvas(root, width=200, height=200, bd=0, 
       highlightthickness=0) 
canvas.pack() 

mask = PhotoImage(width=200, height=200) 
cx,cy = 100,100 # image & circle center point 
r = 100   # circle radius 
r_squared = r*r 
for y in range(200): 
    for x in range(200): 
     # using the formula for a circle: 
     # (x - h)^2 + (y - k)^2 = r^2 
     # any pixel outside our circle gets filled 
     if (x - cx)**2 + (y - cy)**2 > r_squared: 
      mask.put('blue', (x,y)) 

canvas.create_image(100,100, image=mask, anchor='c') 

myimage = PhotoImage(file='bigpython.gif') 
item = canvas.create_image(100,100, image=myimage, anchor='c') 
canvas.lower(item) 

root.mainloop() 
0

不,沒有辦法將圖像放在橢圓內。也就是說,你不能讓一個人填滿一個橢圓形。圖像只能是矩形。

您不使用PIL調整圖像大小的唯一選擇是調整它的兩倍。

+0

你不是這個意思,「沒有辦法把圖像放在橢圓內嗎?」 – saulspatz

+0

@saulspatz:是的。感謝您注意到這一點。我已經解決了答案。 –

+0

你會怎麼做?我真的需要它是一個圈子,所以應該沒問題。 – lukejano