PySimpleGUI/DemoPrograms/Demo_Listbox_Using_Objects.py

44 lines
1.4 KiB
Python
Raw Permalink Normal View History

import PySimpleGUI as sg
"""
Demo - Listbox Using Objects
Several elements can take not just strings, but objects. The Listsbox is one of them.
This demo show how you can use objects directly in a Listbox in a way that you can access
information about each object that is different than what is shown in the Window.
The important part of this design pattern is the use of the __str__ method in your item objects.
This method is what determines what is shown in the window.
Copyright 2022 PySimpleGUI
"""
class Item():
def __init__(self, internal, shown):
self.internal = internal
self.shown = shown
def __str__(self):
return self.shown
# make list of some objects
my_item_list = [Item(f'Internal {i}', f'shown {i}') for i in range(100)]
layout = [ [sg.Text('Select 1 or more items and click "Go"')],
[sg.Listbox(my_item_list, key='-LB-', s=(20,20), select_mode=sg.LISTBOX_SELECT_MODE_EXTENDED)],
[sg.Output(s=(40,10))],
[sg.Button('Go'), sg.Button('Exit')] ]
window = sg.Window('Listbox Using Objects', layout)
while True:
event, values = window.read()
# print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
elif event == 'Go':
print('You selected:')
for item in values['-LB-']:
print(item.internal)
window.close()