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

Python Kivy多MDTextField联动触发RecursionError纯KV层解决方法咨询

纯KV实现解决方案

可以利用输入框的焦点状态做判断切断递归:用户主动编辑的输入框会处于获得焦点的状态,而代码被动修改的输入框此时没有焦点,只要在on_text逻辑开头增加焦点判断即可,不需要额外编写Python代码。

实现方法

每个MDTextField的on_text事件开头添加判断逻辑:如果当前控件没有焦点,直接终止后续执行,只有用户正在编辑的聚焦输入框才会触发其他字段的更新。
修改后的代码示例如下:

MDTextField:
    id:millimeterfield
    hint_text: "Millimeters"
    on_text:     
        # 仅当前输入框被用户选中激活时才执行后续更新
        if not self.focus: return
        centimeterfield.text = str(float(millimeterfield.text) / 10).rstrip('0').rstrip('.') if millimeterfield.text != "" else "0"
        meterfield.text = str(float(millimeterfield.text) / 1000).rstrip('0').rstrip('.') if millimeterfield.text != "" else "0"
        kilometerfield.text = str(float(millimeterfield.text) / 1000000).rstrip('0').rstrip('.') if millimeterfield.text != "" else "0"
        inchfield.text = str(float(millimeterfield.text) / 25.4).rstrip('0').rstrip('.') if millimeterfield.text != "" else "0"
        feetfield.text = str(float(millimeterfield.text) / 305).rstrip('0').rstrip('.') if millimeterfield.text != "" else "0"
        yardfield.text = str(float(millimeterfield.text) / 914).rstrip('0').rstrip('.') if millimeterfield.text != "" else "0"
        milefield.text = "0"

所有其他输入框都按照同样的逻辑修改,在on_text开头添加if not self.focus: return即可。

额外注意

你当前代码里的kilometerfield的on_text逻辑错误引用了meterfield的ID,需要修正为使用自身的kilometerfield.text做计算,否则换算数值会出现错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:54:03