【问题标题】:Python- tkinter: Opening One Another image in another window?Python- tkinter:在另一个窗口中打开另一个图像?
【发布时间】:2016-06-04 13:24:25
【问题描述】:

您好,我正在做我需要的工作(从包含图像的 tkinter 窗口)调用另一个包含另一个图像的窗口。我尝试了以下操作:

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 ) 时不会发生错误但不显示图像,只会创建新窗口;

我尝试了几种方法,包括将 * 与 canvas 不使用 canvas* ;

【问题讨论】:

  • * 上的所有问题都应该用英文发布,以便每个人都能理解问题并提供可能的解决方案。
  • 问题是您正在创建Tk 的两个实例:a=Tk()b=Tk()。您只能创建一个实例。
  • 是的,我想通了,所以我创建了函数def abir2(): 创建了一个Toplevel ( ) tkinter 的第二个实例没有问题。如果您能提出另一种方法,我将不胜感激。
  • Suever 我更正了语言。

标签: python tkinter tkinter-canvas toplevel photoimage


【解决方案1】:

您的代码中有两个问题。

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

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

互联网的一个非常基本的搜索产生这个页面:http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

【讨论】:

  • 哥们,你帮了我很多。谢谢你的快速和有效的回答。
最近更新 更多