Изображения в приложении Kivy не отображаются (показывать черный ящик) после заполнения памяти, не выпускаются - PullRequest
0 голосов
/ 30 апреля 2018

Я использовал пример кода Python Kivy для создания слайд-шоу на официальном сенсорном экране Raspberry Pi. Когда я перебираю каталог фотографий jpg, изображения в итоге перестают отображаться, отображая только черный ящик. Я не получаю сообщений об ошибках. Я думаю, что это утечка памяти, хотя я не уверен, как это проверить. Следующий код (который загружает фотографию, копирует ее 9 раз и отображает каждый файл с задержкой в ​​3 секунды на фотографию) останавливает отображение изображений на # 7. Если я использую большие изображения, они перестают появляться раньше. Разве очистка виджетов не должна освободить память?

main.py

import kivy
kivy.require('1.0.6')
from kivy.clock import Clock
import urllib
from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.image import Image
from kivy.uix.label import Label
from functools import partial
from kivy.core.window import Window
import shutil    

def displayphoto(i, root, *largs):
    name=str(i)+".jpg"
    root.clear_widgets()
    img = Image(source=name, nocache=False)
    root.add_widget(img)
    label = Label(text=name)
    root.add_widget(label)

class NoscatterApp(App):
    def build(self):
        root = FloatLayout()
        #os.remove("*.jpg")
        urllib.urlretrieve("https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Shed_with_green_roof_at_Lyngen_fjord%2C_2012_June.jpg/1200px-Shed_with_green_roof_at_Lyngen_fjord%2C_2012_June.jpg", "main.jpg")
        for i in range(0, 10):
            name=str(i)+".jpg"
            shutil.copy("main.jpg", name)        
            Clock.schedule_once(partial(displayphoto, i, root), i*3)    
        return root

    def on_pause(self):
        return True

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