用图像填充Tkinter画布元素

时间:2015-10-12 02:02:57

标签: python python-2.7 tkinter tkinter-canvas

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

$(function(){
   var len = $('#groupContainer > div').length;
   var data = [];

   for(var i=0; i < len; i++){

      var number = $('#name_' + [i + 1]);
      var date = $('#date_' + [i + 1]);
      var count = i + 1;
      var message ="";

      var a = number.map(function(){
              return this.value;
      });

      var b = date.map(function(){
              return this.value;
       });

        var newObj = {Name: a[0], Date: b[0]}
                data.push(newObj);
        }

        var message = "";
        var ErrInGroup = false;

        for(var i = 0; i < data.length; i++)
        {
          for(var d in data[i]) {

            if(data[i].hasOwnProperty(d)) {
                 message += 'Group: ' + [i + 1] + '\n'; 
                 if(data[i][d] == "" || data[i][d] == null){
                           message += d + ' is required!\n';
                 }

                 if(d == "Date") {
                   if(data[i][d].length != 10 && data[i][d] != "") {
                       message += 'Invalid Date!\n';
                   }
                 }

             }
          }
        }

     if(message){
         alert(message);
      }

});

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

2 个答案:

答案 0 :(得分:2)

在普通Tkinter中,您的选择是有限的。你能做的一件事就是创造一个 'mask'图像,中间有一个透明圆圈。然后降低你的 在它后面拥有自己的形象。 (虽然效率不高)

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()

答案 1 :(得分:0)

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

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