PySimpleGUI 根据 sg.Radio 禁用了 InputText?

0 投票
1 回答
19 浏览
提问于 2025-04-13 18:52

我刚接触PySimpleGUI,

我想实现一个功能:有两个单选按钮。当我选择其中一个时,下面的文本输入框可以编辑;当我选择另一个时,下面的文本框就不能编辑了。这是我的代码。我尝试了很多次,但始终无法实现我想要的动态效果。你们能帮帮我吗?

import PySimpleGUI as sg
import os as os


def main():

    sg.theme('Tan')
    column =[
        [sg.Text('sliding window?',font=('Microsoft Yahei',10)),sg.Radio('Yes','g',default=True,key='-Radio1-'),sg.Radio('No','g',default=False,key='-Radio2-')],
        [sg.Text('fill in',font=('Microsoft Yahei',10)),sg.InputText('3',key='-S_Window-',visible=True,disabled=False, enable_events=True)],
        ] 
    layout = [[sg.Column(column)]]
    
    # Create the window
    window = sg.Window('abcd', layout,resizable='True',finalize=True)


    while True:
        event, values = window.read()
        if values['-Radio1-'] == True:
            window['-S_Window-'].update(disabled=False)
            window.refresh()
        if values['-Radio2-'] == True:
            window['-S_Window-'].update(disabled=True,background_color = 'grey')
            window.refresh()

    window.close()

if __name__ =='__main__':
        main()

在这里输入图片描述

1 个回答

0

在你的 sg.Radio 元素中,如果设置了选项 enable_events=True,那么当你点击这些单选按钮时,就会产生一个事件。如果没有这个设置,点击它们就不会产生事件,而且输入框的禁用状态也不会更新。

import PySimpleGUI as sg

sg.theme('DarkBlue')
layout =[
    [sg.Radio('Yes', 'g', enable_events=True, key=("Radio", 1)),
     sg.Radio('No',  'g', enable_events=True, key=("Radio", 2))],
    [sg.InputText('3', enable_events=True, key='-S_Window-')],
]
window = sg.Window('Title', layout)

while True:

    event, values = window.read()

    if event == sg.WIN_CLOSED:
        break
    elif isinstance(event, tuple) and event[0] == "Radio":
        disabled = (event[1]==2)
        window['-S_Window-'].update(disabled=disabled)

window.close()

撰写回答