2022-07-18 16:24:03 +00:00
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 )
2022-07-18 17:49:11 +00:00
elif event [ 0 ] == ' -DEL- ' :
2022-07-18 16:24:03 +00:00
window [ ( ' -ROW- ' , event [ 1 ] ) ] . update ( visible = False )
window . close ( )
if __name__ == ' __main__ ' :
main ( )