Beispiel #1
0
def Tabella(master):

    if len(GLOBE.titolo) == 0:
        return
    
    righe = len(list(GLOBE.titolo.keys()))
   
    colonne = len(list(GLOBE.titolo.get(list(GLOBE.titolo.keys())[0]).keys())) - 1
    tabella = Sheet(master, data = [[f"Row {r}, Column {c}" for c in range(colonne)] for r in range(righe)], height = 400, width = 1550)

        
    tabella.headers((f"Header{c}" for c in range(colonne)))
    key_titolo = list(GLOBE.titolo.keys())
    key_isin = GLOBE.titolo.get(key_titolo[0]).keys()
    header = list(key_isin)
    index = 0

    for i in header:        #mi crea gli header della tabella

        tabella.headers(i.capitalize(), index)
        # tabella.column_width(column = index, width = 150)

        index = index + 1

        if index == colonne:
            break
    
    for j in range(len(key_titolo)):   #mi riempe le celle della tabella

        for k in range(len(header) - 1):

            tabella.set_cell_data(j, k, value = GLOBE.titolo.get(key_titolo[j]).get(header[k]))

    tabella.set_all_cell_sizes_to_text()
    tabella.grid(row = 0, column = 0, sticky = "nswe")
Beispiel #2
0
class demo(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)
        self.frame = tk.Frame(self)
        self.frame.grid_columnconfigure(0, weight=1)
        self.frame.grid_rowconfigure(0, weight=1)
        self.sheet = Sheet(
            self.frame,
            #empty_vertical = 0,
            #empty_horizontal = 0,
            #show_vertical_grid = False,
            #show_horizontal_grid = False,
            #auto_resize_numerical_row_index = False,
            #header_height = "3",
            #row_index_width = 100,
            #align = "center",
            #header_align = "w",
            #row_index_align = "w",
            #theme = "green",
            data=[[
                f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(30)
            ] for r in range(100)],  #to set sheet data at startup
            #data = [[1,2,3,4,5], [1,2,3]],
            #headers = [f"Column {c}\nnewline1\nnewline2" for c in range(30)],
            #row_index = [f"Row {r}\nnewline1\nnewline2" for r in range(2000)],
            #set_all_heights_and_widths = True, #to fit all cell sizes to text at start up
            #headers = 0, #to set headers as first row at startup
            #headers = [f"Column {c}\nnewline1\nnewline2" for c in range(30)],
            theme="dark green",
            #header_background = "black",
            #row_index = 0, #to set row_index as first column at startup
            #total_rows = 2000, #if you want to set empty sheet dimensions at startup
            #total_columns = 30, #if you want to set empty sheet dimensions at startup
            height=500,  #height and width arguments are optional
            width=1200  #For full startup arguments see DOCUMENTATION.md
        )
        #self.sheet.hide("row_index")
        #self.sheet.hide("header")
        #self.sheet.hide("top_left")
        self.sheet.enable_bindings((
            "single_select",  #"single_select" or "toggle_select"
            "drag_select",  #enables shift click selection as well
            "column_drag_and_drop",
            "row_drag_and_drop",
            "column_select",
            "row_select",
            "column_width_resize",
            "double_click_column_resize",
            #"row_width_resize",
            #"column_height_resize",
            "arrowkeys",
            "row_height_resize",
            "double_click_row_resize",
            "right_click_popup_menu",
            "rc_select",
            "rc_insert_column",
            "rc_delete_column",
            "rc_insert_row",
            "rc_delete_row",
            "copy",
            "cut",
            "paste",
            "delete",
            "undo",
            "edit_cell"))
        #self.sheet.enable_bindings("enable_all")
        #self.sheet.disable_bindings() #uses the same strings
        #self.bind("<Configure>", self.window_resized)
        self.sheet.set_all_cell_sizes_to_text()
        self.frame.grid(row=0, column=0, sticky="nswe")
        self.sheet.grid(row=0, column=0, sticky="nswe")
        """_________________________ EXAMPLES _________________________ """
        """_____________________________________________________________"""

        # __________ CHANGING THEME __________

        #self.sheet.change_theme("dark")

        # __________ HIGHLIGHT / DEHIGHLIGHT CELLS __________

        self.sheet.highlight_cells(row=5, column=5, bg="#ed4337", fg="white")
        self.sheet.highlight_cells(row=5, column=1, bg="#ed4337", fg="white")
        self.sheet.highlight_cells(row=5,
                                   bg="#ed4337",
                                   fg="white",
                                   canvas="row_index")
        self.sheet.highlight_cells(column=0,
                                   bg="#ed4337",
                                   fg="white",
                                   canvas="header")

        # __________ DISPLAY SUBSET OF COLUMNS __________

        #self.sheet.display_subset_of_columns(indexes = [1, 0, 2], enable = True) #any order

        # __________ DATA AND DISPLAY DIMENSIONS __________

        #self.sheet.total_rows(4) #will delete rows if set to less than current data rows
        #self.sheet.total_columns(2) #will delete columns if set to less than current data columns
        #self.sheet.sheet_data_dimensions(total_rows = 4, total_columns = 2)
        #self.sheet.sheet_display_dimensions(total_rows = 4, total_columns = 6) #currently resets widths and heights
        #self.sheet.set_sheet_data_and_display_dimensions(total_rows = 4, total_columns = 2) #currently resets widths and heights

        # __________ SETTING OR RESETTING TABLE DATA __________

        #.set_sheet_data() function returns the object you use as argument
        #verify checks if your data is a list of lists, raises error if not
        #self.data = self.sheet.set_sheet_data([[f"Row {r} Column {c}" for c in range(30)] for r in range(2000)], verify = False)

        # __________ SETTING ROW HEIGHTS AND COLUMN WIDTHS __________

        #self.sheet.set_cell_data(0, 0, "\n".join([f"Line {x}" for x in range(500)]))
        #self.sheet.set_column_data(1, ("" for i in range(2000)))
        #self.sheet.row_index((f"Row {r}" for r in range(2000))) #any iterable works
        #self.sheet.row_index("\n".join([f"Line {x}" for x in range(500)]), 2)
        #self.sheet.column_width(column = 0, width = 300)
        #self.sheet.row_height(row = 0, height = 60)
        #self.sheet.set_column_widths([120 for c in range(30)])
        #self.sheet.set_row_heights([30 for r in range(2000)])
        #self.sheet.set_all_column_widths()
        #self.sheet.set_all_row_heights()
        #self.sheet.set_all_cell_sizes_to_text()

        # __________ BINDING A FUNCTIONS TO USER ACTIONS __________

        self.sheet.extra_bindings([
            ("cell_select", self.cell_select),
            #("begin_edit_cell", self.begin_edit_cell),
            ("shift_cell_select", self.shift_select_cells),
            ("drag_select_cells", self.drag_select_cells),
            ("ctrl_a", self.ctrl_a),
            ("row_select", self.row_select),
            ("shift_row_select", self.shift_select_rows),
            ("drag_select_rows", self.drag_select_rows),
            ("column_select", self.column_select),
            ("shift_column_select", self.shift_select_columns),
            ("drag_select_columns", self.drag_select_columns),
            ("deselect", self.deselect)
        ])

        #self.sheet.extra_bindings([("cell_select", None)]) #unbind cell select
        #self.sheet.extra_bindings("unbind_all") #remove all functions set by extra_bindings()

        # __________ BINDING NEW RIGHT CLICK FUNCTION __________

        self.sheet.bind("<3>", self.rc)

        # __________ SETTING HEADERS __________

        #self.sheet.headers((f"Header {c}" for c in range(30))) #any iterable works
        #self.sheet.headers("Change header example", 2)
        #print (self.sheet.headers())
        #print (self.sheet.headers(index = 2))

        # __________ SETTING ROW INDEX __________

        #self.sheet.row_index((f"Row {r}" for r in range(2000))) #any iterable works
        #self.sheet.row_index("Change index example", 2)
        #print (self.sheet.row_index())
        #print (self.sheet.row_index(index = 2))

        # __________ INSERTING A ROW __________

        #self.sheet.insert_row(values = (f"my new row here {c}" for c in range(30)), idx = 0) # a filled row at the start
        #self.sheet.insert_row() # an empty row at the end

        # __________ INSERTING A COLUMN __________

        #self.sheet.insert_column(values = (f"my new col here {r}" for r in range(2050)), idx = 0) # a filled column at the start
        #self.sheet.insert_column() # an empty column at the end

        # __________ SETTING A COLUMNS DATA __________

        # any iterable works
        #self.sheet.set_column_data(0, values = (0 for i in range(2050)))

        # __________ SETTING A ROWS DATA __________

        # any iterable works
        #self.sheet.set_row_data(0, values = (0 for i in range(35)))

        # __________ SETTING A CELLS DATA __________

        #self.sheet.set_cell_data(1, 2, "NEW VALUE")

        # __________ GETTING FULL SHEET DATA __________

        #self.all_data = self.sheet.get_sheet_data()

        # __________ GETTING CELL DATA __________

        #print (self.sheet.get_cell_data(0, 0))

        # __________ GETTING ROW DATA __________

        #print (self.sheet.get_row_data(0)) # only accessible by index

        # __________ GETTING COLUMN DATA __________

        #print (self.sheet.get_column_data(0)) # only accessible by index

        # __________ GETTING SELECTED __________

        #print (self.sheet.get_currently_selected())
        #print (self.sheet.get_selected_cells())
        #print (self.sheet.get_selected_rows())
        #print (self.sheet.get_selected_columns())
        #print (self.sheet.get_selection_boxes())
        #print (self.sheet.get_selection_boxes_with_types())

        # __________ SETTING SELECTED __________

        #self.sheet.deselect("all")
        #self.sheet.create_selection_box(0, 0, 2, 2, type_ = "cells") #type here is "cells", "cols" or "rows"
        #self.sheet.set_currently_selected(0, 0)
        #self.sheet.set_currently_selected("row", 0)
        #self.sheet.set_currently_selected("column", 0)

        # __________ CHECKING SELECTED __________

        #print (self.sheet.is_cell_selected(0, 0))
        #print (self.sheet.is_row_selected(0))
        #print (self.sheet.is_column_selected(0))
        #print (self.sheet.anything_selected())

        # __________ HIDING THE ROW INDEX AND HEADERS __________

        #self.sheet.hide("row_index")
        #self.sheet.hide("top_left")
        #self.sheet.hide("header")

        # __________ ADDITIONAL BINDINGS __________

        #self.sheet.bind("<Motion>", self.mouse_motion)

    """

    UNTIL DOCUMENTATION IS COMPLETE, PLEASE BROWSE THE FILE
    _tksheet.py FOR A FULL LIST OF FUNCTIONS AND THEIR PARAMETERS

    """

    def begin_edit_cell(self, event):
        pass

    def window_resized(self, event):
        pass
        #print (event)

    def mouse_motion(self, event):
        region = self.sheet.identify_region(event)
        row = self.sheet.identify_row(event, allow_end=False)
        column = self.sheet.identify_column(event, allow_end=False)
        print(region, row, column)

    def deselect(self, event):
        print(event, self.sheet.get_selected_cells())

    def rc(self, event):
        print(event)

    def cell_select(self, response):
        #print (response)
        pass

    def shift_select_cells(self, response):
        print(response)

    def drag_select_cells(self, response):
        pass
        #print (response)

    def ctrl_a(self, response):
        print(response)

    def row_select(self, response):
        print(response)

    def shift_select_rows(self, response):
        print(response)

    def drag_select_rows(self, response):
        pass
        #print (response)

    def column_select(self, response):
        print(response)
        #for i in range(50):
        #    self.sheet.create_dropdown(i, response[1], values=[f"{i}" for i in range(200)], set_value="100",
        #                               destroy_on_select = False, destroy_on_leave = False, see = False)
        #print (self.sheet.get_cell_data(0, 0))
        #self.sheet.refresh()

    def shift_select_columns(self, response):
        print(response)

    def drag_select_columns(self, response):
        pass
Beispiel #3
0
class columnselection(tk.Frame):
    def __init__(self,parent,C):
        tk.Frame.__init__(self,parent)
        self.C = C
        self.parent_cols = []
        self.rowlen = 0
        self.grid_rowconfigure(0,weight=1)
        self.grid_rowconfigure(1,weight=1)
        self.grid_columnconfigure(1,weight=1)
        
        self.flattened_choices = flattened_base_ids_choices(self,command=self.flattened_mode_toggle)
        self.flattened_choices.grid(row=1,column=0,pady=(0,5),sticky="wnse")
        self.flattened_selector = flattened_column_selector(self)
        self.selector = id_and_parent_column_selector(self)
        self.selector.grid(row=1,column=0,sticky="wnse")
        self.sheetdisplay = Sheet(self,
                                  theme = self.C.theme,
                                  header_font = ("Calibri", 13, "normal"),
                                  outline_thickness=1)
        self.sheetdisplay.enable_bindings("enable_all")
        self.sheetdisplay.extra_bindings([("row_index_drag_drop", self.drag_row),
                                          ("column_header_drag_drop", self.drag_col),
                                          ("ctrl_x", self.reset_selectors),
                                          ("delete_key", self.reset_selectors),
                                          ("rc_delete_column", self.reset_selectors),
                                          ("rc_delete_row", self.reset_selectors),
                                          ("rc_insert_column", self.reset_selectors),
                                          ("rc_insert_row", self.reset_selectors),
                                          ("ctrl_v", self.reset_selectors),
                                          ("ctrl_z", self.reset_selectors),
                                          ("edit_cell", self.edit_cell_in_sheet)
                                          ])
        self.sheetdisplay.grid(row=0,column=1,rowspan=3,sticky="nswe")
        
        self.cont_ = button(self,
                            text="Build tree with selections     ",
                            style="TF.Std.TButton",command=self.try_to_build_tree)
        self.cont_.grid(row=2,column=0,sticky="wns",padx=10,pady=(10, 50))
        self.cont_.config(width=40)

        self.flattened_selector.grid(row=0,column=0,pady=(0,9),sticky="nswe")
        self.selector.grid_forget()
        self.selector.grid(row=0,column=0,sticky="nswe")
        self.flattened_selector.grid_forget()

    def flattened_mode_toggle(self):
        x = self.flattened_choices.get_choices()[0]
        if x:
            self.flattened_selector.grid(row=0,column=0,pady=(0,9),sticky="nswe")
            self.selector.grid_forget()
        else:
            self.selector.grid(row=0,column=0,sticky="nswe")
            self.flattened_selector.grid_forget()

    def drag_col(self, event):
        colsiter = sorted(event[1])
        c = event[3]
        stins = colsiter[0]
        endins = colsiter[-1] + 1
        self.selector.set_columns([h for h in self.sheetdisplay.get_sheet_data()[0]])
        self.flattened_selector.set_columns([h for h in self.sheetdisplay.get_sheet_data()[0]])
        self.selector.detect_id_col()
        self.selector.detect_par_cols()

    def drag_row(self, event):
        rowsiter = sorted(event[1])
        r = event[3]
        stins = rowsiter[0]
        endins = rowsiter[-1] + 1
        self.selector.set_columns([h for h in self.sheetdisplay.get_sheet_data()[0]])
        self.flattened_selector.set_columns([h for h in self.sheetdisplay.get_sheet_data()[0]])
        self.selector.detect_id_col()
        self.selector.detect_par_cols()

    def reset_selectors(self, event = None):
        idcol = self.selector.get_id_col()
        parcols = self.selector.get_par_cols()
        ancparcols = self.flattened_selector.get_par_cols()
        self.selector.set_columns([h for h in self.sheetdisplay.get_sheet_data()[0]] if self.sheetdisplay.get_sheet_data() else [])
        self.flattened_selector.set_columns([h for h in self.sheetdisplay.get_sheet_data()[0]] if self.sheetdisplay.get_sheet_data() else [])
        try:
            if idcol is not None and self.sheetdisplay.get_sheet_data():
                self.selector.set_id_col(idcol)
        except:
            pass
        try:
            if parcols and self.sheetdisplay.get_sheet_data():
                self.selector.set_par_cols(parcols)
        except:
            pass
        try:
            if ancparcols and self.sheetdisplay.get_sheet_data():
                self.flattened_selector.set_par_cols(ancparcols)
        except:
            pass

    def edit_cell_in_sheet(self, event = None):
        idcol = self.selector.get_id_col()
        parcols = self.selector.get_par_cols()
        ancparcols = self.flattened_selector.get_par_cols()
        if event[1] == idcol or event[1] in parcols or event[1] in ancparcols or event[0] == 0:
            self.reset_selectors()

    def enable_widgets(self):
        self.selector.enable_me()
        self.flattened_selector.enable_me()
        self.flattened_choices.enable_me()
        self.cont_.config(state="normal")
        self.sheetdisplay.basic_bindings(True)
        self.sheetdisplay.enable_bindings("enable_all")
        self.sheetdisplay.extra_bindings([("row_index_drag_drop", self.drag_row),
                                          ("column_header_drag_drop", self.drag_col),
                                          ("ctrl_x", self.ctrl_x_in_sheet),
                                          ("delete_key", self.del_in_sheet),
                                          ("rc_delete_column", self.del_in_sheet),
                                          ("rc_delete_row", self.del_in_sheet),
                                          ("rc_insert_column", self.reset_selectors),
                                          ("rc_insert_row", self.reset_selectors),
                                          ("ctrl_v", self.ctrl_v_in_sheet),
                                          ("ctrl_z", self.ctrl_z_in_sheet),
                                          ("edit_cell", self.edit_cell_in_sheet)
                                          ])

    def disable_widgets(self):
        self.selector.disable_me()
        self.flattened_selector.disable_me()
        self.flattened_choices.disable_me()
        self.cont_.config(state="disabled")
        self.sheetdisplay.basic_bindings(False)
        self.sheetdisplay.disable_bindings("disable_all")
        self.sheetdisplay.extra_bindings("unbind_all")
        self.sheetdisplay.unbind("<Delete>")
        
    def populate(self, columns, non_tsrgn_xl_file = False):
        self.sheetdisplay.deselect("all")
        self.non_tsrgn_xl_file = non_tsrgn_xl_file
        self.rowlen = len(columns)
        self.selector.set_columns([h for h in self.C.treeframe.sheet[0]])
        self.flattened_selector.set_columns([h for h in self.C.treeframe.sheet[0]])
        self.C.treeframe.sheet = self.sheetdisplay.set_sheet_data(data = self.C.treeframe.sheet,
                                                                  redraw=True)
        self.sheetdisplay.headers(newheaders=0)
        if len(self.C.treeframe.sheet)  < 3000:
            self.sheetdisplay.set_all_cell_sizes_to_text()
        self.selector.detect_id_col()
        self.selector.detect_par_cols()
        self.flattened_selector.detect_par_cols()
        self.C.show_frame("columnselection")
        
    def try_to_build_tree(self):
        baseids, order, delcols = self.flattened_choices.get_choices()
        if baseids:
            hiers = list(self.flattened_selector.get_par_cols())
            if len(hiers) < 2:
                return
        else:
            hiers = list(self.selector.get_par_cols())
            if not hiers:
                return
            idcol = self.selector.get_id_col()
            if idcol in hiers or idcol is None:
                return
        self.C.status_bar.change_text("Loading...   ")
        self.C.disable_at_start()
        self.C.treeframe.sheet = self.sheetdisplay.get_sheet_data()
        if baseids:
            if order == "Order: Base → Top":
                idcol = hiers.pop(0)
            elif order == "Order: Top → Base":
                idcol = hiers.pop(len(hiers) - 1)
            self.C.treeframe.sheet[:] = [row + list(repeat("",self.rowlen - len(row))) if len(row) < self.rowlen else row for row in self.C.treeframe.sheet]
            self.C.treeframe.sheet, self.rowlen, idcol, newpc = self.C.treeframe.treebuilder.convert_flattened_to_normal(data = self.C.treeframe.sheet,
                                                                                                                          idcol = idcol,
                                                                                                                          parcols = hiers,
                                                                                                                          rowlen = self.rowlen,
                                                                                                                          order = order,
                                                                                                                          delcols = delcols,
                                                                                                                         warnings = self.C.treeframe.warnings)
            hiers = [newpc]
        self.C.treeframe.headers = [Header(name) for name in self.C.treeframe.fix_heads(self.C.treeframe.sheet.pop(0),self.rowlen)]
        self.C.treeframe.ic = idcol
        self.C.treeframe.hiers = hiers
        self.C.treeframe.pc = hiers[0]
        self.C.treeframe.row_len = int(self.rowlen)
        self.C.treeframe.set_metadata(headers = True)
        self.C.treeframe.sheet, self.C.treeframe.nodes, self.C.treeframe.warnings = self.C.treeframe.treebuilder.build(self.C.treeframe.sheet,
                                                                                                                            self.C.treeframe.new_sheet,
                                                                                                                            self.C.treeframe.row_len,
                                                                                                                            self.C.treeframe.ic,
                                                                                                                            self.C.treeframe.hiers,
                                                                                                                            self.C.treeframe.nodes,
                                                                                                                            self.C.treeframe.warnings)
        self.C.treeframe.populate(non_tsrgn_xl_file = self.non_tsrgn_xl_file)
        self.C.treeframe.show_warnings(str(self.C.open_dict['filepath']),str(self.C.open_dict['sheet']))