You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android图书库开发:解决Kivy中NameError: name 'russ_yaz'未定义问题

解决Kivy中调用按钮方法时的NameError问题

嘿,我帮你梳理下这个问题的根源,咱们一步步来修复:

问题核心原因

你的russ_yaz是SubjectsScreen10类的实例方法,但在KV语言里的调用方式完全错了,还附带了一个拼写失误:

  1. 直接写russ_yaz(...)会让KV找不到这个函数——它不是全局函数,而是属于SubjectsScreen10实例的方法,所以报NameError。
  2. 类名拼写错误:你的类是SubjectsScreen10(带末尾的s),但KV里写的是SubjectScreen10(少了s),就算方法调用对了,也会找不到对应的属性。

修复步骤与代码示例

1. 修正KV语言的按钮绑定

在KV文件里,当前屏幕的实例可以用root指代,所以按钮点击事件要调用root的russ_yaz方法:

<SubjectsScreen10>:
    Button:
        text: "Russian"
        # 通过当前屏幕实例调用方法
        on_press: root.russ_yaz()

2. 完善russ_yaz的逻辑

原来的方法只设置了文件名,还需要添加打开PDF阅读器的实际逻辑,比如实例化你的PDFDocumentWidget并显示:

class SubjectsScreen10(Screen): 
    def russ_yaz(self): 
        self.fn = 'Дудников, А.В Русский язык.pdf' 
        # 创建PDF阅读器组件并添加到当前屏幕
        pdf_widget = PDFDocumentWidget(source=self.fn, cols=1)
        # 可选:清空当前屏幕原有内容(根据你的布局需求调整)
        self.clear_widgets()
        self.add_widget(pdf_widget)

3. 额外注意事项

  • Android文件路径:要确保PDF文件放在正确的位置(比如assets目录或外部存储),并且申请了文件读取权限,否则会出现文件找不到的问题。
  • 屏幕管理优化:如果你的APP用ScreenManager管理多页面,建议把PDF显示单独做一个Screen,通过self.manager.current = "pdf_screen"切换页面并传递文件名,这样布局会更清晰。

内容的提问来源于stack exchange,提问作者Roman_Sarnov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:39:06