Wie füge ich ein Bild in Tkinter hinzu?
Dies gab mir einen Syntaxfehler:
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()
Es gibt keinen "Syntaxfehler" im obigen Code - er trat entweder in einer anderen Zeile auf (der obige Code ist nicht der gesamte Code, da keine Importe vorhanden sind, auch keine Deklaration Ihrer Variable path
) oder Sie haben einen anderen Fehlertyp erhalten .
Das obige Beispiel funktionierte gut für mich, indem ich den interaktiven Interpreter testete.
Python 3.3.1 [MSC v.1600 32 Bit (Intel)] unter Win32 14.Mai.2013
Dies funktionierte für mich, indem ich den obigen Code befolgte
from tkinter import *
from PIL import ImageTk, Image
import os
root = Tk()
img = ImageTk.PhotoImage(Image.open("True1.gif"))
panel = Label(root, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
root.mainloop()
Der folgende Code funktioniert auf meiner Maschine
vergewissern Sie sich, dass das PIL-Paket installiert ist
import Tkinter as tk
from PIL import ImageTk, Image
path = 'C:/xxxx/xxxx.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()
Es ist keine Standard-Bibliothek von Python 2.7. Damit diese ordnungsgemäß funktionieren, und wenn Sie Python 2.7 verwenden, sollten Sie zuerst die PIL-Bibliothek herunterladen: Direkter Download-Link: http://effbot.org/downloads/PIL-1.1.7.win32-py2. 7.exe Führen Sie nach der Installation folgende Schritte aus:
Bearbeiten Sie Ihr script.py
from Tkinter import *
from PIL import ImageTk, Image
app_root = Tk()
#Setting it up
img = ImageTk.PhotoImage(Image.open("app.png"))
#Displaying it
imglabel = Label(app_root, image=img).grid(row=1, column=1)
app_root.mainloop()
Hoffentlich hilft das!
Der tatsächliche Code gibt möglicherweise einen Fehler zurück, der auf dem Format der Datei basiert, auf die path
verweist. Allerdings sind einige Bildformate wie .gif, .pgm (und .png, wenn tk.TkVersion> = 8.6) bereits von der PhotoImage
- Klasse unterstützt.
Nachfolgend ein Beispiel, das Folgendes anzeigt:
oder wenn tk.TkVersion < 8.6
:
try: # In order to be able to import tkinter for
import tkinter as tk # either in python 2 or in python 3
except ImportError:
import Tkinter as tk
def download_images():
# In order to fetch the image online
try:
import urllib.request as url
except ImportError:
import urllib as url
url.urlretrieve("https://i.stack.imgur.com/IgD2r.png", "lenna.png")
url.urlretrieve("https://i.stack.imgur.com/sML82.gif", "lenna.gif")
if __== '__main__':
download_images()
root = tk.Tk()
widget = tk.Label(root, compound='top')
widget.lenna_image_png = tk.PhotoImage(file="lenna.png")
widget.lenna_image_gif = tk.PhotoImage(file="lenna.gif")
try:
widget['text'] = "Lenna.png"
widget['image'] = widget.lenna_image_png
except:
widget['text'] = "Lenna.gif"
widget['image'] = widget.lenna_image_gif
widget.pack()
root.mainloop()
Hier ist ein Beispiel für Python 3, das Sie für Python 2;) bearbeiten können.
from tkinter import *
from PIL import ImageTk, Image
from tkinter import filedialog
import os
root = Tk()
root.geometry("550x300+300+150")
root.resizable(width=True, height=True)
def openfn():
filename = filedialog.askopenfilename(title='open')
return filename
def open_img():
x = openfn()
img = Image.open(x)
img = img.resize((250, 250), Image.ANTIALIAS)
img = ImageTk.PhotoImage(img)
panel = Label(root, image=img)
panel.image = img
panel.pack()
btn = Button(root, text='open image', command=open_img).pack()
root.mainloop()
Dieser Code funktioniert für mich. Sie sollten auch berücksichtigen, dass andere Schaltflächen oder Beschriftungen in diesem Fenster nicht ordnungsgemäß funktionieren, wenn Sie .place()
nicht verwenden.
from Tkinter import*
from PIL import Image, ImageTk
img = Image.open("path/x.png")
photo=ImageTk.PhotoImage(img)
lab=Label(image=photo).place(x=50,y=50)
Konvertieren Sie einfach das Bild im JPG-Format in das PNG-Format. Es wird 100% funktionieren.
Es ist ein Python-Versionsproblem. Wenn Sie die neueste Version verwenden, funktioniert Ihre alte Syntax nicht und Sie erhalten diesen Fehler. Bitte folgen Sie dem Code von @ Josav09 und Sie werden in Ordnung sein.