Öffnen Sie ein JPEG-Bild in Python
Habe ich ein problem beim öffnen von jpeg-Bildern in Python 2.7 mit dem folgenden code.
import Tkinter as tk
from PIL import ImageTk, Image
path = 'C:/Python27/chart.jpg'
root = tk.Tk()
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
root.mainloop()
Jpeg öffnet nur gut, aber dann Stoppt der code ausgeführt wird. Ich will öffnen Sie die jpeg-Dateien in der Mitte des Programms, aber sobald das Bild öffnet sich keiner der restliche code ausgeführt wird.
Ich auch versucht, die öffnung der jpeg mit dem nachstehenden code, aber bekomme nur die Fehlermeldung "No module named Image". Ich installiert haben PIL und es war die richtige version 2.7.
import Image
image = Image.open('File.jpg')
image.show()
Jede Hilfe würde geschätzt werden.
- Sie müssen
from PIL import Image
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tkinter ist single threaded. Die
root.mainloop
Aufruf trägt die GUI-Schleife verantwortlich für die Anzeige und Aktualisierung aller grafischen Elemente, Umgang mit user-events, und so weiter blockieren, bis die grafische Anwendung beendet wird. Nach der mainloop beendet hat, sind Sie nicht mehr in der Lage zu aktualisieren, alles grafisch.Daher müssen Sie wahrscheinlich zu überdenken Sie die Gestaltung Ihres Programms. Sie haben zwei Möglichkeiten zum ausführen von eigenem code neben dem mainloop:
Option 1: Führen Sie Ihren code in einem separaten thread
Bevor Sie in die Hauptschleife, spawn ein thread ausgeführt wird, Ihren eigenen code.
Option 2: Führen Sie Ihren code in den mainloop mit
Tk.after
Warnung
Die mainloop ist verantwortlich für alles im Zusammenhang mit der Herstellung der GUI nutzbar. Während Ihr code ausgeführt wird, innerhalb der mainloop-thread (geplant mit root.after_idle oder root.nach), die GUI wird vollständig nicht mehr reagiert (eingefroren), so stellen Sie sicher, Sie sind nicht das laden der mainloop mit lang andauernden Operationen. Führen Sie diese in einem separaten thread als in Option 1.
Grundsätzlich der Haupt-thread muss ausführen die main-loop ist, und der code gleichzeitig ausführen kann nur mit den oben beschriebenen Methoden, so dass Sie leider wohl müssen restrukturieren, um Ihre gesamte Programm.