2016-02-21 3 views
3

Я пытаюсь показать изображение из URL (хранится в списке) в виджете изображений в kivy, это моя функция:Ошибка получения изображения из URL

class ImageScreen(Screen): 

    image_source = ObjectProperty() 

    def get_image(self): 
     filename = 'imagelist.txt' 
     txt = open(filename, 'r') 

     with txt as file: 
      images = [line.rstrip('\n') for line in txt] 

     n = random.randint(0, len(images)) 

     self.image_source.source = str(images[n]) 

Вот мой виджет в .kv :

<ImageScreen>: 
    image_source: imagesource 
    on_enter: root.get_image() 
    Image: 
     id: imagesource 
     source: 'preload.jpg' 

Когда я вызвать функцию я получаю эту ошибку:

[ERROR] [Image] Error reading file http://www.webcomics.it/scottecscomics/files/2015/09/342-Gelado.jpg 

Я попытался с AsyncImage виджетом вместо изображения:

AsyncImage: 
     id: imagesource 
     source: 'preload.jpg' 

, но я получаю эту ошибку:

Exception: Unknown <jpe> type, no loader found. 
an integer is required 

Я могу открыть изображение в браузере копирования URL из ошибок, и иметь kivy, чтобы показать его, если загружен локально ... Что я делать не так?

EDIT: Я попытался загрузить много файлов изображений, найденных в Интернете, проблема с .jpg файлами, отлично работает с файлами .png ... Но у меня нет проблем с отображением .jpg файлов, сохраненных локально ... Я действительно не имеют ни малейшего представления о том, как это исправить ...

+0

У вас есть ошибка здесь: 'random.randint (0, len (images))' может возвращать 'len (images)', что приведет к более поздней 'IndexError'. Используйте 'random.randrange (0, len (images))' или еще лучше 'self.image_source.source = random.choice (images))'. – taleinat

+0

Не могли бы вы показать точный код вашей попытки использовать 'AsyncImage'? – taleinat

+0

@taleinat: Спасибо за подсказку random.choice (images), не думал, что мой код может эффективно вернуть len (изображения). Отредактирован код, показывающий виджет AsyncImage. – RingK

ответ

2

это ошибка, исправленная в https://github.com/kivy/kivy/commit/9bc466dea1a007223ce983d18f250d5bb3c69841 (после выпуска 1.9.1), вы можете исправить его самостоятельно или установить основную версию, следующий выпуск не должен иметь эту ошибку.

С уважением.

+0

Исправлено редактирование строки 23 на img_sdl2.py, расширение 'jpe' отсутствовало. Все работает сейчас, спасибо! – RingK

0

следующий код работал для меня в kivy 1.8.0 и 1.9.1

import kivy 
import datetime 

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.button import Button 
from kivy.factory import Factory 
from kivy.lang import Builder 
from kivy.uix.floatlayout import FloatLayout 
from kivy.uix.scatter import Scatter 
import random 
from kivy.uix.screenmanager import Screen, ScreenManager 
from kivy.properties import * 



Builder.load_string(""" 
<ImageScreen>: 
    image_source: imagesource 
    on_enter: root.get_image() 
    AsyncImage: 
     id: imagesource 
     source: 'preload.jpg' 
""") 

images = [] 
class ImageScreen(Screen): 

    image_source = ObjectProperty() 

    def get_image(self): 
     filename = 'imagelist.txt' 

     with open(filename, 'r') as filetxt: 
      images = [line.rstrip('\n') for line in filetxt] 
     print images 
     img = random.choice(images) 

     self.image_source.source = img 


sm = ScreenManager() 
sm.add_widget(ImageScreen(name='img')) 
class MyApp(App): 


    def build(self): 
     return sm 


if __name__ == '__main__': 
    MyApp().run() 

imagelist.txt:

http://www.webcomics.it/scottecscomics/files/2015/09/342-Gelado.jpg 
+0

У меня по-прежнему такая же ошибка (Kivy 1.9.1). http://hastebin.com/uradagijoz.tex – RingK

+0

Я пробовал со многими файлами изображений, найденными в Интернете, проблема с .jpg файлами, отлично работает с файлами .png ... Но у меня нет проблем с отображением .jpg файлов локально ... Я действительно не знаю, как это исправить ... – RingK