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

如何在KivyMD声明式风格下获取MDDialog输入框文本

解决KivyMD中MDDialog输入框文本获取问题

你的代码存在几个关键问题导致无法获取输入框文本,以下是修正方案:

问题分析

  1. 按钮事件绑定错误:on_release=self.dialog_search_button_click() 会在创建按钮时立即执行函数,而非点击时触发,应去掉括号绑定函数对象。
  2. 对话框实例引用错误:dialog = MDDialog 是引用类而非你创建的对话框实例,需使用之前保存的self.search_dialog。
  3. 输入框获取方式不可靠:依赖children[0]获取输入框容易因组件顺序变化失效,更稳妥的方式是直接保存输入框的引用。

修正后的完整代码

from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.uix.widget import Widget
from kivymd.app import MDApp
from kivymd.uix.button import MDButton, MDButtonText
from kivymd.uix.dialog import MDDialog, MDDialogHeadlineText, MDDialogSupportingText, MDDialogButtonContainer, \
    MDDialogContentContainer
from kivymd.uix.textfield import MDTextField, MDTextFieldLeadingIcon, MDTextFieldHelperText

KV = '''
ScreenManager:
    Screen_1:
        id: screen_1
        name: 'screen_1'


<Screen_1>
    MDScreen:
        id: screen_1
        BoxLayout:
            Button:
                text: 'open dialog'
                pos_hint: {'center_x': .5, 'center_y': .5}
                on_press:
                    root.open_dialog()

'''


class Test(MDApp):

    def build(self):
        return Builder.load_string(KV)


class Screen_1(Screen):

    def open_dialog(self):
        # 保存输入框引用,方便后续获取文本
        self.search_input = MDTextField(
            MDTextFieldLeadingIcon(icon='magnify'),
            MDTextFieldHelperText(text="Helper text"),
            id='search_name',
            mode="outlined"
        )
        self.search_dialog = MDDialog(
            MDDialogHeadlineText(text='Find human'),
            MDDialogSupportingText(text="Input name"),
            MDDialogContentContainer(
                self.search_input,
            ),
            MDDialogButtonContainer(
                Widget(),
                MDButton(
                    MDButtonText(text="Find"),
                    style="text",
                    # 绑定函数对象,去掉括号
                    on_release=self.dialog_search_button_click
                ),
                spacing="8dp",
            ), id='dialog'
        )
        self.search_dialog.open()

    def dialog_search_button_click(self, instance):
        # 直接通过保存的输入框引用获取文本
        print(self.search_input.text)

Test().run()

关键修改说明

  • 保存输入框引用:创建MDTextField时将其赋值给self.search_input,后续直接通过该变量获取文本,避免依赖组件层级。
  • 修复事件绑定:on_release=self.dialog_search_button_click 绑定函数对象,确保点击按钮时才执行函数。
  • 正确引用对话框实例:使用self.search_dialog访问你创建的对话框实例,而非直接引用MDDialog类。

内容的提问来源于stack exchange,提问作者Максим Игрок

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:15:10