PySimpleGUI清空输入时CalendarButton标题误清除问题解决
问题原因
clear_input函数无差别遍历values字典中的所有key,对每个对应元素执行window[key]('')(等价于调用元素的update方法传入空字符串)。CalendarButton属于按钮类组件,其update方法接收的第一个位置参数会被直接作为按钮显示文本,传入空字符串时就会覆盖原有按钮标题,最终显示为无标题按钮。
解决方法
优先使用白名单方案,仅对需要清空的输入框执行清空操作,完全避免误改其他元素属性,逻辑可控性最高:
def clear_input(): # 明确列出所有需要清空内容的输入框key clear_targets = ('Date', 'Msisdn', 'Account', 'Customer') for key in clear_targets: window[key]('')
如果不想手动维护白名单,也可以在遍历时增加元素类型判断,跳过所有按钮类组件:
def clear_input(): for key in values: ele = window[key] # 遇到按钮类元素直接跳过,不执行清空 if isinstance(ele, sg.Button): continue ele('')
注意:白名单方案适配性更好,后续表单新增下拉选择、复选框等其他类型组件时,不会出现误清空、误修改组件属性的问题。
内容的提问来源于stack exchange,提问作者gjc75
相关产品推荐
相关产品推荐

