2017-06-04 78 views
1

我不知道爲什麼我的畫布不顯示。有一個參考,self._screen,它是pack ed,但它根本不顯示。我錯過了什麼?爲什麼我的畫布和/或我的照片不顯示?

class Map(Frame): 

    def __init__(self, size): 

     Frame.__init__(self) 
     self.pack() 

     #images 
     self.spriteDimension = 20 
     self.img1 = PhotoImage(file="Terrain1.gif") 
     self.img2 = PhotoImage(file="Terrain2.gif") 

     #grid 
     self._mapSize = size 
     # self._grid = self.randomize() 

     #canvas 
     canvas_dimension = self._mapSize * self.spriteDimension 

     self._screen = Canvas(self, width=canvas_dimension, height=canvas_dimension) 
     self._screen.pack() 

     self.test() 

    def test(self): 
     print("in here") 
     self._screen.create_image((50,50), anchor = NW, image = self.img1) 
     print("out here") 

def main(): 

    m =Map(20); 
    m.mainloop(20); 
+0

刪除'mainloop'的參數:即使用'm.mainloop()'。你也不需要結尾的分號,但它們不會傷到任何東西, – martineau

+0

我的歉意我忘了編輯那個錯誤 –

回答

0

你有幾個我能看到的問題。 與其他編程語言不同,在代碼行末尾不使用;。您不需要在功能中放置m = Map(20)root.mainloop()。您還需要定義一個tkinter窗口,以便將root = Tk()添加到程序的開頭。看看下面的代碼,讓我知道如果你不明白的東西。

from tkinter import * 

root = Tk() 

class Map(Frame): 

    def __init__(self, size): 

     Frame.__init__(self) 
     self.pack() 

     self.spriteDimension = 20 
     self.img1 = PhotoImage(file="Terrain1.gif") 
     self.img2 = PhotoImage(file="Terrain2.gif") 

     self._mapSize = size 

     canvas_dimension = self._mapSize * self.spriteDimension 

     self._screen = Canvas(self, width=canvas_dimension, height=canvas_dimension) 
     self._screen.pack() 

     self.test() 

    def test(self): 
     print("in here") 
     self._screen.create_image((50,50), anchor = NW, image = self.img1) 
     print("out here") 

m = Map(20) 
root.mainloop() 
+0

非常感謝!幫了很多,但我確實有一個問題。在一個時間點,我的畫布沒有根(我不記得確切的條件)所以,實例化根的目的是什麼? –

+0

好的,所以對於tkinter你開始通過創建主要的頂層窗口來使用[Tk()](https://docs.python.org/3/library/tkinter.html#tkinter.Tk)和那麼在GUI代碼的底部,你必須調用'mainloop()'一次。這樣做的原因是要監視GUI中發生的所有事件,以便可以與事件交互並進行更新。它有點像程序的一個大循環,因此得名。看看這個[鏈接](https://stackoverflow.com/questions/8683217/when-do-i-need-to-call-mainloop-in-a-tkinter-application)。有更多關於'mainloop()'的信息 –

相關問題