2015-10-12 177 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