是否可以在 PysimpleGui table 中插入复选框?

Is it possible to insert a checkbox in a PysimpleGui table?

我想创建一个 PySimpleGui table,只需使用鼠标即可 select 编辑多行(对于 python3 中的应用程序)。 pysimplegui table 允许像往常一样通过 Ctrl 和 Shift 来 select 各种行,但我只需要通过单击行来做到这一点。

我试图通过在 table 加载的值列表中插入一个复选框来做到这一点,但正如预期的那样,我得到了 TypeError: 'Checkbox' object is not iterable 错误。

即使没有任何复选框,在 PySimpleGui 中是否仍然可以执行此操作? 提前感谢任何想法

这是我使用 sg.Tree

的方法
from io import BytesIO
from PIL import Image, ImageDraw
import PySimpleGUI as sg

def icon(check):
    box = (32, 32)
    background = (255, 255, 255, 0)
    rectangle = (3, 3, 29, 29)
    line = ((9, 17), (15, 23), (23, 9))
    im = Image.new('RGBA', box, background)
    draw = ImageDraw.Draw(im, 'RGBA')
    draw.rectangle(rectangle, outline='black', width=3)
    if check == 1:
        draw.line(line, fill='black', width=3, joint='curve')
    elif check == 2:
        draw.line(line, fill='grey', width=3, joint='curve')
    with BytesIO() as output:
        im.save(output, format="PNG")
        png = output.getvalue()
    return png

check = [icon(0), icon(1), icon(2)]

headings = ['President', 'Date of Birth', '1', '2', '3']
data = [
    ['Ronald Reagan', 'February 6'],
    ['Abraham Lincoln', 'February 12'],
    ['George Washington', 'February 22'],
    ['Andrew Jackson', 'March 15'],
    ['Thomas Jefferson', 'April 13'],
    ['Harry Truman', 'May 8'],
    ['John F. Kennedy', 'May 29'],
    ['George H. W. Bush', 'June 12'],
    ['George W. Bush', 'July 6'],
    ['John Quincy Adams', 'July 11'],
    ['Garrett Walker', 'July 18'],
    ['Bill Clinton', 'August 19'],
    ['Jimmy Carter', 'October 1'],
    ['John Adams', 'October 30'],
    ['Theodore Roosevelt', 'October 27'],
    ['Frank Underwood', 'November 5'],
    ['Woodrow Wilson', 'December 28'],
]

treedata = sg.TreeData()
for president, birthday in data:
    treedata.Insert('', president, president, values=[birthday]+[1,2,3],
    icon=check[0])

sg.theme('LightPurple')
sg.set_options(font=('Helvetica', 16))
layout = [
    [sg.Tree(data=treedata, headings=headings[1:], auto_size_columns=True,
        num_rows=10, col0_width=20, key='-TREE-', row_height=48, metadata=[],
        show_expanded=False, enable_events=True,
        select_mode=sg.TABLE_SELECT_MODE_BROWSE)],
    [sg.Button('Quit')]
]
window = sg.Window('Tree as Table', layout, finalize=True)
tree = window['-TREE-']
tree.Widget.heading("#0", text=headings[0]) # Set heading for column #0

while True:
    event, values = window.read()
    if event in (sg.WIN_CLOSED, 'Quit'):
        break
    elif event == '-TREE-':
        president = values['-TREE-'][0]
        print(president)
        if president in tree.metadata:
            tree.metadata.remove(president)
            tree.update(key=president, icon=check[0])
        else:
            tree.metadata.append(president)
            tree.update(key=president, icon=check[1])

window.close()