-2

こんにちは、必要な仕事をしています(画像を含むtkinterウィンドウから)別の画像を含む別のウィンドウを呼び出しますm.Iは次のことを試しました:

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" が存在しません

そして、2番目のボタン( btu2 )を押してもエラーは発生しませんが、画像は表示されず、新しいウィンドウのみが作成されます。

* をキャンバスに配置するなど、いくつかの方法を試しましたキャンバスなし* ;

4

1 に答える 1

0

コードには 2 つの問題があります。

最初の問題は、 の 2 つのインスタンスを作成していることですTk。tkinter プログラムには、インスタンスが 1 つだけ必要です。

2 つ目の問題は、作成しているイメージがローカル変数として保存されることです。関数が戻ると、変数はガベージ コレクションされます。tkinter イメージがガベージ コレクションされると、ウィジェットがまだ存在していても、イメージ データは破棄されます。

非常に基本的なインターネット検索で、次のページが表示されます: http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

于 2016-06-04T14:28:12.157 に答える