我的代码有问题。我正在创建一个名为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()
精灵没有出现。没有错误或任何事情。请帮我。我会在进一步通知的情况下向您提供信息。
答案 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()
,因此我可以将画布调整为图像大小,但这不是可见性修复的要求。