2017-10-01 94 views
0

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

#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

这是一个已知但棘手的问题。您可以在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(),所以我可以根据图像调整画布大小,但这不是可见性修补程序的要求。

+0

非常感谢。我真的需要这个。 – Lumater