有什么方法可以用图像填充Tkinter元素(更具体地说是椭圆形)。如果没有,有没有办法调整图像以适合椭圆形?我也不想使用PIL。用图像填充Tkinter画布元素
canvas.create_oval(val1, val2, val1+sz, val2+sz, fill=clr, outline=outln)
你会如何得到一个图像,以适应像这样的圆圈?
如果你想知道的话,我肯定会剔除图像周围的边缘。
有什么方法可以用图像填充Tkinter元素(更具体地说是椭圆形)。如果没有,有没有办法调整图像以适合椭圆形?我也不想使用PIL。用图像填充Tkinter画布元素
canvas.create_oval(val1, val2, val1+sz, val2+sz, fill=clr, outline=outln)
你会如何得到一个图像,以适应像这样的圆圈?
如果你想知道的话,我肯定会剔除图像周围的边缘。
在纯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()
不,没有办法将图像放在椭圆内。也就是说,你不能让一个人填满一个椭圆形。图像只能是矩形。
您不使用PIL调整图像大小的唯一选择是调整它的两倍。
你不是这个意思,“没有办法把图像放在椭圆内吗?” – saulspatz
@saulspatz:是的。感谢您注意到这一点。我已经解决了答案。 –
你会怎么做?我真的需要它是一个圈子,所以应该没问题。 – lukejano