Python kivy 更新不同屏幕中的标签文本

Posted

技术标签:

【中文标题】Python kivy 更新不同屏幕中的标签文本【英文标题】:Python kivy update label text in different screens 【发布时间】:2021-05-11 20:15:11 【问题描述】:

我正在做一个 kivy 项目。我已经测试了 kivymd 导航布局。我想知道如何更新屏幕 1 和屏幕 2 中的标签。例如,按下开始按钮时从 1 计数到 100。

我在网上搜索过这样的 kivy 更新标签: update label

但是在 kv 字符串中屏幕在“”中,而我的是“Screen:”,我试图创建一个名为 Screen() 的函数,但它不是 wokring。

谁能给我解释一下“”是什么意思以及如何动态更新 kivymd 导航布局中的标签?非常感谢

代码在这里:

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty

from kivymd.app import MDApp

KV = '''
<ContentNavigationDrawer>:
<ItemDrawer>:
    theme_text_color: "Custom"
    on_release: self.parent.set_color_item(self)

    IconLeftWidget:
        id: icon
        icon: root.icon
        theme_text_color: "Custom"
        text_color: root.text_color


<ContentNavigationDrawer>:
    orientation: "vertical"
    padding: "8dp"
    spacing: "8dp"

    AnchorLayout:
        anchor_x: "left"
        size_hint_y: None
        height: avatar.height

        Image:
            id: avatar
            size_hint: None, None
            size: "56dp", "56dp"
            source: "data/logo/kivy-icon-256.png"

    MDLabel:
        text: "KivyMD library"
        font_style: "Button"
        size_hint_y: None
        height: self.texture_size[1]

    MDLabel:
        text: "kivydevelopment@gmail.com"
        font_style: "Caption"
        size_hint_y: None
        height: self.texture_size[1]

    ScrollView:

        MDList:

            OneLineListItem:
                text: "Screen 1"
                on_press:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "scr 1"

            OneLineListItem:
                text: "Screen 2"
                on_press:
                    root.nav_drawer.set_state("close")
                    root.screen_manager.current = "scr 2"


Screen:

    MDToolbar:
        id: toolbar
        pos_hint: "top": 1
        elevation: 10
        title: "MDNavigationDrawer"
        left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]

    NavigationLayout:
        x: toolbar.height

        ScreenManager:
            id: screen_manager

            Screen:
                name: "scr 1"

                MDLabel:
                    text: "Screen 1"
                    halign: "center"

            Screen:
                name: "scr 2"

                MDLabel:
                    text: "Screen 2"
                    halign: "center"

        MDNavigationDrawer:
            id: nav_drawer

            ContentNavigationDrawer:
                screen_manager: screen_manager
                nav_drawer: nav_drawer
'''


class ContentNavigationDrawer(BoxLayout):
    screen_manager = ObjectProperty()
    nav_drawer = ObjectProperty()


class TestNavigationDrawer(MDApp):
    def build(self):
        return Builder.load_string(KV)


TestNavigationDrawer().run()

【问题讨论】:

【参考方案1】:

您可以尝试使用app.root.get_screen('scr1').funct() 并创建一个函数来更改您想要的内容

【讨论】:

以上是关于Python kivy 更新不同屏幕中的标签文本的主要内容,如果未能解决你的问题,请参考以下文章

更新另一个类中的 kivy 标签文本

Python Kivy:self.ids 不更新标签文本

Python / Kivy - 在另一个调用函数的屏幕中替换标签的值

如何在 Kivy、Python 中更新标签的文本

如何在 kivy python 中的标签、文本输入和其他小部件中添加标题

在 Kivy for Python 中按下按钮时更新标签的文本