尝试调用图像查看器模块时获取“\u tkinter.TclError:图像“pyimage1”不存在”

2024-09-27 07:32:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个启动器应用程序,它假设使用一个按钮从单独的模块调用函数。我有一个名为“image_viewer”的模块,其中包含一个类函数,该类函数假定在单击按钮后显示图像。image_viewer函数在其原始模块中工作正常,但当我尝试从启动程序模块调用它时,收到错误“\u tkinter.TclError:image“pyimage1”不存在”。我已经包括了我的启动程序和图像查看器模块的代码,供您在下面参考

图像\u查看器模块:

    from PIL import ImageTk, Image
    import tkinter as tk
    
    class ImageViewer:
        def __init__(self, root, image_filename):
            self.root = root
            self.image_filename = image_filename
    
            self.root.title('ImageViewer')
            self.root.geometry('400x350')
    
            self.canvas = tk.Canvas(self.root, width=300, height=300)
            self.canvas.place(x=10, y=10)
    
            self.btnView = tk.Button(text='View', command=self.view_image)
            self.btnView.place(x=20, y=265)
    
            self.btnClose = tk.Button(text='close', command=lambda:[self.destroy(), self.clear()])
            self.btnClose.place(x=65, y=265)
    
        def view_image(self):
            self.img = ImageTk.PhotoImage(Image.open(self.image_filename))  # Keep ref to image.
            self.canvas.create_image(20, 20, anchor=tk.NW, image=self.img)
        def destroy(self):
            self.root.destroy()
        def clear(self):
            self.btnClose.destroy()
            self.btnView.destroy()
    
    def main(image_filename):
        root = tk.Tk()
        ImageViewer(root, image_filename)
        root.mainloop()
    
    if __name__ == '__main__':
        main('../raw/as.png')

启动器模块:

    from audioplayer import audioplayer
    from texteditor import editor
    from imageviewer import image_viewer
    import tkinter as tk
    
    class Launcher:
        def __init__(self, win):  
            self.root = win
            self.root.title('Launcher')
            self.root.geometry('400x350')
            
            self.btnEditor = tk.Button(text='Editor', command=self.editor, padx=10)
            self.btnEditor.pack(side=tk.LEFT)
            self.btnEditor.place(x=5, y=315)
            
            self.btnAudio = tk.Button(text='AudioPlayer', command=self.audioplayer, padx=10)
            self.btnAudio.pack(side=tk.LEFT)
            self.btnAudio.place(x=75, y=315)
            
            self.btnImage = tk.Button(text='ImageViewer', command=self.imageviewer, padx=10)
            self.btnImage.pack(side=tk.LEFT)
            self.btnImage.place(x=178, y=315)
            
            self.quit_button = tk.Button(text = "Quit", command=self.quit, padx=10)
            self.quit_button.pack(side=tk.LEFT)
            self.quit_button.place(x=340, y=315)
            
        def editor(self):
            editor.main()
    
        def audioplayer(self):
            audioplayer.main()
            
        def imageviewer(self):
            image_viewer.main('../raw/as.png')
            
        def quit(self):
            self.root.destroy()
    
    def main():
        root = tk.Tk()
        Launcher(root)
        root.mainloop()
    
    if __name__ == '__main__':
        main()  

Tags: 模块textimageimportselfmaindefplace

热门问题