Tkinter帆布PhotoImage没有出现

时间:2017-10-01 00:00:14

标签: python python-3.x tkinter tkinter-canvas

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

#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()

精灵没有出现。没有错误或任何事情。请帮我。我会在进一步通知的情况下向您提供信息。

1 个答案:

答案 0 :(得分:0)

这是一个已知但棘手的问题。您可以在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)并不足以作为参考,因为test返回时对象genterrain()超出范围,并且会与图像一起进行垃圾回收。您可以通过注释掉sprites.append(sprite)行来测试这一点,然后再次看到您的图片消失。

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