python-3.x 极其简单的图像查看程序抛出“pyimage1不存在”异常

wrrgggsh  于 2023-03-24  发布在  Python
关注(0)|答案(1)|浏览(158)

我只是想做一个程序,点击一个图像,并查看它在全屏.我使用Visual Studio 2022.我的环境是Python 3.9(64位).枕头(9.4.0)安装在环境中.我在Windows 11.这里是完整的代码:

import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk
import os

def main():
    image_path = filedialog.askopenfilename(title="Select Image")
    root = tk.Tk()
    root.attributes('-fullscreen', True)
    canvas = tk.Canvas(root, bg="black")
    canvas.pack(fill=tk.BOTH, expand=True)
    pil_image = Image.open(image_path)
    pil_image = pil_image.resize((root.winfo_screenwidth(), root.winfo_screenheight()), Image.LANCZOS)
    tk_image = ImageTk.PhotoImage(pil_image)
    canvas.create_image(root.winfo_screenwidth() // 2, root.winfo_screenheight() // 2, image=tk_image)
    root.mainloop()

if __name__ == '__main__':
    main()

这段代码在我运行它并选择了一个图像之后抛出了一个image "pyimage1" doesn't exist异常。我可能做错了什么呢?

czq61nw1

czq61nw11#

我猜这是因为你在创建根窗口之前调用了filedialog.askopenfilename。因此,tkinter会自动为你创建一个根窗口。然后你创建了第二个根窗口,但默认情况下你创建的镜像是由原来的根窗口拥有的。因此,你创建的根窗口不知道这个镜像。
您需要在创建askopenfilename方法之前创建根窗口,或者将图像创建为根窗口的子窗口。下面的示例显示了后者:

tk_image = ImageTk.PhotoImage(pil_image, master=root)

相关问题