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)
不是充分的参考,因为对象 test
在 genterrain()
returns 时超出范围并与您的图像一起被垃圾收集.您可以通过注释掉行 sprites.append(sprite)
来测试这一点,然后看到您的图像再次消失。
此外,不清楚您为什么将图像定位在它自己的宽度和高度 - create_image()
的第一个参数是 X 和 Y 位置。我将 canvas 创建移动到 draw()
中,这样我就可以将 canvas 调整为图像,但这不是可见性修复的要求。
我的代码有问题。我正在创建一个名为 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)
不是充分的参考,因为对象 test
在 genterrain()
returns 时超出范围并与您的图像一起被垃圾收集.您可以通过注释掉行 sprites.append(sprite)
来测试这一点,然后看到您的图像再次消失。
此外,不清楚您为什么将图像定位在它自己的宽度和高度 - create_image()
的第一个参数是 X 和 Y 位置。我将 canvas 创建移动到 draw()
中,这样我就可以将 canvas 调整为图像,但这不是可见性修复的要求。