2017-04-07 5 views
0

Also habe ich ein Skript in Python mit Tkinter und die Sache ist, dass das erste Tkinter Fenster ohne Probleme erscheint aber, wenn der Code zum zweiten Fenster geht, sagt es:Tkinter Bild Absturz

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

und I didn Finde nichts, was mir geholfen hat, könnte mir bitte jemand helfen? Hier ist der Code:

from Tkinter import * 
from PIL import ImageTk, Image 

def choose(): 
    global name, chosen 
    name = name1.get() 
    chosen = chosen1.get() 
    print name 
    print chosen 
    root0.quit() 

root0 = Tk() 
name1 = Entry(root0) 
name1.pack() 
chosen1 = Entry(root0) 
chosen1.pack() 
Button(root0, text="ENTER", command=choose).pack() 
root0.mainloop() 

root = Tk() 
img = ImageTk.PhotoImage(Image.open('person1.png')) 
panel1 = Label(root, image = img) 
panel1.pack(side="left") 
img2 = ImageTk.PhotoImage(Image.open('person2.png')) 
panel2 = Label(root, image = img2) 
panel2.pack(side="right") 
root.mainloop() 

durch die Art und Weise, die Python-Version ist 2.7

Antwort

0

Dies ist ein Nebeneffekt 2 Wurzeln der Verwendung (Tk() Instanzen). Die Bilder werden standardmäßig mit dem ersten Hauptfenster verknüpft. Die schnelle Lösung ist, das Bild mit der richtigen Wurzel zu bieten:

img2 = ImageTk.PhotoImage(Image.open('person2.png'), master=root) 

Die richtige Lösung ist nie mehr als ein Tk() zu verwenden. Setzen Sie alle Ihre Code in Frame-Instanzen, und dann ein zerstören und die andere laden, wenn die Zeit reif ist:

import Tkinter as tk 

def choose(): 
    global name, chosen 
    name = name1.get() 
    chosen = chosen1.get() 
    print name 
    print chosen 
    frame0.destroy() # kill this frame 
    frame1.pack() # open new frame 

root = tk.Tk() 
frame0 = tk.Frame(root) 
name1 = tk.Entry(frame0) 
name1.pack() 
chosen1 = tk.Entry(frame0) 
chosen1.pack() 
tk.Button(frame0, text="ENTER", command=choose).pack() 

frame1 = tk.Frame(root) 
img = ImageTk.PhotoImage(Image.open('person1.png')) 
panel1 = tk.Label(frame1, image = img) 
panel1.pack(side="left") 
img2 = ImageTk.PhotoImage(Image.open('person2.png')) 
panel2 = tk.Label(frame1, image = img2) 
panel2.pack(side="right") 

#start the program 
frame0.pack() # load frame0 
root.mainloop() 

Hinweis zog ich Sie auch von den bösen Wildcard Importe weg (from module import *).

Verwandte Themen