2017-10-01 133 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