_tkinter.TclError:无论我如何编码,图像“ ...”都不存在

时间:2018-06-24 12:53:06

标签: python python-3.x image tkinter

我知道这个问题已经被问到并解决了,买我仍然保持同样的问题。

def showpopup(self, event, item):
    global r

    if str(event.type) == "Enter":
        r = tk.Tk()
        r.geometry("400x900+{:}+{:}".format(self.winfo_rootx()+840, self.winfo_rooty()))
        r.wm_title("Pop UP")
        r.overrideredirect(True)
        im = Image.open(os.path.join(images_db_dir, "a.png"))
        imaitem = ImageTk.PhotoImage(im)
        r.columnconfigure(0, weight=1)
        r.rowconfigure(0, weight=1)

        mf = tk.Frame(r)
        mf.grid(row = 0, column=0, sticky="nsew")    

        mf.grid_columnconfigure(0, weight=1)
        f1, f2 = tk.Frame(mf, , tk.Frame(mf, background="red")
        f1.place(x=5, y=5, anchor="nw", width=390, height=390)
        f2.place(x=0, y=405, anchor="nw", width=400, height=400)

        l = tk.Label(f1, image = imaitem)
        l.image = imaitem
        l.grid()
        r.mainloop()

    elif str(event.type) == "Leave":
        r.destroy()

该程序是大型程序的一部分,当event.type为“ Enter”时显示“弹出”(由tkinter对象制成),而在“ Leave”时显示为“销毁”。无论如何,尽管我通过编码l.image = imaitem来保持引用,但该代码在此代码之前的行中中断了。 当我运行它时,它表示即使出现“弹出”窗口,该图像也不存在,并且当在标签内编码文本而不是图像时,效果很好。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果从另一个Tkinter窗口调用showpopup,则应使用Toplevel()而不是Tk()。您不能有两个Tk()实例。