67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
|
import PySimpleGUI as sg
|
||
|
|
||
|
"""
|
||
|
Demo - Add and "Delete" Rows from a window
|
||
|
|
||
|
This is cut-down version of the Fed-Ex package tracking demo
|
||
|
|
||
|
The purpose is to show a technique for making windows that grow by clicking an "Add Row" button
|
||
|
Each row can be individually "deleted".
|
||
|
|
||
|
The reason for using the quotes are "deleted" is that the elements are simply hidden. The effect is the same as deleting them.
|
||
|
|
||
|
Copyright 2022 PySimpleGUI
|
||
|
"""
|
||
|
|
||
|
|
||
|
def item_row(item_num):
|
||
|
"""
|
||
|
A "Row" in this case is a Button with an "X", an Input element and a Text element showing the current counter
|
||
|
:param item_num: The number to use in the tuple for each element
|
||
|
:type: int
|
||
|
:return: List
|
||
|
"""
|
||
|
row = [sg.pin(sg.Col([[sg.B(sg.SYMBOL_X, border_width=0, button_color=(sg.theme_text_color(), sg.theme_background_color()), k=('-DEL-', item_num), tooltip='Delete this item'),
|
||
|
sg.In(size=(20,1), k=('-DESC-', item_num)),
|
||
|
sg.T(f'Key number {item_num}', k=('-STATUS-', item_num))]], k=('-ROW-', item_num)))]
|
||
|
return row
|
||
|
|
||
|
|
||
|
def make_window():
|
||
|
|
||
|
layout = [ [sg.Text('Add and "Delete" Rows From a Window', font='_ 15')],
|
||
|
[sg.Col([item_row(0)], k='-TRACKING SECTION-')],
|
||
|
[sg.pin(sg.Text(size=(35,1), font='_ 8', k='-REFRESHED-',))],
|
||
|
[sg.T(sg.SYMBOL_X, enable_events=True, k='Exit', tooltip='Exit Application'), sg.T('↻', enable_events=True, k='Refresh', tooltip='Save Changes & Refresh'), sg.T('+', enable_events=True, k='Add Item', tooltip='Add Another Item')]]
|
||
|
|
||
|
right_click_menu = [[''], ['Add Item', 'Edit Me', 'Version']]
|
||
|
|
||
|
window = sg.Window('Window Title', layout, right_click_menu=right_click_menu, use_default_focus=False, font='_ 15', metadata=0)
|
||
|
|
||
|
return window
|
||
|
|
||
|
|
||
|
def main():
|
||
|
|
||
|
window = make_window()
|
||
|
while True:
|
||
|
event, values = window.read() # wake every hour
|
||
|
print(event, values)
|
||
|
if event == sg.WIN_CLOSED or event == 'Exit':
|
||
|
break
|
||
|
if event == 'Add Item':
|
||
|
window.metadata += 1
|
||
|
window.extend_layout(window['-TRACKING SECTION-'], [item_row(window.metadata)])
|
||
|
elif event == 'Edit Me':
|
||
|
sg.execute_editor(__file__)
|
||
|
elif event == 'Version':
|
||
|
sg.popup_scrolled(__file__, sg.get_versions(), location=window.current_location(), keep_on_top=True, non_blocking=True)
|
||
|
if isinstance(event, tuple):
|
||
|
if event[0] == '-DEL-':
|
||
|
window[('-ROW-', event[1])].update(visible=False)
|
||
|
window.close()
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|