Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- class GridButtonsBase(tk.Frame):
- def __init__(self, parent=None, **kwargs):
- super().__init__(parent)
- self.reset_containers()
- self.draw()
- tk.Button(self, command=self.mutate_borders).grid(row=1, column=1, padx=10, pady=10, sticky='news')
- def reset_containers(self):
- self.borders = []
- for _ in range(3 * 3):
- self.borders.append(tk.Frame(self))
- self.border_map:list[list[int, int, int, int]] = [] #row, col, columnspan, rowspan
- def draw(self):
- self.border_map = [[0, 0, 3, 1], [1, 0, 3, 1], [2, 0, 3, 1], [0, 0, 1, 3], [0, 1, 1, 3], [0, 2, 1, 3]]
- for row in range(3):
- self.rowconfigure(row, minsize=100)
- for col in range(3):
- self.columnconfigure(col, minsize=100)
- self.draw_borders()
- def draw_borders(self):
- for index, entry in enumerate(self.border_map):
- if entry is None: continue
- row, col, colspan, rowspan = entry
- self.borders[index] = tk.Frame(self, bg='green')
- self.borders[index].grid(row=row, column=col, rowspan=rowspan, columnspan=colspan, padx=3, pady=3, sticky='news')
- def mutate_borders(self):
- self.mutate_border_map()
- for border in self.borders:
- border.grid_forget()
- for index, entry in enumerate(self.border_map):
- row, col, colspan, rowspan = entry
- self.borders[index].config(bg='red')
- self.borders[index].grid(row=row, column=col, rowspan=rowspan, columnspan=colspan, padx=3, pady=3, sticky='news')
- print(f'frame info: pos: ({self.borders[index].grid_info()["row"]}, {self.borders[index].grid_info()["column"]}); rowspan: {self.borders[index].grid_info()["rowspan"]}, columnspan: {self.borders[index].grid_info()["columnspan"]}')
- def mutate_border_map(self):
- cluttered_border_map = [[0, 0, 3, 1], [1, 0, 3, 1], [2, 0, 1, 1], [2, 1, 2, 1],[0, 0, 1, 2], [2, 0, 1, 1], [0, 1, 1, 3], [0, 2, 1, 3]]
- if True: # change to false to change behavior
- self.border_map = []
- for elem in cluttered_border_map:
- if elem not in self.border_map:
- self.border_map.append(elem)
- else:
- self.border_map = cluttered_border_map
- print(self.border_map)
- def clear_view(self):
- for border in self.borders:
- if border is None: continue
- border.grid_forget()
- class Temp(tk.Frame):
- def __init__(self, parent=None):
- super().__init__(parent)
- self.parent = parent
- self.gb_config: GridButtonsBase = GridButtonsBase(self)
- self.gb_config.pack()
- root = tk.Tk()
- Temp(parent=root).pack()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement