如何在Python的Kivy框架中从另一个类修改Label文本?
实现点击课程按钮更新LessonWindow的Label文本
修改后的Python代码
from kivy.app import App from kivy.uix.screenmanager import ScreenManager, Screen from kivy.lang import Builder kv = Builder.load_file('test.kv') class LessonsList(Screen): def press(self, lesson_num): # 获取LessonWindow页面实例 lesson_screen = self.manager.get_screen('lesson') # 更新Label的文本内容 lesson_screen.ids.lesson_label.text = f'Lesson {lesson_num}' # 切换到lesson页面 self.manager.current = "lesson" class LessonWindow(Screen): def back(self): self.manager.current = "lessons" self.manager.transition.direction = "left" manager = ScreenManager() manager.add_widget(LessonsList(name="lessons")) manager.add_widget(LessonWindow(name="lesson")) class MyApp(App): def build(self): return manager if __name__ == "__main__": MyApp().run()
修改后的kv文件
<LessonsList>: BoxLayout: size: root.width, root.height orientation: 'vertical' Button: text:'Lesson 1' on_press: root.press('1') Button: text:'Lesson 2' on_press: root.press('2') Button: text:'Lesson 3' on_press: root.press('3') <LessonWindow>: BoxLayout: orientation: 'vertical' Label: id: lesson_label # 添加id用于后续引用修改文本 text: 'Lesson' Button: text:'Back' on_press: root.back()
关键改动说明
- 给
LessonsList的press方法添加lesson_num参数,用来接收点击按钮对应的课程编号 - 在kv文件中,每个按钮调用
press时传入对应的编号字符串 - 给LessonWindow里的Label添加
id,方便通过页面实例直接定位并修改文本 - 修正
back方法中直接使用manager的问题,改为self.manager(原代码会因未定义全局变量报错)
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

