Tkinter按钮小部件无法找到图像,错误图像不存在

时间:2019-03-27 16:53:16

标签: python tkinter

尝试将图像放置在按钮中时,出现错误“ _tkinter.TclError:图像“ pyimage1”不存在”。该图像确实存在,因为我在另一个按钮上使用了该图像,并且该图像在此起作用。 当我尝试在第二个按钮上再次使用该图像时,即发生错误。

我尝试删除图像,该按钮起作用。尝试使用其他按钮上的图像,并且仅适用于一个按钮。

from tkinter import ttk
from tkinter import Tk, PhotoImage


class Window(Tk):
    def __init__(self, *args, **kwargs):
        Tk.__init__(self, *args, **kwargs)


def main():
    root = Tk()
    style = ttk.Style(root)
    style.theme_use('clam')

    root2 = Tk()
    style = ttk.Style(root2)
    style.theme_use('alt')

    root3 = Tk()
    style = ttk.Style(root3)
    style.theme_use('classic')

    root4 = Window()
    style = ttk.Style(root4)
    style.theme_use('default')

    icon = PhotoImage(file='test.gif')
    # This line works, the image appears on the button.
    ttk.Button(root, image=icon, compound='left', text="Quit", command=root.destroy).pack()

    # This line works with out the image.
    ttk.Button(root2, compound='left', text="Quit", command=root2.destroy).pack()

    # This line does not work with an image.
    # if the line below is un-commented the code does not work, the error I get is below.
    # _tkinter.TclError: image "pyimage1" doesn't exist

    # ttk.Button(root2, image=icon, compound='left', text="Quit", command=root2.destroy).pack()

    ttk.Button(root3, text="Quit", command=root3.destroy).pack()

    ttk.Button(root4, text="Quit", command=root4.destroy).pack()

    root.mainloop()


if __name__ == '__main__':
    main()

我希望所有按钮上都有图像。 我只能让它只适用于一个按钮。

1 个答案:

答案 0 :(得分:3)

您将必须使用master关键字为每个窗口创建另一个PhotoImage:

icon = PhotoImage(master=root, file='test.gif')
icon2 = PhotoImage(master=root2, file='test.gif')
icon3 = PhotoImage(master=root3, file='test.gif')
icon4 = PhotoImage(master=root4, file='test.gif')

然后将每个图标用于相应的按钮:

ttk.Button(root, image=icon, compound='left', text='Quit', command=root.destroy).pack()
ttk.Button(root2, image=icon2, text='Quit', command=root2.destroy).pack()
ttk.Button(root3, image=icon3, text='Quit', command=root3.destroy).pack()
ttk.Button(root4, image=icon4, text='Quit', command=root4.destroy).pack()

希望这对您有用。