以下程序是BUG程序,填充不完整,填充采用fill4即4方向填充,速度也慢,图像大了会有stack溢出,本人只是用来测试。
import turtle def get_pixel_color(canvas, x, y): ids = canvas.find_overlapping(x, y, x, y) if len(ids) > 0: # 说明画布上有item,取最上面的item item = ids[-1] color = canvas.itemcget(item,"fill") # 获取这个item的fill填充颜色 color = color.upper() if color != '':r,g,b = canvas.winfo_rgb(color) else: # 否则画布上这个位置没有item,则取背景色 r,g,b = canvas.winfo_rgb(canvas._canvas.config('bg')[-1]) r,g,b = r>>8,g>>8,b>>8 return r,g,b def fill(canvas,x,y,oldcolor,newcolor): if y<=abs(height//2) and x<=abs(width//2): y = -y ss = None all_items = cv.find_all() for item in all_items: zt = cv.itemconfig(item)['state'][-1] if zt=='hidden':continue ss = cv.find_overlapping(x,y,x,y) #print('ss=,',ss) if ss:break if ss == None or (isinstance(ss,tuple) and len(ss)==0 ): se = get_pixel_color(canvas, x,y) #print('se=',se) if se == oldcolor: i = cv.create_line(x,y,x+1,y+1,width=1,fill=newcolor) #print(cv.coords(i)) cv.update() fill(canvas ,x,-y+1,oldcolor,newcolor) fill(canvas ,x,-y-1,oldcolor,newcolor) fill(canvas ,x+1,-y,oldcolor,newcolor) fill(canvas ,x-1,-y,oldcolor,newcolor) turtle.delay(0) turtle.speed(0) width = turtle.window_width() height = turtle.window_height() cv = turtle.getcanvas() turtle.shape('circle') turtle.shapesize(2) turtle.circle(10) turtle.ht() fill(cv,5,5,(255,255,255),'red')
发表评论