我正在创建一个简单的应用程序,它抓取一个字符串并将其转换为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"
答案 0 :(得分:0)
对我来说,这一行w = NoteCode().ids.image
似乎有问题,因为你在那里创建了一个新实例并且没有得到现有的实例,因此即使你重新加载某些东西,它也不会成为{{最有可能在布局中使用的那个。您需要通过某些NoteCode
访问NoteCode
,或将其添加到id
:
__init__
然后在self.app = App.get_running_app()
self.app.notecode = self
执行此操作:
Note.reload()
您可以将应用程序放在init中,也可以放在任何您喜欢的地方,重要的是获得正确的实例。