#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
useself.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. Спасибо, вы разобрались!