#--------------------------------------------------------------------------- # # PyGUI - Grid layout component - Generic # #--------------------------------------------------------------------------- from LayoutUtils import equalize_components from GUI import Frame, export class Grid(Frame): def __init__(self, items, row_spacing = 5, column_spacing = 10, align = 'l', equalize = '', expand_row = None, expand_column = None, padding = (0, 0), **kwds): Frame.__init__(self) hpad, vpad = padding num_rows = len(items) num_cols = max([len(row) for row in items]) col_widths = [0] * num_cols row_heights = [0] * num_rows for i, row in enumerate(items): for j, item in enumerate(row): if item: row_heights[i] = max(row_heights[i], item.height) col_widths[j] = max(col_widths[j], item.width) tot_width = 0 row_top = 0 row_gap = 0 vanchor = 't' for i, row in enumerate(items): row_height = row_heights[i] row_top += row_gap col_left = 0 col_gap = 0 hanchor = 'l' if i == expand_row: vanchor = 'tb' for j, item in enumerate(row): col_width = col_widths[j] col_left += col_gap if item: if 'l' in align: x = 0 elif 'r' in align: x = col_width - item.width else: x = (col_width - item.width) // 2 if 't' in align: y = 0 elif 'b' in align: y = row_height - item.height else: y = (row_height - item.height) // 2 item.position = (hpad + col_left + x, vpad + row_top + y) if j == expand_column: item.anchor = 'lr' + vanchor else: item.anchor = hanchor + vanchor self.add(item) if j == expand_column: hanchor = 'r' col_left += col_width col_gap = column_spacing tot_width = max(tot_width, col_left) if i == expand_row: vanchor = 'b' row_top += row_height row_gap = row_spacing tot_height = row_top self.size = (tot_width + 2 * hpad, tot_height + 2 * vpad) self.set(**kwds) export(Grid)