我知道这个问题已经被问到并解决了,买我仍然保持同样的问题。
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来保持引用,但该代码在此代码之前的行中中断了。 当我运行它时,它表示即使出现“弹出”窗口,该图像也不存在,并且当在标签内编码文本而不是图像时,效果很好。
谢谢。
答案 0 :(得分:0)
如果从另一个Tkinter窗口调用showpopup
,则应使用Toplevel()
而不是Tk()
。您不能有两个Tk()
实例。