0

Python バージョン: 2.7

tkinter を使用して 2 つの画像を単純にロードする関数を作成しようとしています。私のコードは次のとおりです。

from Tkinter import *

class ImageTest(object):
    def __init__(self):

        self.window = Tk()
        self.window.geometry('300x300')

        testImg = PhotoImage(file='test.gif')
        label1 = Label(self.gameWindow, image=testImg )
        label1.pack()
        label2 = Label(self.gameWindow, image=testImg )
        label2.pack()

        #self.init_test_screen()

        self.window.mainloop()

    def init_test_screen(self):

        testImg = PhotoImage(file='test.gif')
        label1 = Label(self.gameWindow, image=testImg )
        label1.pack()
        label2 = Label(self.gameWindow, image=testImg )
        label2.pack()

imagetest = ImageTest()

これは期待どおりに機能しますが、やりたいことは、label1 と label2 の初期化を init_test_screen() に委任することです。initを次のように変更した場合:

def __init__(self):

        self.window = Tk()
        self.window.geometry('300x300')

        #testImg = PhotoImage(file='test.gif')
        #label1 = Label(self.gameWindow, image=testImg )
        #label1.pack()
        #label2 = Label(self.gameWindow, image=testImg )
        #label2.pack()

        self.init_test_screen()

        self.window.mainloop()

2 つの画像が表示されなくなりました。理由についてのアイデアはありますか?

4

1 に答える 1

2

「init_test_screen」の実行後、「testImg」への参照が失われます。「self」を使用してオブジェクト内に保存するだけです。

from Tkinter import *

class ImageTest(object):
    def __init__(self):

        self.window = Tk()
        self.window.geometry('300x300')

        self.init_test_screen()

        self.window.mainloop()

    def init_test_screen(self):

        self.testImg = PhotoImage(file='test.gif')
        label1 = Label(self.window, image=self.testImg )
        label1.pack()
        label2 = Label(self.window, image=self.testImg )
        label2.pack()

imagetest = ImageTest()
于 2013-09-28T12:32:04.863 に答える