tkinter:在类的init函数之外调用pack()时不显示标签

时间:2013-09-28 12:21:36

标签: python tkinter

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张图像。关于为什么的任何想法?

1 个答案:

答案 0 :(得分:2)

执行“unit_test screen”后,对“testIng”的引用将丢失。 只需使用“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()
相关问题