将 MDTextField 输入从一个屏幕插入到另一个 KivyMD 标签文本字段屏幕?

问题描述 投票:0回答:1

我需要从一个 KivyMD 屏幕(EntryScreen)获取 MDTextField 输入,并将其插入另一个 KivyMD 屏幕,作为另一个 KivyMD 屏幕(ConfirmationScreen)中的 MDLabel 文本。我在互联网上搜索了答案但找不到。我该如何实现这个目标?这是我拥有的两个 KivyMD 屏幕代码:

进入屏幕

<EntryScreen>
    name: 'entry_screen'
    MDCard:
        size_hint: None, None
        size: 500, 750
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        padding: 25
        spacing: 25
        orientation: 'vertical'

        MDLabel:
            id: number_label
            text: "3 Digit Number"
            font_size: 25
            halign: 'center'
            size_hint_y: None
            height: self.texture_size[1]
            #padding_y: 15

        MDTextField:
            mode: "round"
            id: number
            input_filter: 'int'
            max_text_length: 3
            hint_text: "3 Digit Number"
            valign: 'center'
            icon_right: "apps"
            size_hint_x: None
            width: 250
            font_size: 18
            pos_hint: {"center_x": 0.5}

确认画面

<ConfirmationScreen>
    name: 'confirm_screen'
    MDCard:
        size_hint: None, None
        size: 500, 750
        pos_hint: {"center_x": 0.5, "center_y": 0.5}
        elevation: 10
        padding: 25
        spacing: 25
        orientation: 'vertical'

        MDLabel:
            id: confirm_label
            text: input from EntryScreen
            font_size: 30
            halign: 'center'
            size_hint_y: None
            height: self.texture_size[1]
            #padding_y: 15
python-3.x kivy kivymd
1个回答
0
投票

有很多不同的方法可以实现你的目标。

一种方法是在进入确认屏幕之前更改标签文本。这将是我的解决方案(最少的代码):

main.py

from kivy.properties import ObjectProperty
from kivymd.uix.screen import MDScreen
from kivy.lang import Builder
from kivymd.app import MDApp


class EntryScreen(MDScreen):
    num_field = ObjectProperty(None)
    
class ConfirmationScreen(MDScreen):
    def on_pre_enter(self):
        self.ids.confirm_label.text = self.manager.get_screen("entry_screen").num_field.text
    
    
class Test(MDApp):
    def build(self):
        return Builder.load_file("main.kv")

Test().run()

主.kv

<EntryScreen>
    name: 'entry_screen'
    num_field: num_field
    MDCard:
        MDLabel:
        MDTextField:
            id: num_field
            ...


<ConfirmationScreen>
    name: 'confirm_screen'
    MDCard:
        MDLabel:
            id: confirm_label
            ...



MDScreenManager:
    id: main_screen_manager
    EntryScreen:
    ConfirmationScreen:

我已将 num_field 作为 ObjectProperty 添加到 EntryScreen 类,以使文本字段可从 py 文件访问。

def on_pre_enter(self): #在进入屏幕之前触发

self.ids.confirm_label #从ConfirmationScreen中获取标签。(可以用另一个对象属性替换)

要从另一个屏幕获取对象属性,您需要获取屏幕管理器。例如,如果屏幕位于同一管理器中,则使用 self.manager。

使用 .get_screen(screen:str) 您可以获取屏幕,从中可以获取对象属性。

如果您不知道 ObjectProperties 是什么以及如何使用它们,我建议您阅读文档和以下问题:

房产文件

ObjectProperty 类的用法

© www.soinside.com 2019 - 2024. All rights reserved.