2017-02-04 57 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

謝謝先生,你的代碼工作正常,它幫助了我很多。 –

相關問題