2016-06-04 21 views
-2

Hallo ich einen Job mache, die ich (von einem tkinter Fenster ein Bild enthält) benötigen rufen Sie ein weiteres Fenster, das ein anderes imagem.I enthält folgendes versucht:Python-tkinter: Ein anderes Bild in einem anderen Fenster öffnen?

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) 

Aber wenn ich drücken Sie die erste Taste (BTU1) es gibt die folgende Fehlermeldung:

_tkinter.TclError: image "pyimage2" doesn't exist

Und wenn, wenn ich drücken sie die zweite Taste (BTU2) nicht Fehler passieren, aber zeigt nicht das Bild, nur das neue Fenster erstellt wird;

Ich habe darunter mehrere Möglichkeiten ausprobiert * mit Leinwand und ohne Leinwand * platzieren;

+0

Alle Fragen auf Stackoverflow sind in englischer Sprache geschrieben werden, so dass jeder die Frage verstehen und mögliche Lösungen. – Suever

+0

Das Problem ist, dass Sie zwei Instanzen von 'Tk' erstellen:' a = Tk() 'und' b = Tk() '. Sie müssen nur eine Instanz erstellen. –

+0

Ja, ich habe es herausgefunden, also habe ich die Funktion 'def abir2():' erstellt, um '' Toplevel() 'zu erstellen, gibt es kein Problem mit der zweiten Instanz von tkinter. Wenn Sie einen alternativen Weg vorschlagen könnten, würde ich es begrüßen. –

Antwort

0

Sie haben zwei Probleme in Ihrem Code. Das erste Problem besteht darin, dass Sie zwei Instanzen von Tk erstellen. Ein Tkinter-Programm muss genau eine Instanz haben.

Das zweite Problem ist, dass das Bild, das Sie erstellen, als lokale Variable gespeichert wird. Wenn die Funktion zurückkehrt, ist die Variable Garbage Collected. Wenn ein Tkinter-Bild als Müll gesammelt wird, werden die Bilddaten verworfen, obwohl das Widget noch existiert.

Eine sehr einfache Suche im Internet Ausbeuten dieser Seite: http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

+0

Alter, du hast mir sehr geholfen. Danke für die schnelle und eficinte Antwort. –