Reputation: 21
I’m trying to create a simple sales program. One window with buttons makes some columns turn visible and other ones invisible. But doing this remains a space between columns although invisible. How can I do this change between columns without this empty space?
The reduced code:
import PySimpleGUI as sg
from datetime import datetime
sg.theme('DarkAmber')
def place_cabecalho(elem):
return sg.Column([[elem]], pad=(0,0))
def place(elem):
return sg.Column([[elem]], pad=(0,0), expand_x=True)
#Layout of the snacks ('lanche' in portuguese)
layout_lanche = [ [place(sg.B('Esfiha', visible=True, k='bt_lanche_1', font='Verdana 14')),
place(sg.B('Joelho', visible=True, k='bt_lanche_2', font='Verdana 14')),
place(sg.B('Hamburguer', visible=True, k='bt_lanche_3', font='Verdana 14')),
place(sg.B('Quibe', visible=True, k='bt_lanche_4', font='Verdana 14')),
place(sg.B('Sanduiche', visible=True, k='bt_lanche_5', font='Verdana 14'))],
[sg.B('Confirmar', visible=True, k='bt_confirm_Lanche', font='Verdana 14')],
[place(sg.Output(visible=True, k='out_1_Lanche', echo_stdout_stderr=True, size=(30,10), font='Verdana 14', pad=(0,10))),
sg.B('Finalizar \nVenda', visible=False, k='bt_finalize_Lanche', font='Verdana 14', size=(10,4), pad=((10,0),10), disabled=True),
sg.B('Clear', visible=False, k='bt_cancel2_Lanche', font='Verdana 14', size=(10,4), pad=((10,0),10), disabled=True)]
]
#Layout of the juices ('suco' in portuguese)
layout_suco = [ [place(sg.B('Abacaxi', visible=True, k='bt_suco_1', font='Verdana 14')),
place(sg.B('Morango', visible=True, k='bt_suco_2', font='Verdana 14')),
place(sg.B('Manga + Maracujá', visible=True, k='bt_suco_3', font='Verdana 14')),
place(sg.B('Melancia + Morango', visible=True, k='bt_suco_4', font='Verdana 14')),
place(sg.B('Banana + Maçã', visible=True, k='bt_suco_5', font='Verdana 14'))],
[place(sg.B('300ml', visible=True, k='bt_tam_1_Suco', font='Verdana 14')),
place(sg.B('400ml', visible=True, k='bt_tam_2_Suco', font='Verdana 14')),
place(sg.B('500ml', visible=True, k='bt_tam_3_Suco', font='Verdana 14')),
place(sg.B('700ml', visible=True, k='bt_tam_4_Suco', font='Verdana 14'))],
[sg.B('Confirmar', visible=True, k='bt_confirm_Suco', font='Verdana 14')],
[sg.Output(visible=True, k='out_1_Suco', echo_stdout_stderr=True, size=(30,10), font='Verdana 14', pad=(0,10)),
sg.B('Finalizar \nVenda', visible=False, k='bt_finalize_Suco', font='Verdana 14', size=(10,4), pad=((10,0),10), disabled=True),
sg.B('Clear', visible=False, k='bt_cancel2_Suco', font='Verdana 14', size=(10,4), pad=((10,0),10), disabled=True)]
]
#Layout with the header with date and buttons 'quit' 'cancel'
layout_principal = [ [sg.Txt(getTime(), font='Arial 8', justification='left', k='date'),
sg.Column('', expand_x=True),
place_cabecalho(sg.B('Cancel', size=(7,1), font='Arial 8', k='bt_cancel', visible=False)),
place_cabecalho(sg.B('Help', size=(5,1), font='Arial 8', k='bt_help', visible=False)),
place_cabecalho(sg.B('Quit', size=(5,1), font='Arial 8', k='bt_quit'))],
[place(sg.B('1 - Entrada', k='bt_entrada', font='Verdana 14')),
place(sg.B('2 - Saída', k='bt_saida', font='Verdana 14'))],
[place(sg.B('Sucos', visible=False, k='bt_class_suco', font='Verdana 14')),
place(sg.B('Lanches', visible=False, k='bt_class_lanche', font='Verdana 14')),
place(sg.B('Açaí', visible=False, k='bt_class_acai', font='Verdana 14')),
place(sg.B('Bebidas', visible=False, k='bt_class_bebida', font='Verdana 14')),
place(sg.B('Outros', visible=False, k='bt_class_outros', font='Verdana 14'))],
]
layout = [ [sg.Column(layout_principal, k='layout_principal', expand_x=True)],
[sg.Column(layout_suco, k='layout_suco', visible=False, expand_x=True)],
[sg.Column(layout_lanche, k='layout_lanche', visible=False, expand_x=True)],
[sg.Column(layout_acai, k='layout_acai', visible=False, expand_x=True)],
[sg.Column(layout_bebida, k='layout_bebida', visible=False, expand_x=True)]
]
tela = sg.Window('Python Teste 4', layout, finalize=True, resizable=True)
default_color = ['black', '#fdcb52']
tela['bt_entrada'].expand(True,False,False)
tela['bt_saida'].expand(True,False,False)
while True:
event, values = tela.read(timeout=10)
tela['date'].update(getTime())
if event in (None, 'bt_quit', sg.WIN_CLOSED):
tela.close()
break
if event in ('bt_cancel', 'bt_cancel2_Suco', 'bt_cancel2_Lanche', 'bt_cancel2_Acai', 'bt_cancel2_Bebida'):
pass #Lot of code bring back the default state of the buttons
#IF EVENT == 'ENTRADA'
#--------------------- ENTRADA ---------------------#
if event == 'bt_entrada':
tela['bt_entrada'].update(button_color=('white', 'firebrick'))
tela['bt_saida'].update(disabled=True)
tela['bt_cancel'].update(visible=True)
tela['bt_help'].update(visible=True)
tela['bt_class_suco'].update(visible=True)
tela['bt_class_suco'].expand(True,False,False)
tela['bt_class_lanche'].update(visible=True)
tela['bt_class_lanche'].expand(True,False,False)
tela['bt_class_acai'].update(visible=True)
tela['bt_class_acai'].expand(True,False,False)
tela['bt_class_bebida'].update(visible=True)
tela['bt_class_bebida'].expand(True,False,False)
tela['bt_class_outros'].update(visible=True)
tela['bt_class_outros'].expand(True,False,False)
#--------------------- ENTRADA ---------------------#
#IF EVENT == 'SUCO'
#--------------------- CLASSIFICAÇÃO SUCO ---------------------#
if event == 'bt_class_suco':
classify = 'Suco'
tela['bt_class_suco'].update(button_color=('white', 'firebrick'))
tela['bt_class_lanche'].update(disabled=True)
tela['bt_class_acai'].update(disabled=True)
tela['bt_class_bebida'].update(disabled=True)
tela['bt_class_outros'].update(disabled=True)
tela['layout_lanche'].update(visible=False)
tela['layout_acai'].update(visible=False)
tela['layout_bebida'].update(visible=False)
tela['layout_principal'].update(visible=True)
tela['layout_suco'].update(visible=True)
tela['bt_suco_1'].expand(True,False,False)
tela['bt_suco_2'].expand(True,False,False)
tela['bt_suco_3'].expand(True,False,False)
tela['bt_suco_4'].expand(True,False,False)
tela['bt_suco_5'].expand(True,False,False)
tela['bt_tam_1_Suco'].expand(True,False,False)
tela['bt_tam_2_Suco'].expand(True,False,False)
tela['bt_tam_3_Suco'].expand(True,False,False)
tela['bt_tam_4_Suco'].expand(True,False,False)
tela['bt_confirm_Suco'].expand(True,False,False)
tela['out_1_Suco'].update(visible=True)
tela['out_1_Suco'].expand(True,False,False)
tela['bt_finalize_Suco'].update(visible=True)
tela['bt_finalize_Suco'].expand(True,True,True)
tela['bt_cancel2_Suco'].update(visible=True)
tela['bt_cancel2_Suco'].expand(True,True,True)
#--------------------- CLASSIFICAÇÃO SUCO ---------------------#
#SHOW THE OPTIONS OF SUCO ('JUICES' IN PORTUGUESE)
#--------------------- SUCO ---------------------#
if event == 'bt_suco_1':
op = 'Suco 1'
tela['bt_suco_1'].update(button_color=('white', 'firebrick'))
tela['bt_suco_2'].update(disabled=True)
tela['bt_suco_3'].update(disabled=True)
tela['bt_suco_4'].update(disabled=True)
tela['bt_suco_5'].update(disabled=True)
if event == 'bt_suco_2':
op = 'Suco 2'
tela['bt_suco_2'].update(button_color=('white', 'firebrick'))
tela['bt_suco_1'].update(disabled=True)
tela['bt_suco_3'].update(disabled=True)
tela['bt_suco_4'].update(disabled=True)
tela['bt_suco_5'].update(disabled=True)
if event == 'bt_suco_3':
op = 'Suco 3'
tela['bt_suco_3'].update(button_color=('white', 'firebrick'))
tela['bt_suco_1'].update(disabled=True)
tela['bt_suco_2'].update(disabled=True)
tela['bt_suco_4'].update(disabled=True)
tela['bt_suco_5'].update(disabled=True)
if event == 'bt_suco_4':
op = 'Suco 4'
tela['bt_suco_4'].update(button_color=('white', 'firebrick'))
tela['bt_suco_1'].update(disabled=True)
tela['bt_suco_2'].update(disabled=True)
tela['bt_suco_3'].update(disabled=True)
tela['bt_suco_5'].update(disabled=True)
if event == 'bt_suco_5':
op = 'Suco 5'
tela['bt_suco_5'].update(button_color=('white', 'firebrick'))
tela['bt_suco_1'].update(disabled=True)
tela['bt_suco_2'].update(disabled=True)
tela['bt_suco_3'].update(disabled=True)
tela['bt_suco_4'].update(disabled=True)
#--------------------- SUCO ---------------------#
#SHOW THE OPTIONS OF SIZE
#--------------------- TAMANHO DO SUCO ---------------------#
if event == 'bt_tam_1_Suco':
tam = '300ml'
tela['bt_tam_1_Suco'].update(button_color=('white', 'firebrick'))
tela['bt_tam_2_Suco'].update(disabled=True)
tela['bt_tam_3_Suco'].update(disabled=True)
tela['bt_tam_4_Suco'].update(disabled=True)
if event == 'bt_tam_2_Suco':
tam = '400ml'
tela['bt_tam_2_Suco'].update(button_color=('white', 'firebrick'))
tela['bt_tam_1_Suco'].update(disabled=True)
tela['bt_tam_3_Suco'].update(disabled=True)
tela['bt_tam_4_Suco'].update(disabled=True)
if event == 'bt_tam_3_Suco':
tam = '500ml'
tela['bt_tam_3_Suco'].update(button_color=('white', 'firebrick'))
tela['bt_tam_1_Suco'].update(disabled=True)
tela['bt_tam_2_Suco'].update(disabled=True)
tela['bt_tam_4_Suco'].update(disabled=True)
if event == 'bt_tam_4_Suco':
tam = '700ml'
tela['bt_tam_4_Suco'].update(button_color=('white', 'firebrick'))
tela['bt_tam_1_Suco'].update(disabled=True)
tela['bt_tam_2_Suco'].update(disabled=True)
tela['bt_tam_3_Suco'].update(disabled=True)
#--------------------- TAMANHO DO SUCO ---------------------#
#THE SAME FOR THE 'SNACKS' (LANCHE IN PORTUGUESE)
#--------------------- CLASSIFICAÇÃO LANCHE ---------------------#
if event == 'bt_class_lanche':
classify = 'Lanche'
tela['bt_class_lanche'].update(button_color=('white', 'firebrick'))
tela['bt_class_suco'].update(disabled=True)
tela['bt_class_acai'].update(disabled=True)
tela['bt_class_bebida'].update(disabled=True)
tela['bt_class_outros'].update(disabled=True)
tela['layout_suco'].update(visible=False)
tela['layout_acai'].update(visible=False)
tela['layout_bebida'].update(visible=False)
tela['layout_principal'].update(visible=True)
tela['layout_lanche'].update(visible=True)
tela['bt_lanche_1'].expand(True,False,False)
tela['bt_lanche_2'].expand(True,False,False)
tela['bt_lanche_3'].expand(True,False,False)
tela['bt_lanche_4'].expand(True,False,False)
tela['bt_lanche_5'].expand(True,False,False)
tela['bt_confirm_Lanche'].expand(True,False,False)
tela['out_1_Lanche'].update(visible=True)
tela['out_1_Lanche'].expand(True,False,False)
tela['bt_finalize_Lanche'].update(visible=True)
tela['bt_finalize_Lanche'].expand(True,True,True)
tela['bt_cancel2_Lanche'].update(visible=True)
tela['bt_cancel2_Lanche'].expand(True,True,True)
#--------------------- CLASSIFICAÇÃO LANCHE ---------------------#
#AND THE OPTIONS
#--------------------- LANCHES ---------------------#
if event == 'bt_lanche_1':
op = 'Esfiha'
tela['bt_lanche_1'].update(button_color=('white', 'firebrick'))
tela['bt_lanche_2'].update(disabled=True)
tela['bt_lanche_3'].update(disabled=True)
tela['bt_lanche_4'].update(disabled=True)
tela['bt_lanche_5'].update(disabled=True)
if event == 'bt_lanche_2':
op = 'Joelho'
tela['bt_lanche_2'].update(button_color=('white', 'firebrick'))
tela['bt_lanche_1'].update(disabled=True)
tela['bt_lanche_3'].update(disabled=True)
tela['bt_lanche_4'].update(disabled=True)
tela['bt_lanche_5'].update(disabled=True)
if event == 'bt_lanche_3':
op = 'Hamburguer'
tela['bt_lanche_3'].update(button_color=('white', 'firebrick'))
tela['bt_lanche_1'].update(disabled=True)
tela['bt_lanche_2'].update(disabled=True)
tela['bt_lanche_4'].update(disabled=True)
tela['bt_lanche_5'].update(disabled=True)
if event == 'bt_lanche_4':
op = 'Quibe'
tela['bt_lanche_4'].update(button_color=('white', 'firebrick'))
tela['bt_lanche_1'].update(disabled=True)
tela['bt_lanche_2'].update(disabled=True)
tela['bt_lanche_3'].update(disabled=True)
tela['bt_lanche_5'].update(disabled=True)
if event == 'bt_lanche_5':
op = 'Sanduiche'
tela['bt_lanche_5'].update(button_color=('white', 'firebrick'))
tela['bt_lanche_1'].update(disabled=True)
tela['bt_lanche_2'].update(disabled=True)
tela['bt_lanche_3'].update(disabled=True)
tela['bt_lanche_4'].update(disabled=True)
#--------------------- LANCHES ---------------------#
else:
pass
tela.close()
When i click 'Entrada' and then 'Suco': First layout
And then when i cancel and click 'Lanche': Second layout
Upvotes: 1
Views: 5571
Reputation: 21
i've already solved this problem.
https://pysimplegui.readthedocs.io/en/latest/call%20reference/#layout-helper-funcs
Thanks for the tips.
Here it is the code:
layout = [ [sg.Column(layout_principal, k='layout_principal', expand_x=True)],
[sg.pin(sg.Column(layout_suco, k='layout_suco', visible=False, expand_x=True), expand_x=True)],
[sg.pin(sg.Column(layout_lanche, k='layout_lanche', visible=False, expand_x=True), expand_x=True)],
[sg.pin(sg.Column(layout_acai, k='layout_acai', visible=False, expand_x=True), expand_x=True)],
[sg.pin(sg.Column(layout_bebida, k='layout_bebida', visible=False, expand_x=True), expand_x=True)]
]
Upvotes: 1