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
相关产品推荐
相关产品推荐

