PySimpleGUI中如何根据单选按钮状态控制输入框禁用/启用?
解决PySimpleGUI单选按钮控制输入框可编辑状态的问题
你的代码无法实现动态效果的核心原因是单选按钮没有启用事件响应,PySimpleGUI的Radio组件默认enable_events=False,点击时不会触发窗口的read()返回事件,导致循环内的状态更新逻辑无法执行。另外,代码缺少窗口关闭的判断,会导致程序无法正常退出。
以下是修正后的完整代码:
import PySimpleGUI as sg def main(): sg.theme('Tan') column = [ [sg.Text('sliding window?', font=('Microsoft Yahei',10)), sg.Radio('Yes', 'g', default=True, key='-Radio1-', enable_events=True), sg.Radio('No', 'g', default=False, key='-Radio2-', enable_events=True)], [sg.Text('fill in', font=('Microsoft Yahei',10)), sg.InputText('3', key='-S_Window-', disabled=False)] ] layout = [[sg.Column(column)]] window = sg.Window('abcd', layout, resizable=True, finalize=True) while True: event, values = window.read() # 处理窗口关闭事件 if event == sg.WIN_CLOSED: break # 根据单选按钮状态更新输入框 if values['-Radio1-']: window['-S_Window-'].update(disabled=False) elif values['-Radio2-']: window['-S_Window-'].update(disabled=True, background_color='grey') window.close() if __name__ == '__main__': main()
关键修改点:
- 给两个
Radio组件添加enable_events=True,确保点击单选按钮时触发窗口事件,让循环内的状态更新逻辑得以执行 - 添加
event == sg.WIN_CLOSED的判断,允许通过关闭窗口正常退出程序 - 移除不必要的
window.refresh()调用,update()方法会自动触发窗口刷新 - 将第二个
if改为elif,简化逻辑避免重复判断
这样修改后,点击"Yes"单选按钮时输入框变为可编辑状态,点击"No"时输入框变为不可编辑的灰色状态,完全符合需求。
内容的提问来源于stack exchange,提问作者J Peg
相关产品推荐
相关产品推荐

