2014-09-02 4 views
1

Я новичок в программировании GUI python, я хочу добавить изображение в свою метку tkinter, я создал следующий код, но окно не показывает мое изображение. Путь изображения - это та же папка, что и этот код.Изображение в этикетке Tkinter?

import ImageTk 
import Tkinter as tk 
from Tkinter import * 
from PIL import Image 


def make_label(master, x, y, w, h, img, *args, **kwargs): 
    f = Frame(master, height = h, width = w) 
    f.pack_propagate(0) 
    f.place(x = x, y = y) 
    label = Label(f, image = img, *args, **kwargs) 
    label.pack(fill = BOTH, expand = 1) 
    return label 


if __name__ == '__main__': 
    root = tk.Tk() 
    frame = tk.Frame(root, width=400, height=600, background='white') 
    frame.pack_propagate(0) 
    frame.pack() 
    img = ImageTk.PhotoImage(Image.open('logo.png')) 
    make_label(root, 0, 0, 400, 100, img) 
    root.mainloop() 

Любая помощь будет оценена, спасибо.

+0

Прекрасно работает для меня. Это ваш фактический код? Если нет, я бы предположил, что [изображение - сбор мусора] (http://stackoverflow.com/a/15435134/1639625). Вы получаете какую-либо ошибку? –

+0

Нет ошибки, просто пустое окно. – Shivamshaz

+0

Как я уже сказал, отлично работает для меня ... так что если это ваш оригинальный код, может быть, ваш «logo.png» на самом деле намного больше, и вы видите только верхний левый (белый) угол его ? Кроме того, какую именно версию python вы используете? –

ответ

1

Для целей отладки старайтесь избегать использования PIL и загружать некоторый * .gif (или другой приемлемый) файл непосредственно в PhotoImage, как показано ниже, если это сработает для вас, а затем просто преобразуйте свое изображение в * .gif или попытаться иметь дело с PIL.

from tkinter import * 

def make_label(parent, img): 
    label = Label(parent, image=img) 
    label.pack() 

if __name__ == '__main__': 
    root = Tk() 
    frame = Frame(root, width=400, height=600, background='white') 
    frame.pack_propagate(0)  
    frame.pack() 
    img = PhotoImage(file='logo.gif') 
    make_label(frame, img) 

    root.mainloop() 
+1

Пожалуйста, добавьте сведения о том, почему это решит проблему. Это делает разницу между ответом низкого качества и высоким качеством ответа. Один лайнер не так полезен для SO-сообщества. – Frazz

Смежные вопросы