根据另一个复选框的选定值更新一个复选框

Update a checkbox based on selected values of another checkbox

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

我可以通过点击按钮来完成,但是我找不到根据值更新复选框的方法select在另一个复选框中编辑?

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 ()

有什么办法可以实现吗?

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

选项 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 ()