Skip to content

[Feature request] Grid / Table layout helper or function #99

@Mambouna

Description

@Mambouna

I'd love something like sg.GridLayout(layout) or sg.TableLayout(layout) analogous to sg.Column(layout). An easy way to arrange elements in a grid.

This is already sort of the default when creating a layout as a nested list of rows where members are placed horizontally in each row, however currently there is no common delineation between those points in the default layout. This should definitely stay that way as it's a sensible way to handle things. Often though we might want elements to stack neatly on top of each with the same dimensions for a clean and readable layout.

This is the default look when layouting with the nested list:
Image

This is the resulting look when wrapping the elements in a grid layout helper:
Image

I'd love to discuss the possibilities for this. I've written a small helper function that can achieve this by itself, but any integration into the codebase will necessarily have to look different. If it would be useful to have though, I'll include that helper here:

def GridLayout(layout):
    column_layout = []
    columns_num = len(max(layout, key=len))
    for i in range(columns_num):
        column_list = []
        for row_list in layout:
            if i < len(row_list):
                value = row_list[i]
                if value == None: # This allows empty cells.
                    column_list.append([sg.Text("")])
                else:
                    column_list.append([value])
            else:
                column_list.append([sg.Text("")])
        column_layout.append(sg.Column(column_list))
    return column_layout

Using None is the option I went with to allow leaving cells in the grid structure empty. As I'm pretty new with FreeSimpleGUI, I made empty cells happen with empty text elements, but a proper integration could surely do better.

I've been very pleased with FreeSimpleGUI so far, so if there's interest in this and I could get some guidance on how to best integrate something like this, I'd be happy to give it a shot myself when I find time. Any thoughts would be appreciated.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions