Tkinter canvas PhotoImage 没有出现

Tkinter canvas PhotoImage is not appearing

我的代码有问题。我正在创建一个名为 Lumanite 的小型视频游戏。我已经创建了主页并开始了图形生成,但是我有 运行 个错误。我正在使用 Python 3.3 并且在 Win 10 笔记本电脑上。我 运行 程序通过 运行 文件访问 main_game 文件,该文件使用单独文件 sprites类 中概述的 类。我想让一个精灵出现。这是 main_game 文件和 sprites类 文件的代码。 (他们从 MENU 文件导入 canvas 和 root)

#SPRITES
from tkinter import *
from GUI_FILE import canvas, root
from OPENING_FILE import show, hide

class Sprite():
     def __init__(self, photoplace):
          self.orgin = photoplace
          self.photo = PhotoImage(file=photoplace)
          self.w = self.photo.width()
          self.h = self.photo.height()
     def draw(self):
          self.sprite = canvas.create_image(self.h, self.w, image=self.photo)

和 MAIN_GAME 文件:

#Main Game File:
from tkinter import *
from OPENING_FILE import show, hide
from GUI_FILE import root, canvas
from spritesclasses import *


def start_game():
      genterrain()

def genterrain():
       test = Sprite("logo.gif")
       test.draw()

精灵没有出现。没有错误或任何东西。请帮我。我会在另行通知时为您提供信息。

这是一个已知但棘手的问题。您可以在 Why do my Tkinter images not appear? 中阅读相关内容我已经在下面实施了一种可能的解决方案:

from tkinter import *

class Sprite():
    def __init__(self, photoplace):
        self.photo = PhotoImage(file=photoplace)
        self.w = self.photo.width()
        self.h = self.photo.height()
        self.sprite = None

    def draw(self):
        canvas = Canvas(root, width=self.w, height=self.h)
        canvas.pack()
        self.sprite = canvas.create_image(0, 0, anchor=NW, image=self.photo)

def start_game():
    genterrain()

def genterrain():
    sprite = Sprite("logo.gif")
    sprite.draw()
    sprites.append(sprite)  # keep a reference!

root = Tk()

sprites = []

start_game()

root.mainloop()

赋值 self.photo = PhotoImage(file=photoplace) 不是充分的参考,因为对象 testgenterrain() returns 时超出范围并与您的图像一起被垃圾收集.您可以通过注释掉行 sprites.append(sprite) 来测试这一点,然后看到您的图像再次消失。

此外,不清楚您为什么将图像定位在它自己的宽度和高度 - create_image() 的第一个参数是 X 和 Y 位置。我将 canvas 创建移动到 draw() 中,这样我就可以将 canvas 调整为图像,但这不是可见性修复的要求。