2017-06-04 16 views
1

キャンバスが表示されない理由がわかりません。それは参考になっており、self._screenで、packになっていますが、全く表示されません。私は何が欠けていますか?キャンバスやフォト画像が表示されないのはなぜですか?

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

OKだから、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()'についてさらに詳しい情報があります。 –

関連する問題