Kivy重新加载图片

时间:2016-10-25 21:16:33

标签: python python-2.7 kivy kivy-language

我正在创建一个简单的应用程序,它抓取一个字符串并将其转换为qr代码,但我无法让我的应用程序返回更新的qr图像。文件已更新,但即使我调用.reload(),显示为结果的图像仍然是先前创建的。

我认为在启动应用程序期间正在使用当前存储的映像构建,一个来自上一个运行的映像,为什么不是.reload()更新它?我正确使用它吗?

旁注:有没有办法增加调试详细程度,所以我可以看到python错误不仅仅是kivy' s?通过尝试运行一切:有点压倒性。

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

相应的kv:

<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"

1 个答案:

答案 0 :(得分:0)

对我来说,这一行w = NoteCode().ids.image似乎有问题,因为你在那里创建了一个新实例并且没有得到现有的实例,因此即使你重新加载某些东西,它也不会成为{{最有可能在布局中使用的那个。您需要通过某些NoteCode访问NoteCode,或将其添加到id

__init__

然后在self.app = App.get_running_app() self.app.notecode = self 执行此操作:

Note.reload()

您可以将应用程序放在init中,也可以放在任何您喜欢的地方,重要的是获得正确的实例。