【问题标题】:Filling a Tkinter Canvas Element with an Image用图像填充 Tkinter 画布元素
【发布时间】:2016-01-09 09:43:48
【问题描述】:

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

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

如何让图像适合这样的圆圈?
如果您想知道的话,我当然也会剔除图像周围的边缘。

【问题讨论】:

    标签: python python-2.7 tkinter tkinter-canvas


    【解决方案1】:

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

    【讨论】:

      【解决方案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()
      

      【讨论】:

        【解决方案3】:

        不,没有办法将图像放在椭圆形内。也就是说,你不能把一个椭圆填满。图片只能是矩形的。

        在不使用 PIL 的情况下调整图像大小的唯一选择是将其大小调整为两倍。

        【讨论】:

        • 你会怎么做呢?我真正需要的只是一个圆圈,所以应该没问题。
        猜你喜欢
        • 1970-01-01
        • 2011-07-18
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-18
        相关资源
        最近更新 更多