Python Turtle Tile类错误

问题描述

我正在使用this answer中的代码来使用Python Turtle Graphics制作可点击的编号图块。由于某种原因,我的代码创建的图块具有第二个图块集(红色)的颜色,而不是第一个图块集(蓝色)的颜色。

我尝试检查不同颜色的图块是否以某种方式引用了同一对象,但是事实并非如此。谁能告诉我如何解决这个问题?

from tileset_so import TileSet
from turtle import Screen

SIZE = 4
screen = Screen()

# Tiles
tileset1 = TileSet(background_color="blue")
tileset2 = TileSet(background_color="red")

tiles1 = []
tiles2 = []

blue_tile = tileset1.make_tile("here")
red_tile = tileset2.make_tile("here") # works fine with "there"
blue_tile.goto(100,100)
red_tile.goto(-100,100)

print(id(blue_tile),id(red_tile))
print(id(tileset1),id(tileset2))

screen.mainloop()
# tileset.py

from turtle import Screen,Turtle,Shape
from PIL import Image,ImageDraw,ImageFont,ImageTk

DEFAULT_FONT_FILE = "C:\Windows\Fonts\courbd.ttf"  # adjust for your system
DEFAULT_POINT_SIZE = 32
DEFAULT_OUTLINE_SIZE = 1
DEFAULT_OUTLINE_COLOR = 'black'
DEFAULT_BACKGROUND_COLOR = 'white'

class Tile(Turtle):
    def __init__(self,shape,size):
        super().__init__(shape)
        self.penup()

        self.size = size

    def tile_size(self):
        return self.size

class TileSet():

    def __init__(self,font_file=DEFAULT_FONT_FILE,point_size=DEFAULT_POINT_SIZE,background_color=DEFAULT_BACKGROUND_COLOR,outline_size=DEFAULT_OUTLINE_SIZE,outline_color=DEFAULT_OUTLINE_COLOR):
        self.font = ImageFont.truetype(font_file,point_size)
        self.image = Image.new("RGB",(point_size,point_size))
        self.draw = ImageDraw.Draw(self.image)

        self.background_color = background_color
        self.outline_size = outline_size
        self.outline_color = outline_color

    def register_image(self,string):
        width,height = self.draw.textsize(string,font=self.font)
        image = Image.new("RGB",(width + self.outline_size*2,height + self.outline_size*2),self.background_color)
        draw = ImageDraw.Draw(image)
        tile_size = (width + self.outline_size,height + self.outline_size)
        draw.rectangle([(0,0),tile_size],outline=self.outline_color)
        draw.text((0,string,font=self.font,fill="#000000")
        photo_image = ImageTk.PhotoImage(image)
        shape = Shape("image",photo_image)
        Screen()._shapes[string] = shape  # underpinning,not published API

        return tile_size

    def make_tile(self,string):
        tile_size = self.register_image(string)
        return Tile(string,tile_size)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)