Киви перезагрузить изображение

Я создаю простое приложение, которое захватывает строку и превращает ее в код qr, но я не могу заставить свое приложение возвращать обновленное изображение qr. Файл IS обновлен, но даже если я вызываю .reload(), изображение, отображаемое в результате, по-прежнему является ранее созданным.

Я считаю, что во время запуска приложение создается с изображением, которое в настоящее время хранится, одним из предыдущих запусков, но почему .reload() не обновляет его? Правильно ли я его использую?

На заметку: есть ли способ увеличить отладку, чтобы я мог видеть ошибки python не только kivy? Прогонять все через try: довольно сложно.

class Note(Screen):
def reload_image(self):
        w = NoteCode().ids.image
        w.reload()
def qr_generator(self):
    note_input = self.note_input.text
    inn = pyqrcode.create(note_input)
    with open('qr.png','w') as inputfile:
        inn.png(inputfile,scale=8)
    self.reload_image()

И соответствующий кв:

<Note>:
    note_input:note_input
    name:"Note"
GridLayout:
    rows:3
    cols:1
    Label:
        size_hint_y:0.15
        text:"Create a QR Note"
    TextInput:
        id:note_input
    GridLayout:
        size_hint_y:0.15
        rows:1
        cols:2
        Button:
            text:"Back"
            on_release: app.root.current = "Main"
        Button:
            text:"Generate"
            on_release: root.qr_generator()
            on_release: app.root.current = "NoteCode"


<NoteCode>:
    name:"NoteCode"
    GridLayout:
    cols:1
    rows:2
    Image:
        id:image
        allow_stretch:False
        source:'qr.png'
    Button:
        size_hint_y:0.1
        text:"Back"
        on_release: app.root.current = "Note"

person Taporp    schedule 25.10.2016    source источник


Ответы (1)


Мне эта строка w = NoteCode().ids.image кажется проблематичной, так как вы создаете там новый экземпляр и не получаете заранее существующий, поэтому, даже если вы что-то перезагрузите, это, скорее всего, не будет NoteCode, который используется в макете. Вам нужно получить доступ к NoteCode либо через какой-то id, либо поставить это на его __init__:

self.app = App.get_running_app()
self.app.notecode = self

а затем в Note.reload() сделайте следующее:

app = App.get_running_app()
w = app.notecode.ids.image.reload()

Вы также можете поместить приложение в init или вообще куда угодно, важно получить правильный экземпляр.

person Peter Badida    schedule 25.10.2016