问题描述
我正在使用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 (将#修改为@)