2012-04-13 70 views
13

Làm cách nào để thêm hình ảnh vào Tkinter?Cách thêm hình ảnh vào Tkinter?

này đã cho tôi một lỗi cú pháp:

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

tôi khuyên bạn nên đọc cuốn sách "Python và Tkinter lập trình". Rất tốt cuốn sách, kỹ lưỡng. Bạn có thể tìm thấy chúng trên eBay với giá thấp hơn. Đó là giả sử bạn thực sự muốn sử dụng TKinter. Tôi khuyên bạn nên sử dụng Qt thay vì Tkinter mặc dù – frankliuao

Trả lời

5

Không có "Cú pháp Lỗi" trong đoạn code trên - nó hoặc Đã xảy ở một số dòng khác (ở trên là không phải tất cả các mã của bạn, vì có không nhập, không khai báo biến số path) hoặc bạn có một số loại lỗi khác.

Ví dụ ở trên hoạt động tốt đối với tôi, thử nghiệm trên trình thông dịch tương tác.

4

mã sau hoạt động trên máy tính của tôi

  1. bạn có thể có cái gì đó thiếu trong mã của bạn.
  2. cũng vui lòng kiểm tra mã hóa của tệp mã.
  3. chắc chắn rằng bạn có PIL gói cài đặt

    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)] trên win32 14.May.2013

này làm việc cho tôi, bằng cách làm theo mã ở trên

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

Nó không phải là lib chuẩn của python 2.7. Vì vậy, để những hoạt động tốt và nếu bạn đang sử dụng Python 2.7 bạn nên tải về thư viện PIL đầu tiên: liên kết tải về trực tiếp: http://effbot.org/downloads/PIL-1.1.7.win32-py2.7.exe Sau khi cài đặt nó, hãy làm theo các bước sau:

  1. Hãy chắc chắn rằng kịch bản của bạn .py có tại cùng một thư mục vớiimage bạn muốn hiển thị.
  2. Chỉnh sửa của bạn 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() 
    

Hy vọng rằng sẽ giúp!

-1

Dưới đây là một ví dụ cho Python 3 mà bạn có thể chỉnh sửa cho Python 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

Đó là một vấn đề phiên bản Python. Nếu bạn đang sử dụng mới nhất, thì cú pháp cũ của bạn sẽ không hoạt động và cung cấp cho bạn lỗi này. Hãy làm theo mã @ Josav09 và bạn sẽ ổn thôi.

0

Mã thực tế của bạn có thể trả về lỗi dựa trên định dạng của tệp path trỏ đến. Điều đó đang được nói, một số định dạng hình ảnh như .gif, .pgm (và .png nếu tk.TkVersion> = 8.6) đã được hỗ trợ bởi lớp PhotoImage.

Dưới đây là một ví dụ hiển thị:

Lenna (.png)

hoặc nếu 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() 
Các vấn đề liên quan