#python #user-interface #datatables #pysimplegui
Вопрос:
Новичок в библиотеке, и, несмотря на работу с демонстрационным кодом, я изо всех сил пытаюсь запрашивать события, нажимая непосредственно на строку таблицы. Я могу легко создать что-то, что позволит пользователю выбрать строку, а затем запустить желаемое событие с помощью кнопки, как показано ниже, но я не уверен, как вырезать шаг кнопки и запустить событие непосредственно при нажатии на строку?
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_')]]
Ответ №1:
Чтобы получить событие нажатия на таблицу, предусмотрено два события
- Опция
enable_click_events
для события нажатия на ячейку перед выбранной строкой, поэтому значения[таблица] по-прежнему сохраняют старые данные для выбора. - Опция
enable_events
для события выбора строки, значения[таблица] сохранят данные для нового выбора.
Пример Кода
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()