【问题标题】:How to trigger events by clicking on row in PySimpleGUI如何通过单击 PySimpleGUI 中的行来触发事件
【发布时间】:2021-12-21 10:44:57
【问题描述】:

库的新手,尽管使用了演示代码,但我还是很难通过直接单击表格行来提示事件。我可以轻松地制作一些允许用户选择一行的东西,然后使用如下按钮触发所需的事件,但我不确定如何删除按钮步骤并通过单击直接触发事件行?

   layout = [[sg.Table(values=df.values.tolist(),
                            headings=df.columns.tolist(),
                            max_col_width=25,
                            auto_size_columns=True,
                            justification='right',
                            # alternating_row_color='lightblue',
                            num_rows=min(len(df), 20))],
              
              
              [sg.Button('Select Row', key='_rowselected_')]]

【问题讨论】:

    标签: python user-interface datatables pysimplegui


    【解决方案1】:

    要获取点击表格的事件,提供了两个事件

    • 选项 enable_click_events 用于在选择行之前单击单元格的事件,因此 values[table] 仍保留旧数据以供选择。
    • 选项enable_events 用于行选择事件,值[table] 将保留新选择的数据。

    示例代码

    import PySimpleGUI as sg
    
    sg.theme("DarkBlue3")
    
    newlist = [
        [f"Cell ({row:0>2d}, {col:0>2d})" for col in range(8)]
            for row in range(10)
    ]
    
    COL_HEADINGS = ["Date", "Ref", "ID", "Owner", "Customer", "Price", "Size", "Path"]
    
    layout = [
        [sg.Table(
            values=newlist,
            headings=COL_HEADINGS,
            max_col_width=25,
            num_rows=10,
            alternating_row_color='green',
            key='-TABLE-',
            enable_events=True,
            # enable_click_events=True,
            justification='center',
        )],
        [sg.Text("", size=(50, 1), expand_x=True, key='-Position-')]
    ]
    
    window = sg.Window('Table', layout, finalize=True)
    table = window['-TABLE-']
    position = window['-Position-']
    
    while True:
        event, values = window.read()
        if event == sg.WIN_CLOSED:
            break
        elif isinstance(event, tuple) and event[0:2] == ('-TABLE-', '+CICKED+'):
            # click position row, column, count from 0, -1 for headings
            row, col = event[2]
            selection = values['-TABLE-']
            # previous selected row number, not now.
            previous_select_row = selection[0] if selection else 'None'
            position.update(f'Clicked position is ({row}, {col}), and previous selected row is {previous_select_row}')
    
        elif event == '-TABLE-':
            # selected row number, cound from 0
            row = values[event]
            if row:
                position.update(f'Selected row is {row}')
    
        print(event, values)
    
    window.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多