我只是想做一个程序,点击一个图像,并查看它在全屏.我使用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
异常。我可能做错了什么呢?
1条答案
按热度按时间czq61nw11#
我猜这是因为你在创建根窗口之前调用了
filedialog.askopenfilename
。因此,tkinter会自动为你创建一个根窗口。然后你创建了第二个根窗口,但默认情况下你创建的镜像是由原来的根窗口拥有的。因此,你创建的根窗口不知道这个镜像。您需要在创建
askopenfilename
方法之前创建根窗口,或者将图像创建为根窗口的子窗口。下面的示例显示了后者: