繁体   English   中英

用图像填充 Tkinter 画布元素

[英]Filling a Tkinter Canvas Element with an Image

有没有办法用图像填充 Tkinter 元素(更具体地说是椭圆形)。 如果没有,有没有办法调整图像大小以适应椭圆形? 我也不想使用 PIL。

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的情况下调整图像大小的唯一选择是将其调整为2倍。

我已经尝试了所有方法来尝试让照片适合一个圆圈,但唯一一种有效的方法是使用 Windows 中的 Paint 2D 应用程序调整图像大小,然后使用调整大小的图像作为用于填充的图像圆圈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM