'Is it have any transformation class and abject in python?

It look weird when its transform.
What I did wrong on tk.canvas? Or tkinter object or my logic wrong?
The base enemy class just a enemy that can do anything.

class TransformEnemy(Enemy):
    """This Enemy can transform into other Enemy evey 3 seconds"""

    SPEED = 6
    now_enemy = None
    __borntime = perf_counter()

    def __init__(self, game: "turtle_adventure.TurtleAdventureGame", size: int, color: str):
        super().__init__(game, size, color)
        # self.__borntime = perf_counter()
        self.enemy_list = [RandomWalkEnemy(game, size=20, color='red'), ChasingEnemy(
            game,  size=15, color='green'), FencingEnemy(game, size=10, color='brown'), None]

    @classmethod
    def get_enemy(cls):
        return cls.now_enemy

    @classmethod
    def set_enemy(cls, enemy):
        if not isinstance(enemy, (Enemy, type(None))):
            raise TypeError("enemy must be an instance of Enemy") 
        cls.now_enemy = enemy

    @classmethod
    @property
    def elasped_time(cls) -> float:
        return perf_counter() - cls.__borntime

    def create(self) -> None:
        for enemy in self.enemy_list:
            if enemy is not None:
                enemy.create()
            else:
                super().create()

    def spawn(self) -> None:
        for enemy in self.enemy_list:
            if enemy is not None:
                enemy.spawn()
            else:
                super().spawn()

    def delete(self) -> None:
        for enemy in self.enemy_list:
            if enemy is not None:
                enemy.delete()
            else:
                super().delete()

    def render(self) -> None:

        now_enemy = TransformEnemy.get_enemy()
        for enemy in self.enemy_list:
            enemy_id = self._id if enemy is None else enemy._id
            if enemy is now_enemy:
                self.canvas.itemconfigure(enemy_id, state='normal')
            else:
                self.canvas.itemconfigure(enemy_id, state='hidden')

            if enemy is not None:
                enemy.render()
            else:
                super().render()


    def motion(self):
        if not TransformEnemy.now_enemy:
            super().motion()
        else:
            TransformEnemy.now_enemy.motion()
        self.transform()

    def transform(self):
        self.canvas.itemconfigure(self._id, state='hidden')
        if not floor(self.elasped_time) % 5:
            TransformEnemy.set_enemy(random.choice(self.enemy_list))
            now_enemy = TransformEnemy.get_enemy()
            now_enemy_id = self._id if now_enemy is None else now_enemy._id
            self.canvas.itemconfigure(now_enemy_id, state='normal')

When it transform it should be a smooth transform not like this

when it transform it should be a smooth transform not like this

this when transform it just a other Enemy fill with a canvas.
It not a smooth transform...


This unimportant

I write this paragraph more because stackoverflow not lets me to ask the question I will write and write more untill its lets me ask now Im going to ask some bug that I found please lets me ask



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source