Я не могу открыть изображение с помощью canvas и create_image на tkinter

#python #tkinter

#python #tkinter

Вопрос:

Я создаю игру для repl.it игра застряла. Я пытаюсь поместить изображение на canvas, которое было создано в классе, отличном от класса, в котором создается изображение. Canvas успешно отобразил текст и кнопку с изображением, которое мне нужно, но create_image не работает.

Возможно, это проблема с разрешением, но я не могу проверить это прямо сейчас, изображение имеет разрешение 1920 x 1080, как и игра.

Я уже пробовал create_image .

Полная программа (включая изображения)

 class game(Application):
    """Where game elements are to be held"""

    def __init__(self, players, location, sWidth, sHeight, canvas):
        """Initiate variables amp; start game"""

        #Initiate variables
        self.players = players
        self.location = location
        self.screenWidth = sWidth
        self.screenHeight = sHeight
        self.Canvas1 = canvas

        self.LOCATIONS = Application.LOCATIONS
        self.font = Application.font

        #Gathering Images
        self.map1BG = PhotoImage(file = "polasib.gif")

        #Debugging
        print("Loading Map", self.location
        , "nPlayers:", self.players)

        self.createLevel(self.location)

    def createUI(self, players):
        """Creates the UI that all levels will have"""
        self.Canvas1.create_text(self.screenWidth/2, self.screenHeight/16, fill = "white", 
        font = (self.font, self.screenWidth//34), text = self.LOCATIONS[self.location - 1])

    def createLevel(self, location):
        """Creates the elements of the level"""


        if self.location == 1:
            #Polasi b
            print("Creating Polasi b Level")
            self.createUI(self.players) 

            self.Canvas1.create_image(self.screenWidth/2, self.screenHeight/2, image = self.map1BG, 
            anchor = NW)
  

Ожидание: я ожидаю, что изображение загрузится (и что для этого потребуется некоторая перестройка)

Результат: изображение не отображается, но все остальное, добавленное (в качестве теста), работает.

Комментарии:

1. Вы достигли print("Creating Polasi b Level") и почему self.screenHeight/16 и позиции изображения self.screenHeight/2 , изображение, вероятно, находится за пределами self.Canvas1 .

2. Да, оно достигает print("Creating Polasi b Level") деление высоты экрана на 16 позволяет масштабировать разрешение и размещать его там, где мне нужно. Я думаю, вы, вероятно, правы насчет того, что изображение размещается за пределами canvas, но я все еще не смог найти значение, которое работает.

3. Вместо того, чтобы использовать self.screenHeight use self.Canvas1.winfo_height() или использовать .create_image(0, 0... с anchor='nw' . Canvas.create_image-метод

4. Вы присвоили экземпляр game переменной?

5. @acw1668 да, я сделал

Ответ №1:

Поскольку вы не сохранили ссылку на экземпляр game , она будет уничтожена после выхода Application.gameScreen() . Поэтому ссылка на image of create_image будет потеряна, и изображение не будет показано. Попробуйте присвоить экземпляр game переменной экземпляра Application , как показано ниже:

 self.running_game = game(self.players, self.mapChosen, self.screenWidth, self.screenHeight, self.Canvas1)
  

Комментарии:

1. Спасибо, вы разобрались!