2016-06-04 15 views
-2

안녕하세요 저는 (이미지를 포함하는 Tkinter의 창에서) 필요한 작업 다른 imagem.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: image "pyimage2" doesn't exist

와 나는 오류가 발생하지 않습니다 두 번째 버튼 (btu2)를 누르면하지만 이미지 만 새 창이 생성을 표시하지 않을 때 때

내가 캔버스 *를 배치하는 등 여러 가지 방법을 시도했습니다 캔버스없이 *;

+0

모든 질문은 영어로 게시해야합니다. – Suever

+0

문제는'Tk'의 두 인스턴스 인'a = Tk()'와'b = Tk()'를 생성한다는 것입니다. 하나의 인스턴스 만 작성해야합니다. –

+0

예, 알아 냈으므로'def abir2() :'함수를 만들었습니다.'Toplevel()'을 만들면 tkinter의 두 번째 인스턴스에는 문제가 없습니다. 다른 방법을 제안 할 수 있다면 고맙겠습니다. –

답변

0

코드에 두 가지 문제점이 있습니다.

첫 번째 문제는 Tk의 두 인스턴스를 만드는 것입니다. tkinter 프로그램은 정확히 하나의 인스턴스를 가져야합니다.

두 번째 문제는 만들고있는 이미지가 로컬 변수로 저장된다는 것입니다. 함수가 돌아 오면 변수는 가비지 수집됩니다. tkinter 이미지가 가비지 수집 될 때 위젯이 여전히 존재하더라도 이미지 데이터는 삭제됩니다.

인터넷 수율이 페이지의 아주 기본 검색 : 모든 사람이 질문을 이해하고 잠재적 인 솔루션을 제공 할 수 있도록에 StackOverflow에 http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

+0

당신은 나를 많이 도왔습니다. 빠른 시간에, 고맙습니다. –