2017-02-04 58 views
0

我有一个url列表,每个url只包含一个图像,并且我希望在单个tkinter画布上使用Python也显示所有图像列表包含一些不包含图像的网址,tkinter应该忽略这些网址。如何使用Python在单个Tkinter画布中显示来自多个Url的多个图像

我创建了一次只显示一个图像的代码。

import io 
import base64 
try: 
    # Python2 
    import Tkinter as tk 
    from urllib2 import urlopen 
except ImportError: 
    # Python3 
    import tkinter as tk 
    from urllib.request import urlopen 
root = tk.Tk() 
root.title("display a website image") 

w = 800 
h = 600 
x = 200 
y = 300 

root.geometry("%dx%d+%d+%d" % (w, h, x, y)) 


image_url = "http://www.okclipart.com/img2/yrdulrdklckodbfcqsuy.png" 
image_byt = urlopen(image_url).read() 
image_b64 = base64.encodestring(image_byt) 
photo = tk.PhotoImage(data=image_b64) 

cv = tk.Canvas(bg='white') 
cv.pack(side='top', fill='both', expand='yes') 
cv.create_image(10, 10, image=photo, anchor='nw') 
root.mainloop() 

图像的样本名单网址

urllist =['https://upload.wikimedia.org/wikipedia/commons/thumb/d/d0/NoCopyright.png/600px-NoCopyright.png','http://www.okclipart.com/img16/kjlhjznjvkokwqpalupl.png' 
,'http://www.okclipart.com/img16/qcmwejvtwuufltxsibbn.png', 
'http://www.okclipart.com/img2/yrdulrdklckodbfcqsuy.png'] 

还有一些在不包含任何图像,所以它768,16忽略这些URL列表中的一些网址。

回答

2
  1. 忽略无效的网址try ... except urllib2.HTTPError将帮助您完成此
  2. 加载多个图像:通过您的urllist反复测试,并加载每个这些图像。成功时,将其绘制到画布上。
#from urllib.request import HTTPError #py3 
#from urllib2 import HTTPError #py2 
#... 
def load_image_to_base64(image_url): 
    """ Load an image from a web url and return its data base64 encoded""" 
    image_byt = urlopen(image_url).read() 
    image_b64 = base64.encodestring(image_byt) 
    return image_b64 

# load photos to photos list 
urllist = ['http://www.okclipart.com/img16/kjlhjznjvkokwqpalupl.png', 
      'invalidurltest', 
      'http://www.okclipart.com/YouWontFindThisImage.png'] 
photos = [] 
for i, url in enumerate(urllist): 
    print(i,"loading",url) 
    try: 
     photo = tk.PhotoImage(data=load_image_to_base64(url)) 
     photos.append(photo) 
     print("done") 
    except HTTPError as err: 
     print("image not found, http error code:", err.code) 
    except ValueError: 
     print("invalid url", url) 

# iterate through photos and put them onto the canvas 
for photo in photos: 
    cv.create_image(10*i, 10*i, image=photo, anchor='nw') 

root.mainloop() 
#... 
+0

谢谢您的答复,我也想知道如何滚动功能添加到它的图像到大,它不可能看到所有的图像一次。 –

+0

@MukeshJha所以它有帮助吗? **关于滚动:**一如既往:你有什么尝试?这也不是你问题的一部分。 [谷歌的第一个答案](http://www.swharden.com/wp/2010-03-03-viewing-large-images-with-scrollbars-using-python-tk-and-pil/) 你可以还调整了这些图像的大小,以便它们全部适合并排在一个屏幕上。 – nitzel

+0

谢谢先生,你的代码工作正常,它帮助了我很多。 –

相关问题