I'm trying to make an online image viewer in which you can open online images (from a link) in Tkinter. This is my code:
from tkinter import *
from PIL import ImageTk, Image
import requests
from io import BytesIO
root = Tk()
var = StringVar()
entry = Entry(root, textvariable=var)
entry.pack()
def add_image():
imagelab.config(image=WebImage(entry.get()).get())
Button(root, text='Go! ', command=add_image).pack()
class WebImage:
def __init__(self, url):
u = requests.get(url)
self.image = ImageTk.PhotoImage(Image.open(BytesIO(u.content)))
def get(self):
return self.image
imagelab = Label(root)
imagelab.pack()
root.mainloop()
In this, its all working, and no errors are coming. But, the image is not displayed. I think it is loaded, but not displayed.
Thanks!
Try this:
from tkinter import *
from PIL import ImageTk, Image
import requests
from io import BytesIO
root = Tk()
var = StringVar()
entry = Entry(root, textvariable=var)
entry.pack()
webimages_list = []
def add_image():
image = WebImage(entry.get())
webimages_list.append(image)
imagelab.config(image=image.get())
Button(root, text="Go!", command=add_image).pack()
class WebImage:
def __init__(self, url):
u = requests.get(url)
self.image = ImageTk.PhotoImage(Image.open(BytesIO(u.content)))
def get(self):
return self.image
imagelab = Label(root)
imagelab.pack()
root.mainloop()
It stores all of the WebImage
objects in a list called webimages_list
. That stops python from garbage collecting the WebImage
objects.