I'm trying to get my GUI to have 2 "parts" (one left and one right), and naturally, adding elements to the layout just expands it vertically, so I tried doing a "left_part" layout and a "right_part" layout, then merge them with a Horizontal Separator padding, but it gives me something entirely different.
Ideally, I would want something like this (maybe with a thin line in between too):
This is the code:
import PySimpleGUI as sg
left_part = [
[sg.Text("Pick your favorite fruit")],
[sg.Input(size=(25, 1), key="path")],
[sg.FileBrowse(key="fav"), sg.Button("Submit")],
[sg.Image(key="img1")],
[sg.Text("Pick your favorite number")],
[sg.Input(key="num", size=(10,10))],
[sg.Button("Submit")],
]
right_part = [
[sg.Text("Pick your favorite animal")],
[sg.Input(key="animal")],
[sg.Button("Show image of animal")],
[sg.Image(key="img2")]
]
layout = [
[left_part],
[sg.HSeparator(pad=(500,0))],
[right_part],
]
window = sg.Window("Favorites", layout)
while True:
event, values = window.read()
if event == "Exit" or event == sg.WIN_CLOSED:
break
CodePudding user response:
The layout in following form left, separator and right vertically or in rows.
layout = [
[element1],
[sg.HSeparator(pad=(500,0))],
[element2],
]
Should be like this
layout = [
[element1, sg.HSeparator(pad=(500,0)), element2],
]
Since the element1 and element2 are for another complex layout, use Frame or Column element.
For horizontal layout, Instead of HSeparator, VSeparator will be used here.
For elements in Column vertical aligned top, so option vertical_alignment='top' added.
So the layout in your code maybe like this,
layout = [
[sg.Column(left_part, vertical_alignment='top'), sg.VSeparator(), sg.Column(right_part, vertical_alignment='top')],
]



