【python】关于_tkinter.TclError: image "pyimage1" doesn't exist 问题的解决办法

源代码如下:

from tkinter import *
from tkinter.filedialog import askopenfilename
from PIL import Image,ImageTk

class mainapp:
    def __init__(self):
        root=Tk()
        root.title("Several")
        root.geometry('200x300')
        Button(root,text='自动取点',command=self.another1).place(relx=0.3,rely=0.15,anchor=CENTER)
        Button(root,text='图片翻转').place(relx=0.7,rely=0.15,anchor=CENTER)
        root.mainloop()
    def another1(self):
        qudian()
    def another2(self):
        fanzhuan
        
class qudian:
    def __init__(self):
        r1=Tk()
        r1.title('自动取点')
        r1.geometry('400x400')
        Label(r1,text='图片路径:').place(relx=0,rely=0.04)
        e1=Entry(r1)
        e1.place(relx=0.15,rely=0.04)
        Button(r1,text='选择图片').place(relx=0.52,rely=0.02)
        Label(r1,text="所选择的图片:").place(relx=0,rely=0.13)
        img_open=Image.open('desert.jpg')
        img_open.thumbnail((200,200))
        img=ImageTk.PhotoImage(img_open)
        l1=Label(r1,image=img)
        l1.place(relx=0,rely=0.18)
        r1.mainloop()
class fanzhuan:
    def __init__(self):
        r2=Tk()
        r2.mainloop()
mainapp()

运行以后报错:


image

之后去网上查了解决办法,在 https://zhidao.baidu.com/question/1800925191188288187.html 这个网址下找到了正确答案。因为在一个程序中只能存在一个根窗口,也就是说只能存在一个Tk(),其他的窗口只能以顶层窗口(Toplevel())的形式存在。

于是将qudian类下的Tk()改成Toplevel()后,问题完全解决。

修改后的代码:

class qudian:
    def __init__(self):
        r1=Toplevel()
        r1.title('自动取点')
        r1.geometry('400x400')
        Label(r1,text='图片路径:').place(relx=0,rely=0.04)
        e1=Entry(r1)
        e1.place(relx=0.15,rely=0.04)
        Button(r1,text='选择图片').place(relx=0.52,rely=0.02)
        Label(r1,text="所选择的图片:").place(relx=0,rely=0.13)
        img_open=Image.open('desert.jpg')
        img_open.thumbnail((200,200))
        img=ImageTk.PhotoImage(img_open)
        l1=Label(r1,image=img)
        l1.place(relx=0,rely=0.18)
        r1.mainloop()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,677评论 0 13
  • 概述 在浏览器中,window对象(注意,w为小写)指当前的浏览器窗口。它也是所有对象的顶层对象。 “顶层对象”指...
    许先生__阅读 5,636评论 0 6
  • 虽然这是tk的教程,但是我个人还是比较推荐使用pyqt来写窗口,实际上pyqt配合qtdesigner写的窗口不仅...
    遗步看风景阅读 40,348评论 3 39
  • 新手入市,要做的就是先学习好盘面基本的形态指标,根据这些形态把握分析个股+老股民Q阿成 2109311879交流把握
    eb46eaa090e2阅读 903评论 0 1
  • 要声明,目前,我不是学霸,只是想在学习的过程中,把我知道的资源分享给大家。 具体因为什么学韩语,请自行去看《我为什...
    五月Mayecho阅读 9,041评论 9 43