Python-tkinter:在另一个窗口中打开另一个图像?

时间:2016-06-04 13:24:25

标签: python tkinter tkinter-canvas toplevel photoimage

您好我正在做一份我需要的工作(来自包含图片的tkinter窗口)调用另一个包含另一个imagem的窗口。我尝试了以下内容:

from tkinter import*

def abrir1():
    b =Tk()
    imagen = PhotoImage(file= "F2.png")
    la = Label(b,image =imagen)
    la.pack()

def abrir2():
    b =Toplevel()
    imagen = PhotoImage(file= "F2.png")
    la = Label(b,image =imagen)
    la.pack() 

a = Tk()
canvas = Canvas(a, bg ="black",width = 512,height =512)
canvas.pack()

imagem = PhotoImage(file = "E2.png")
a1 = canvas.create_image(256,256,image = imagem)

btu1 = Button(a,text ="Abri1!",command = abrir1)
btu1.place(x = 150,y=400)
btu2 = Button(a,text ="Abri2!",command = abrir2)
btu2.place(x = 300,y=400)

但是当我按下第一个按钮(btu1)时,它会返回以下错误消息:

  

_tkinter.TclError:图片“pyimage2”不存在

当我按下第二个按钮(btu2)时没有发生错误但没有显示图像,只创建了新窗口;

我尝试了几种方法,包括将 *与画布 放在 ,而不使用画布* < / strong>;

1 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题。

第一个问题是您正在创建Tk的两个实例。 tkinter程序只需要一个实例。

第二个问题是您创建的图像被保存为局部变量。当函数返回时,变量被垃圾收集。当垃圾收集tkinter图像时,即使窗口小部件仍然存在,图像数据也会被丢弃。

对互联网进行非常基本的搜索会产生以下页面:http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm