2017-02-04 3 views
0

Ich habe eine Liste von URLs und jede URL enthält nur ein Bild, und ich möchte alle Bilder auf einem einzelnen tkinter Canvas mit Python auch anzeigen Liste enthält eine URL, die kein Bild enthält. tkinter sollte diese URL ignorieren.Wie mehrere Bilder aus mehreren URLs in einem einzigen Tkinter Canvas mit Python anzuzeigen

Ich habe einen Code erstellt, der immer nur ein Bild anzeigt.

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() 

Beispielliste der Bilder url

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'] 

Auch gibt einige URL in der Liste enthalten sind, die keine Bilder enthält, so ist es diese URLs ignorieren shoud.

Antwort

2
  1. ignoriert ungültige Urls: try ... except urllib2.HTTPError werden Sie mit diesem
  2. Laden mehrere Bilder helfen: Durchlaufen Sie Ihre urllist und jedes dieser Bilder laden. Wenn es erfolgreich ist, zeichne es auf deine Leinwand.
#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

Vielen Dank für Ihre Antwort, ich war auch fragen, wie Scroll-Funktion, um es hinzuzufügen, wie die Bilder zu groß und es ist nicht möglich, sind auf einmal alle Bilder zu sehen. –

+0

@MukeshJha So hat es geholfen? ** Über Scrollen: ** Wie immer: Was hast du probiert? Es ist auch nicht Teil Ihrer Frage. [1. Antwort auf Google.] (Http://www.swharden.com/wp/2010-03-03-viewing-large-images-with-scrollbars-using-python-tk-and-pil/) Sie könnten Ändern Sie auch die Größe der Bilder, so dass sie alle auf einem Bildschirm nebeneinander liegen. – nitzel

+0

Danke Herr, Ihr Code funktioniert gut, es hat mir sehr geholfen. –

Verwandte Themen