2012-04-13 18 views
13

Jak mogę dodać obraz do Tkintera?Jak dodać obraz w Tkinter?

To dało mi błąd składni:

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() 
+0

Polecam przeczytać książkę "programowania Python i tkinter". Bardzo dobra książka, dokładna. Możesz prawdopodobnie znaleźć je na eBay po niższych cenach. Zakładamy, że naprawdę chcesz używać TKinter. Polecam Qt zamiast Tkintera – frankliuao

Odpowiedz

5

nie ma „Syntax Error” w kodzie powyżej - to albo ocurred w innej linii (powyższe nie wszystkie kodzie, ponieważ istnieją brak importu, ani deklaracja zmiennej path) lub masz inny typ błędu.

Powyższy przykład zadziałał dobrze, testując interaktywny interpreter.

4

następujący kod działa na moim komputerze

  1. prawdopodobnie masz coś brakuje w kodzie.
  2. proszę również sprawdzić kodowanie plików kodu.
  3. upewnij się że masz zainstalowany pakiet PIL

    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() 
    
10

Python 3.3.1 [MSC v.1600 32 bit (Intel)] na win32 14.May.2013

Ten pracował dla mnie, postępując zgodnie z kodem powyżej

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() 
2

To nie jest standardowa lib Pythona 2.7. Tak, aby te działały prawidłowo i jeśli używasz Pythona 2.7 należy pobrać biblioteki PIL pierwszy: Pobieranie bezpośrednie łącze: http://effbot.org/downloads/PIL-1.1.7.win32-py2.7.exe Po zainstalowaniu go, wykonaj następujące kroki:

  1. upewnić się, że skrypt .py jest w tym samym folderze z obrazem obrazu, który chcesz pokazać.
  2. Edycja 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() 
    

nadzieję, że pomoże!

-1

Oto przykład dla Pythona 3, który można edytować w Pythonie 2;)

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() 

enter image description here

0

Jest to problem wersji Pythona. Jeśli używasz najnowszego, twoja stara składnia nie zadziała i da ci ten błąd. Postępuj zgodnie z kodem @ Josav09, a wszystko będzie dobrze.

0

Twój aktualny kod może zwrócić błąd w zależności od formatu pliku path punktów. Mimo to niektóre formaty obrazów, takie jak .gif, .pgm (i .png, jeśli tk.TkVersion> = 8.6) są już obsługiwane przez klasę PhotoImage.

Poniżej jest przykład wyświetlanie:

Lenna (.png)

czy tk.TkVersion < 8.6:

Lenna (.gif)

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 __name__ == '__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() 
Powiązane problemy