【问题标题】:Update a checkbox based on selected values of another checkbox根据另一个复选框的选定值更新复选框
【发布时间】:2021-01-12 07:24:48
【问题描述】:

我想在我的 PySimpleGUI 中有一个全选复选框。当全选复选框被选中时,所有其他复选框都应更改为True,如果未选中任何其他复选框,则全选复选框应更改为false状态?

我可以通过点击按钮来做到这一点,但我找不到根据在另一个复选框中选择的值来更新复选框的方法?

import PySimpleGUI as sg
layout = [
    [sg.Checkbox ('select all', key = 'checkbox')],
    [sg.Checkbox ('value 1', key='check_value1')],
    [sg.Checkbox ('value 2',key='check_value2')],
    [sg.Button ('ON', key = 'ON')],
    [sg.Button ('OFF', key = 'OFF')]
]
window = sg.Window ('Sample GUI', layout) .Finalize ()
while True: # Event Loop
    event,values=window.read()
    if event in (None, 'Exit'):
        break
    elif event == 'ON':
        window ['checkbox']. Update (value = True)
    elif event == 'OFF':
        window ['checkbox']. Update (value = False)
    print(event,values)
window.close ()

有什么方法可以实现吗?

【问题讨论】:

    标签: python-3.x pysimplegui


    【解决方案1】:

    选项value或方法upgrade中的第一个参数如果True选中复选框,False将其清除,

    演示代码,

    import PySimpleGUI as sg
    
    sg.theme('DarkBlue')
    
    layout = [
        [sg.Checkbox('All checked',   enable_events=True, key='Check_All'),
         sg.Checkbox('All unchecked', enable_events=True, key='Uncheck_All')],
        [sg.HorizontalSeparator()]] + [
        [sg.Checkbox(f'check ({j}, {i})', enable_events=True, key=f'check{j}{i}')
            for i in range(5)] for j in range(4)
    ]
    
    window = sg.Window ('Sample GUI', layout, finalize=True)
    
    while True: # Event Loop
        event, values = window.read (timeout = 100)
        if event == sg.WINDOW_CLOSED:
            break
        elif event == 'Check_All':
            for j in range(4):
                for i in range(5):
                    window[f'check{j}{i}'].update(True)
            window['Uncheck_All'].update(False)
        elif event == 'Uncheck_All':
            for j in range(4):
                for i in range(5):
                    window[f'check{j}{i}'].update(False)
            window['Check_All'].update(False)
        elif event.startswith('check'):
            if not values[event]:
                window['Check_All'].update(False)
            else:
                window['Uncheck_All'].update(False)
    
    window.close ()
    

    【讨论】:

    • 也许使用元组作为键而不是字符串。键=(i,j)? values 变量具有复选框值,如果您使用 values 字典而不是 window[key].get(),它将保存查找和调用 get()。不过,这仍然是一个很好的答案。
    • 是的,window[event].get() 现在由values[event] 更新。
    【解决方案2】:

    Update方法的Value切换参数。 在下面的示例中,如果您按下 ON 按钮,则会输入一个检查,如果您按下 OFF 按钮,则会取消检查。

    import PySimpleGUI as sg
    from PySimpleGUI import Checkbox, Button
    layout = [
        [sg.Checkbox ('checkbox', key = 'checkbox')],
        [sg.Button ('ON', key = 'ON')],
        [sg.Button ('OFF', key = 'OFF')]
    ]
    window = sg.Window ('Sample GUI', layout) .Finalize ()
    while True: # Event Loop
        event, values ​​= window.read (timeout = 100)
        if event in (None, 'Exit'):
            break
        elif event == 'ON':
            window ['checkbox']. Update (value = True)
        elif event == 'OFF':
            window ['checkbox']. Update (value = False)
    window.close ()
    

    有关更多信息,您还可以参考此文档https://pysimplegui.readthedocs.io/en/latest/call%20reference/#checkbox-element

    【讨论】:

    • 我也在使用食谱中的代码。在这里,复选框的值在按钮事件上被更改。我要求在我的示例代码中选中所有复选框时,值 1 和值 2 复选框也应该被选中。如果值 1 或值 2 未选中,则全选也应取消选中。
    • 一旦看到文档或者你可以参考github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2023-03-13
    • 2016-07-22
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多