def __init__(self, records, headers, title, rows=None):
     Tk.__init__(self)
     self.title(title)
     self.state("zoomed")
     self.grid_columnconfigure(0, weight=1)
     self.grid_rowconfigure(0, weight=1)
     self.data = [["Row {r} Column {c}" for c in range(100)]
                  for r in range(5000)]
     self.sdem = Sheet(self,
                       width=1000,
                       height=700,
                       align="w",
                       header_align="center",
                       row_index_align="center",
                       show=True,
                       column_width=230,
                       row_index_width=50,
                       data_reference=records,
                       headers=headers)
     self.sdem.enable_bindings(
         ("single", "drag_select", "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"))
     self.sdem.edit_bindings(True)
     self.sdem.grid(row=0, column=0, sticky="nswe")
     if rows is not None:
         for row_no in rows:
             for col in range(0, len(headers)):
                 self.sdem.highlight_cells(row=row_no,
                                           column=col,
                                           bg="#EC7063",
                                           fg="black")
Ejemplo n.º 2
0
    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.fill_data_from_db()
        self.frame.grid_columnconfigure(0, weight=1)
        self.frame.grid_rowconfigure(0, weight=1)
        self.sheet = Sheet(
            self.frame,
            page_up_down_select_row=True,
            # empty_vertical = 0,
            headers=headers,
            column_width=120,
            startup_select=(0, 1, "rows"),
            data=data,
            height=500,  # height and width arguments are optional
            width=500  # For full startup arguments see DOCUMENTATION.md
        )

        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",
            # "hide_columns",
            "copy",
            # "cut",
            # "paste",
            # "delete",
            "undo",
            "edit_cell"))

        self.frame.grid(row=0, column=0, sticky="nswe")
        self.sheet.grid(row=0, column=0, sticky="nswe")

        # __________ DISPLAY SUBSET OF COLUMNS __________

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

        # __________ BINDING A FUNCTIONS TO USER ACTIONS __________

        self.sheet.extra_bindings([("end_edit_cell", self.end_edit_cell),
                                   ("begin_rc_delete_row", self.row_delete)])
Ejemplo n.º 3
0
    def create_widgets(self):
        # Khởi tạo tab phân tích chứng khoán

        ## Phần nhập ngày bắt đầu
        self.start_date_frame = Frame(self)
        self.start_date_frame.pack(fill=X)
        self.start_date_label = Label(self.start_date_frame,
                                      text="Start date",
                                      width=10)
        self.start_date_label.pack(side=LEFT, padx=5, pady=5)
        self.start_date_input = Entry(self.start_date_frame)
        self.start_date_input.pack(fill=X, padx=5, expand=True)

        ## Phần nhập ngày kết thúc
        self.end_date_frame = Frame(self)
        self.end_date_frame.pack(fill=X)
        self.end_date_label = Label(self.end_date_frame,
                                    text="End date",
                                    width=10)
        self.end_date_label.pack(side=LEFT, padx=5, pady=5)
        self.end_date_input = Entry(self.end_date_frame)
        self.end_date_input.pack(fill=X, padx=5, expand=True)

        ## Phần nút bấm
        self.stock_submit_frame = Frame(self)
        self.stock_submit_frame.pack(fill=X, padx=10)

        ## Phần button phân tích
        self.stock_submit = Button(self.stock_submit_frame)
        self.stock_submit["text"] = "Tính"
        self.stock_submit["command"] = lambda: self.start_calc()
        self.stock_submit.pack(side=RIGHT)

        # Phầns button export excel
        self.export_excel_button = Button(self.stock_submit_frame,
                                          state=DISABLED)
        self.export_excel_button["text"] = "Export file"
        self.export_excel_button["command"] = lambda: self.export_file_excel()
        self.export_excel_button.pack(side=RIGHT, padx=20)

        ## Phần bản tính
        self.tabel_frame = Frame(self)
        self.tabel_frame.pack(fill=X, pady=10)
        self.sheet = Sheet(self.tabel_frame)
        self.sheet.pack(fill=X)

        self.header = ("Mã", "Giá đóng nhỏ nhất", "Giá đóng lớn nhất")
        self.sheet.headers(self.header)

        ### Cấu hình cho tkinter sheet
        self.sheet.enable_bindings(
            ("single_select", "row_select", "column_width_resize", "arrowkeys",
             "right_click_popup_menu", "rc_select", "rc_insert_row",
             "rc_delete_row", "copy", "cut", "paste", "delete", "undo",
             "edit_cell"))
Ejemplo n.º 4
0
 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,
                        data = [[f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(50)] for r in range(500)])
     self.sheet.enable_bindings()
     self.frame.grid(row = 0, column = 0, sticky = "nswe")
     self.sheet.grid(row = 0, column = 0, sticky = "nswe")
Ejemplo n.º 5
0
    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()
Ejemplo n.º 6
0
 def __init__(self,
              parent,
              values = []):
     Sheet.__init__(self,
                    parent = parent,
                    show_horizontal_grid = False,
                    show_vertical_grid = False,
                    show_header = False,
                    show_row_index = False,
                    show_top_left = False,
                    empty_horizontal = 0,
                    empty_vertical = 0)
     if values:
         self.values(values)
Ejemplo n.º 7
0
    def __init__(self, master):
        self.emailHandler = EmailSheetHandler(FILENAME)
        tk.Frame.__init__(self, master)
        self.grid_columnconfigure(0, weight = 1)
        self.grid_rowconfigure(0, weight = 1)
        self.frame = ttk.Frame(self, height=450, width=400)
        self.frame.grid_columnconfigure(0, weight = 1)
        self.frame.grid_rowconfigure(0, weight = 1)
        self.sheet = Sheet(self.frame,
                           page_up_down_select_row = True,
                           #empty_vertical = 0,
                           column_width = 300,
                           startup_select = (0,1,"rows"),
                           data=self.populate_sheet(),
                            total_columns = 3, #if you want to set empty sheet dimensions at startup
                            height = 450, #height and width arguments are optional
                            width = 600 #For full startup arguments see DOCUMENTATION.md
                            )
        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",
                                         "arrowkeys",
                                         "row_height_resize",
                                         "double_click_row_resize",
                                         "right_click_popup_menu",
                                         "rc_select",
                                         "edit_cell"))

        self.sheet.extra_bindings("end_edit_cell", self.end_edit_cell)

        self.frame.grid(row = 0, column = 0, sticky = "nsw")
        self.sheet.grid(row = 0, column = 0, sticky = "nw")

        self.email_button_frame = ttk.Frame(self.frame, padding=(3,3,12,12), borderwidth=5, width=100, heigh=200)
        self.email_add_button = tk.Button(self.email_button_frame, text="Add email", command=self.add_email)
        self.email_merge_button = tk.Button(self.email_button_frame, text="Merge email (with file)", command=self.merge_mails)
        self.email_update_button = tk.Button(self.email_button_frame, text="Update file with table", command=self.email_file_update )
        self.email_button_frame.grid(row=0, column=2, sticky="nswe")
        self.email_add_button.grid(row=1, column=1)
        self.email_merge_button.grid(row=2, column=1)
        self.email_update_button.grid(row=3, column=1)
Ejemplo n.º 8
0
    def TableMultiPlayer(subRoot):
        data = RezultatiFetch.listaRezultataMP()
        table = Sheet(subRoot,
                      height=600,
                      width=600,
                      data=data,
                      headers=headers,
                      show_x_scrollbar=False)

        return table
Ejemplo n.º 9
0
    def _init_content(self):
        if self.frame_content:
            self.frame_content.destroy()
        self.frame_content = self.add_content_frame(self.app)

        self.sheet = Sheet(
            self.frame_content,
            header_font=(self.header_font, self.header_font_size, "bold"),
            font=(self.content_font, self.content_font_size, "normal"),
            align='w',
            row_height="1",  # str value for row height in number of lines.
            row_index_align="w",
            auto_resize_default_row_index=False,
            row_index_width=40,
            header_align='center',
            empty_horizontal=0,
            empty_vertical=0,
        )

        self.sheet.enable_bindings((
            "single_select",
            "column_select",
            "column_width_resize",
            "double_click_column_resize",
            "edit_cell",
            "copy",
        ))

        self.sheet.grid(row=0, column=0, sticky='nsew')
        self.set_headers()

        self.set_display_columns()
        self.frame_content.columnconfigure(0, weight=1)
        self.frame_content.rowconfigure(0, weight=1)
        self.sheet.extra_bindings('column_select', self.sort_table)
        self.sheet.extra_bindings('cell_select', self.on_click_button_handler)

        # sort options
        self.sort_by = None
        self.sort_order = None

        # threads for downloading videos / slides.
        self.threads = dict()
Ejemplo n.º 10
0
    def TableVsCom(subRoot):
        data = RezultatiFetch.listaRezultataVSCOM()
        table = Sheet(subRoot,
                      height=600,
                      width=600,
                      data=data,
                      headers=headers,
                      show_x_scrollbar=False)

        return table
 def __init__(self, records, headers, window):
     self.records = records
     self.sdem = Sheet(window,
                       width=1000,
                       height=500,
                       align="w",
                       header_align="center",
                       row_index_align="center",
                       show=True,
                       column_width=180,
                       row_index_width=50,
                       data_reference=records,
                       headers=headers)
     self.sdem.enable_bindings(
         ("single", "drag_select", "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"))
     self.sdem.edit_bindings(True)
     self.sdem.pack()
Ejemplo n.º 12
0
    def auto_organize_dialog(self, moved_files):  # noqa
        dialog = Dialogs.create_dialog(
            on_close_callback=self.on_auto_organize_dialog_close,
            title='Auto Organize')
        label = tk.Label(
            dialog,
            text='Following files were moved / renamed -',
        )
        label.grid(row=0, column=0, sticky='w', ipadx=10, ipady=10)
        dialog.columnconfigure(0, weight=1)

        # show a dialog with the output.
        sheet = Sheet(
            Dialogs.dialog,
            header_font=(self.header_font, self.header_font_size, "bold"),
            font=(self.content_font, self.content_font_size, "normal"),
            align='w',
            row_height="1",  # str value for row height in number of lines.
            row_index_align="w",
            auto_resize_default_row_index=False,
            row_index_width=40,
            header_align='center',
            empty_horizontal=0,
            empty_vertical=0,
        )

        sheet.headers(['Source', '', 'Destination'])
        target_parent = os.path.dirname(self.impartus.download_dir)
        for row, (source, destination) in enumerate(moved_files.items()):
            source = source[len(target_parent) + 1:]
            destination = destination[len(target_parent) + 1:]
            sheet.insert_row([source, Icons.MOVED_TO, destination])

        sheet.set_all_column_widths()
        sheet.grid(row=1, column=0, sticky='nsew')

        ok_button = tk.Button(dialog,
                              text='OK',
                              command=self.on_auto_organize_dialog_close)
        ok_button.grid(row=2, column=0, padx=10, pady=10)
Ejemplo n.º 13
0
    def create_widgets(self):
        self.get_saved_keywords()

        #--------CREATE MENU BAR----------
        self.create_menu_bar()

        #--------CREATE NAVIGATION FRAME----------
        self.main_frame = Frame(self.master)
        self.main_frame.grid(row=0, column=0, sticky="nsew", padx=1, pady=1)

        #--------CREATE SEARCH BAR AND SEARCH BUTTON WIDGET----------
        self.search_bar = self.AutocompleteEntry(self.current_words,
                                                 "Nhập từ khóa cần tìm",
                                                 self.main_frame)
        self.search_bar.grid(row=0,
                             column=0,
                             ipady=5,
                             sticky="we",
                             padx=5,
                             pady=5)
        self.search_bar.bind("<Return>", self.search_keyword)

        #--------CREATE CELL DETAIL VALUE LABEL----------
        self.cell_value_label = Label(self.main_frame, text="---", anchor="w")
        self.cell_value_label.grid(row=1, column=0, padx=5, sticky="nw")

        self.main_frame.grid_columnconfigure(0, weight=1)
        self.main_frame.grid_rowconfigure(2, weight=1)

        #--------CREATE SHEET WIDGET----------
        self.sheet = Sheet(self.main_frame, align="w")
        self.sheet.enable_bindings(
            ("single_select", "drag_select", "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", "rc_select",
             "copy", "paste", "undo"))
        self.sheet.extra_bindings([("cell_select", self.cell_select)])
        self.sheet.grid(row=2, column=0, sticky="nswe", padx=5, pady=5)
        self.load_data_in_thread()
Ejemplo n.º 14
0
class SheetTable(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.state("zoomed")
        self.grid_columnconfigure(0, weight=1)
        self.grid_rowconfigure(0, weight=1)

        self.sheet_demo = Sheet(self,
                                width=1000,
                                height=700,
                                align="w",
                                header_align="center",
                                row_index_align="center",
                                column_width=180,
                                row_index_width=50,
                                total_rows=5000,
                                total_columns=100,
                                headers=[f"Header {c}" for c in range(100)])
        self.sheet_demo.enable_bindings(
            ("single", "drag_select", "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", "edit_bindings"))
        self.sheet_demo.grid(row=0, column=0, sticky="nswe")
        self.sheet_demo.highlight_cells(row=0,
                                        column=0,
                                        bg="orange",
                                        fg="blue")
        self.sheet_demo.highlight_cells(row=0,
                                        bg="orange",
                                        fg="blue",
                                        canvas="row_index")
        self.sheet_demo.highlight_cells(column=0,
                                        bg="orange",
                                        fg="blue",
                                        canvas="header")
        """_________________________ EXAMPLES _________________________ """
        """_____________________________________________________________"""
Ejemplo n.º 15
0
    def __init__(self):
        #*************************************************************************
        #Crea un objeto TK
        #*************************************************************************
        self.raiz = Tk()
        self.raiz.title ("Mantenimiento de Personas")
        self.raiz.geometry('900x600') 

        #*************************************************************************
        #crea el menu de la pantalla
        #*************************************************************************
        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)

        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Acerca de..")
        filemenu.add_separator()
        filemenu.add_command(label="Salir", command=self.raiz.quit)

        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Personas")
        mantmenu.add_command(label="Teléfonos")
        mantmenu.add_command(label="Direcciones")

        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)

        #*************************************************************************
        #crea un objeto tipo fuenta
        #*************************************************************************
        self.fuente = font.Font(weight="bold")

        #*************************************************************************
        #se crean atributos de la clase
        #*************************************************************************
        self.t_gustos = Gustos.Gustos() #se crea el objeto de dominio para guardar la información
        self.insertando = True
        
        #*************************************************************************
        #se crean los campos de la pantalla
        #*************************************************************************

        #Se coloca un label del titulo
        self.lb_tituloPantalla = Label(self.raiz, text = "MANTENIMIENTO DE GUSTOS", font = self.fuente)
        self.lb_tituloPantalla.place(x = 320, y = 20) #colocar por medio de espacion en pixeles de la parte superior de la pantalla considerando un eje x y un eje y
        
        #coloca en el formulario el campo y el label de idNombre Gustos
        self.lb_cedula = Label(self.raiz, text = "id Nombre Gustos:")
        self.lb_cedula.place(x = 240, y = 60)
        self.txt_cedula = Entry(self.raiz, textvariable=self.t_gustos.idNombreGustos, justify="right")
        self.txt_cedula.place(x = 370, y = 60)

        #coloca en el formulario el campo y el label de descripcion gustos
        self.lb_nombre = Label(self.raiz, text = "Descripcion de los Gustos:")
        self.lb_nombre.place(x = 240, y = 90)
        self.txt_nombre = Entry(self.raiz, textvariable=self.t_gustos.descripcionGustos, justify="right", width=30)
        self.txt_nombre.place(x = 370, y = 90)

        #coloca en el formulario el campo y el label de idUsuario _TGustos
        self.lb_apellido1 = Label(self.raiz, text = "id Usuario_TGustos:")
        self.lb_apellido1.place(x = 240, y = 120)
        self.txt_apellido1 = Entry(self.raiz, textvariable=self.t_gustos.idUsuario_TGustos, justify="right", width=30)
        self.txt_apellido1.place(x = 370, y = 120)


        #coloca en el formulario el campo y el label de nombre gustos
        self.lb_apellido2 = Label(self.raiz, text = "Nombre gustos:")
        self.lb_apellido2.place(x = 240, y = 150)
        self.txt_apellido2 = Entry(self.raiz, textvariable=self.t_gustos.nombreGustos, justify="right", width=30)
        self.txt_apellido2.place(x = 370, y = 150)

        #coloca los botones enviar y borrar
        self.bt_borrar = Button(self.raiz, text="Limpiar", width=15, command = self.limpiarInformacion)
        self.bt_borrar.place(x = 370, y = 330)

        self.bt_enviar = Button(self.raiz, text="Enviar", width=15, command = self.enviarInformacion)
        self.bt_enviar.place(x = 510, y = 330)

        #Se coloca un label del informacion
        self.lb_tituloPantalla = Label(self.raiz, text = "INFORMACIÓN INCLUIDA", font = self.fuente)
        self.lb_tituloPantalla.place(x = 350, y = 360) #colocar por medio de espacion en pixeles de la parte superior de la pantalla considerando un eje x y un eje y

        #*************************************************************************
        #tabla con informacion
        #*************************************************************************
        
        self.sheet = Sheet(self.raiz,
                           page_up_down_select_row = True,
                           #empty_vertical = 0,
                           column_width = 120,
                           startup_select = (0,1,"rows"),
                           #row_height = "4",
                           #default_row_index = "numbers",
                           #default_header = "both",
                           #empty_horizontal = 0,
                           #show_vertical_grid = False,
                           #show_horizontal_grid = False,
                           #auto_resize_default_row_index = False,
                           #header_height = "3",
                           #row_index_width = 100,
                           #align = "center",
                           #header_align = "w",
                            #row_index_align = "w",
                            #data = [[f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(50)] for r in range(1000)], #to set sheet data at startup
                            headers = ['idNombreGustos', 'nombreGstos', 'DescripcionGustos','idUsuario','nombreGustos'],
                            #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 = "light green",
                            #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 = 195, #height and width arguments are optional
                            width = 720 #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"
                                        
                                         "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"))
        #self.sheet.disable_bindings() #uses the same strings
        #self.sheet.enable_bindings()

        self.sheet.place(x = 20, y = 390)
        
        #coloca los botones cargar y eliminar
        self.bt_cargar = Button(self.raiz, text="Cargar", width=15, command = self.cargarInformacion)
        self.bt_cargar.place(x = 750, y = 385)

        self.bt_eliminar = Button(self.raiz, text="Eliminar", width=15, command = self.eliminarInformacion)
        self.bt_eliminar.place(x = 750, y = 425)
        
        self.cargarTodaInformacion()


        #*************************************************************************
        #se inicial el main loop de la pantalla
        #*************************************************************************
        self.raiz.mainloop()
Ejemplo n.º 16
0
class Aplicacion:
    

    def __init__(self):
        #*************************************************************************
        #Crea un objeto TK
        #*************************************************************************
        self.raiz = Tk()
        self.raiz.title ("Mantenimiento de Personas")
        self.raiz.geometry('900x600') 

        #*************************************************************************
        #crea el menu de la pantalla
        #*************************************************************************
        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)

        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Acerca de..")
        filemenu.add_separator()
        filemenu.add_command(label="Salir", command=self.raiz.quit)

        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Personas")
        mantmenu.add_command(label="Teléfonos")
        mantmenu.add_command(label="Direcciones")

        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)

        #*************************************************************************
        #crea un objeto tipo fuenta
        #*************************************************************************
        self.fuente = font.Font(weight="bold")

        #*************************************************************************
        #se crean atributos de la clase
        #*************************************************************************
        self.t_gustos = Gustos.Gustos() #se crea el objeto de dominio para guardar la información
        self.insertando = True
        
        #*************************************************************************
        #se crean los campos de la pantalla
        #*************************************************************************

        #Se coloca un label del titulo
        self.lb_tituloPantalla = Label(self.raiz, text = "MANTENIMIENTO DE GUSTOS", font = self.fuente)
        self.lb_tituloPantalla.place(x = 320, y = 20) #colocar por medio de espacion en pixeles de la parte superior de la pantalla considerando un eje x y un eje y
        
        #coloca en el formulario el campo y el label de idNombre Gustos
        self.lb_cedula = Label(self.raiz, text = "id Nombre Gustos:")
        self.lb_cedula.place(x = 240, y = 60)
        self.txt_cedula = Entry(self.raiz, textvariable=self.t_gustos.idNombreGustos, justify="right")
        self.txt_cedula.place(x = 370, y = 60)

        #coloca en el formulario el campo y el label de descripcion gustos
        self.lb_nombre = Label(self.raiz, text = "Descripcion de los Gustos:")
        self.lb_nombre.place(x = 240, y = 90)
        self.txt_nombre = Entry(self.raiz, textvariable=self.t_gustos.descripcionGustos, justify="right", width=30)
        self.txt_nombre.place(x = 370, y = 90)

        #coloca en el formulario el campo y el label de idUsuario _TGustos
        self.lb_apellido1 = Label(self.raiz, text = "id Usuario_TGustos:")
        self.lb_apellido1.place(x = 240, y = 120)
        self.txt_apellido1 = Entry(self.raiz, textvariable=self.t_gustos.idUsuario_TGustos, justify="right", width=30)
        self.txt_apellido1.place(x = 370, y = 120)


        #coloca en el formulario el campo y el label de nombre gustos
        self.lb_apellido2 = Label(self.raiz, text = "Nombre gustos:")
        self.lb_apellido2.place(x = 240, y = 150)
        self.txt_apellido2 = Entry(self.raiz, textvariable=self.t_gustos.nombreGustos, justify="right", width=30)
        self.txt_apellido2.place(x = 370, y = 150)

        #coloca los botones enviar y borrar
        self.bt_borrar = Button(self.raiz, text="Limpiar", width=15, command = self.limpiarInformacion)
        self.bt_borrar.place(x = 370, y = 330)

        self.bt_enviar = Button(self.raiz, text="Enviar", width=15, command = self.enviarInformacion)
        self.bt_enviar.place(x = 510, y = 330)

        #Se coloca un label del informacion
        self.lb_tituloPantalla = Label(self.raiz, text = "INFORMACIÓN INCLUIDA", font = self.fuente)
        self.lb_tituloPantalla.place(x = 350, y = 360) #colocar por medio de espacion en pixeles de la parte superior de la pantalla considerando un eje x y un eje y

        #*************************************************************************
        #tabla con informacion
        #*************************************************************************
        
        self.sheet = Sheet(self.raiz,
                           page_up_down_select_row = True,
                           #empty_vertical = 0,
                           column_width = 120,
                           startup_select = (0,1,"rows"),
                           #row_height = "4",
                           #default_row_index = "numbers",
                           #default_header = "both",
                           #empty_horizontal = 0,
                           #show_vertical_grid = False,
                           #show_horizontal_grid = False,
                           #auto_resize_default_row_index = False,
                           #header_height = "3",
                           #row_index_width = 100,
                           #align = "center",
                           #header_align = "w",
                            #row_index_align = "w",
                            #data = [[f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(50)] for r in range(1000)], #to set sheet data at startup
                            headers = ['idNombreGustos', 'nombreGstos', 'DescripcionGustos','idUsuario','nombreGustos'],
                            #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 = "light green",
                            #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 = 195, #height and width arguments are optional
                            width = 720 #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"
                                        
                                         "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"))
        #self.sheet.disable_bindings() #uses the same strings
        #self.sheet.enable_bindings()

        self.sheet.place(x = 20, y = 390)
        
        #coloca los botones cargar y eliminar
        self.bt_cargar = Button(self.raiz, text="Cargar", width=15, command = self.cargarInformacion)
        self.bt_cargar.place(x = 750, y = 385)

        self.bt_eliminar = Button(self.raiz, text="Eliminar", width=15, command = self.eliminarInformacion)
        self.bt_eliminar.place(x = 750, y = 425)
        
        self.cargarTodaInformacion()


        #*************************************************************************
        #se inicial el main loop de la pantalla
        #*************************************************************************
        self.raiz.mainloop()


    #*************************************************************************
    #Metodo para consultar la información de la base de datos para 
    #cargarla en la tabla
    #*************************************************************************
    def cargarTodaInformacion(self):
        try:
            self.gustosBo = GustosBO.GustosBO() #se crea un objeto de logica de negocio
            resultado = self.gustosBo.consultar()

            self.sheet.set_sheet_data(resultado)
        except Exception as e: 
            msg.showerror("Error",  str(e)) #si se genera algun tipo de error muestra un mensache con dicho error

    #*************************************************************************
    #Metodo para cargar informacion
    #*************************************************************************
    def cargarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            idNombreGustos = (self.sheet.get_cell_data(datoSeleccionado[0],0))
            self.t_gustos.idNombreGustos.set(idNombreGustos)
            self.gustosBo = GustosBO.GustosBO() #se crea un objeto de logica de negocio
            self.gustosBo.consultarGustos(self.t_gustos) #se envia a consultar
            self.insertando = False
            msg.showinfo("Acción: Consultar el gusto", "La información del gusto ha sido consultada correctamente") # Se muestra el mensaje de que todo esta correcto
            
        except Exception as e: 
            msg.showerror("Error",  str(e)) #si se genera algun tipo de error muestra un mensache con dicho error

    #*************************************************************************
    #Metodo para cargar eliminar la informacion
    #*************************************************************************
    def eliminarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            idNombreGustos = (self.sheet.get_cell_data(datoSeleccionado[0],0))
            gusto = (self.sheet.get_cell_data(datoSeleccionado[0],1))

            resultado = msg.askquestion("Eliminar",  "¿Desear eliminar a "+gusto+" de la base de datos?")
            if resultado == "yes":
                self.t_gustos.idNombreGustos.set(idNombreGustos)
                self.gustosBo = GustosBO.GustosBO()  #se crea un objeto de logica de negocio
                self.gustosBo.eliminar(self.t_gustos) #se envia a consultar
                self.cargarTodaInformacion()
                self.t_gustos.limpiar()
        except Exception as e: 
            msg.showerror("Error",  str(e)) #si se genera algun tipo de error muestra un mensache con dicho error


    #*************************************************************************
    #Metodo para enviar la información a la base de datos
    #*************************************************************************
    def enviarInformacion(self):
        try:
            self.gustosBo = GustosBO.GustosBO() #se crea un objeto de logica de negocio
            if(self.insertando == True):
                self.gustosBo.guardar(self.t_gustos)
            else:
                self.gustosBo.modificar(self.t_gustos)
            
            self.cargarTodaInformacion()
            self.t_gustos.limpiar() #se limpia el formulario

            if(self.insertando == True):
                msg.showinfo("Acción: Agregar el gusto", "La información de los gustos ha sido incluida correctamente") # Se muestra el mensaje de que todo esta correcto
            else:
                msg.showinfo("Acción: Agregar modificar", "La información de los gustos ha sido modificada correctamente") # Se muestra el mensaje de que todo esta correcto
        except Exception as e: 
            msg.showerror("Error",  str(e)) #si se genera algun tipo de error muestra un mensache con dicho error

    #*************************************************************************
    #Metodo para limpiar el formulario
    #*************************************************************************
    def limpiarInformacion(self):
        self.t_gustos.limpiar() #llama al metodo de la clase gustos para limpiar los atritudos de la clase
        self.insertando = True
        msg.showinfo("Acción del sistema", "La información del formulario ha sido eliminada correctamente") # muestra un mensaje indicando que se limpio el formulario


    #*************************************************************************
    #Metodo para mostrar un contro tipo datepicker
    #*************************************************************************
    def mostrarDatePicker(self):
        self.top = Toplevel(self.raiz)
        self.cal = Calendar(self.top, font="Arial 14", selectmode='day', locale='en_US',
                   cursor="hand", year=2019, month=6, day=16)
        self.cal.pack(fill="both", expand=True)
        ttk.Button(self.top, text="Seleccionar").pack()
Ejemplo n.º 17
0
    def set_display_widgets(self, subjects, root_url, anchor):
        """
        Create the table/sheet.
        Fill in the data for table content, Set the buttons and their states.
        """
        cs = self.colorscheme

        sheet = Sheet(
            anchor,
            frame_bg=cs['table']['bg'],
            table_bg=cs['table']['bg'],
            table_fg=cs['table']['fg'],
            table_grid_fg=cs['table']['grid'],
            top_left_bg=cs['header']['bg'],
            top_left_fg=cs['header']['bg'],
            header_bg=cs['header']['bg'],
            header_fg=cs['header']['fg'],
            header_font=(self.conf.get("content_font"), 12, "bold"),
            font=(self.conf.get('content_font'), 14, "normal"),
            align='center',
            header_grid_fg=cs['table']['grid'],
            index_grid_fg=cs['table']['grid'],
            header_align='center',
            empty_horizontal=0,
            empty_vertical=0,
            header_border_fg=cs['table']['grid'],
            index_border_fg=cs['table']['grid'],
        )
        self.sheet = sheet

        sheet.enable_bindings(
            ("single_select", "column_select", "column_width_resize",
             "row_height_resize", "rc_select"))

        self.set_headers()

        indexes = [x for x, v in self.columns.items() if v['show']]
        sheet.display_columns(indexes=indexes, enable=True)
        anchor.columnconfigure(0, weight=1)
        anchor.rowconfigure(0, weight=1)

        row = 0
        for subject in subjects:
            videos = self.impartus.get_videos(root_url, subject)
            slides = self.impartus.get_slides(root_url, subject)
            video_slide_mapping = self.impartus.map_slides_to_videos(
                videos, slides)

            videos = {x['ttid']: x for x in videos}

            for ttid, video_metadata in videos.items():
                video_metadata = Utils.add_fields(video_metadata,
                                                  video_slide_mapping)
                video_metadata = Utils.sanitize(video_metadata)

                video_path = self.impartus.get_mkv_path(video_metadata)
                slides_path = self.impartus.get_slides_path(video_metadata)

                video_exists = os.path.exists(video_path)
                slides_exist = video_slide_mapping.get(ttid)
                slides_exist_on_disk, slides_path = self.impartus.slides_exist_on_disk(
                    slides_path)

                metadata = {
                    'video_metadata': video_metadata,
                    'video_path': video_path,
                    'video_exists': video_exists,
                    'slides_exist': slides_exist,
                    'slides_exist_on_disk': slides_exist_on_disk,
                    'slides_url': video_slide_mapping.get(ttid),
                    'slides_path': slides_path,
                }
                row_items = list()
                button_states = list()
                for col, item in self.columns.items():
                    text = ''
                    if item['type'] == 'auto':
                        text = row
                    if item['type'] == 'data':
                        text = video_metadata[item['mapping']]
                        # title case
                        text = text.strip().title() if item.get(
                            'title_case') else text

                        # truncate long fields
                        if item['truncate'] and len(text) > self.conf.get(
                                'max_content_chars'):
                            text = '{}..'.format(
                                text[0:self.conf.get('max_content_chars')])
                    elif item['type'] == 'progressbar':
                        value = 100 if video_exists else 0
                        text = self.progress_bar_text(value)
                    elif item['type'] == 'button':
                        button_states.append(
                            self.get_button_state(self.names[col],
                                                  video_exists, slides_exist,
                                                  slides_exist_on_disk))
                        text = item.get('text')
                    elif item['type'] == 'state':
                        text = button_states.pop(0)
                    elif item['type'] == 'metadata':
                        text = metadata

                    row_items.append(text)
                sheet.insert_row(values=row_items, idx='end')
                row += 1

        self.reset_column_sizes()
        self.decorate()

        sheet.extra_bindings('column_select', self.sort_table)
        sheet.extra_bindings('cell_select', self.on_click_button_handler)

        # update button status
        self.set_button_status()

        sheet.grid(row=0, column=0, sticky='nsew')
    def __init__(self, customer_id):
        self.customer_id = customer_id
        '''
            DATA
        '''
        akun = DataAkun()
        self.akun = akun.getAccountsByCustomerId(customer_id)
        """
            Window Configuration
        """
        self.aroot = Tk()
        self.window_height = 700  #Window Height
        self.window_width = 1100  #Window Width
        self.screen_width = self.aroot.winfo_screenwidth()  #Screen Width
        self.screen_height = self.aroot.winfo_screenheight()  #Screen Height
        self.x_cordinate = int((self.screen_width / 2) -
                               (self.window_width / 2))
        self.y_cordinate = int((self.screen_height / 2) -
                               (self.window_height / 2))
        self.aroot.geometry("{}x{}+{}+{}".format(
            self.window_width, self.window_height, self.x_cordinate,
            5))  #Implement and Center Window based on Device Screen
        self.aroot.config(bg='#00bd56')  #Window Background
        self.aroot.overrideredirect(True)  #Remove Window Status Bar
        self.aroot.resizable(False, False)  #Disable Resizing Window
        """
            Image Declaration
        """
        imgTambah = PhotoImage(file='tampilan/images/tambah-btn.png')
        imgHapus = PhotoImage(file='tampilan/images/hapus-btn.png')
        imgExit = PhotoImage(file='tampilan/images/exit-btn.png')
        #Dashboard Icon Navbar
        dashimage = Image.open('tampilan/images/dashboard.png')
        dashImage = dashimage.resize((38, 38), Image.ANTIALIAS)
        dashboardIMG = ImageTk.PhotoImage(dashImage)
        #Account Icon Navbar
        checkImg = Image.open('tampilan/images/checkingicon.png')
        chImage = checkImg.resize((35, 35), Image.ANTIALIAS)
        accountImage = ImageTk.PhotoImage(chImage)
        #Transaction Icon Navbar
        saveImg = Image.open('tampilan/images/transfer.png')
        sImage = saveImg.resize((30, 30), Image.ANTIALIAS)
        transImage = ImageTk.PhotoImage(sImage)
        #Logout Icon Navbar
        logoutImg = Image.open('tampilan/images/logout.png')
        logImage = logoutImg.resize((30, 30), Image.ANTIALIAS)
        logoutImage = ImageTk.PhotoImage(logImage)
        #Dashboard Info Background Icon Navbar
        cusInfoImg = Image.open('tampilan/images/info-bg.png')
        cInfoImg = cusInfoImg.resize((180, 180), Image.ANTIALIAS)
        cIImg = ImageTk.PhotoImage(cInfoImg)
        #Account Info
        siIMG = Image.open('tampilan/images/savingicon.png')
        ssImg = siIMG.resize((80, 80), Image.ANTIALIAS)
        savIMG = ImageTk.PhotoImage(ssImg)
        #Balance Info
        chIMG = Image.open('tampilan/images/checkingicon.png')
        chsImg = chIMG.resize((80, 80), Image.ANTIALIAS)
        cheIMG = ImageTk.PhotoImage(chsImg)

        ##############################################################################
        ############                    SIDEBAR CONTENT                     ##########
        ##############################################################################

        navbarLabel = Label(self.aroot,
                            bg='#e5e5e5',
                            width=30,
                            height=self.window_height)
        navbarLabel.place(x=0, y=0)

        #Dashboard Icon Navbar
        dashboardNavIcon = Label(self.aroot,
                                 image=dashboardIMG,
                                 bg='#e5e5e5',
                                 cursor='hand2')
        dashboardNavIcon.place(x=15, y=25)
        dashboardNavIcon.bind("<Button>", self.bindingToDashboard)
        #Dashboard Label Navbar
        dashboardNavLabel = Label(self.aroot,
                                  text="DASHBOARD",
                                  font=('Segoe UI', 16, BOLD),
                                  bg='#e5e5e5',
                                  fg='#23374d',
                                  cursor='hand2')
        dashboardNavLabel.place(x=55, y=25)
        dashboardNavLabel.bind("<Button>", self.bindingToDashboard)

        #Account Icon Navbar
        accNavIcon = Label(self.aroot,
                           image=accountImage,
                           bg='#e5e5e5',
                           cursor='hand2')
        accNavIcon.place(x=15, y=80)
        accNavIcon.bind("<Button>", self.bindingToAccount)
        #Account Label Navbar
        accNavLabel = Label(self.aroot,
                            text="ACCOUNT",
                            font=('Segoe UI', 16, BOLD),
                            bg='#e5e5e5',
                            fg='#23374d',
                            cursor='hand2')
        accNavLabel.place(x=55, y=80)
        accNavLabel.bind("<Button>", self.bindingToAccount)

        #Transaction Icon Navbar
        transNavIcon = Label(self.aroot,
                             image=transImage,
                             bg='#e5e5e5',
                             cursor='hand2')
        transNavIcon.place(x=15, y=140)
        transNavIcon.bind("<Button>", self.bindingToTranscation)
        #Transaction Label Navbar
        transNavLabel = Label(self.aroot,
                              text="TRANSACTION",
                              font=('Segoe UI', 16, BOLD),
                              bg='#e5e5e5',
                              fg='#23374d',
                              cursor='hand2')
        transNavLabel.place(x=55, y=140)
        transNavLabel.bind("<Button>", self.bindingToTranscation)

        #Logout Icon Navbar
        logoutNavIcon = Label(self.aroot,
                              image=logoutImage,
                              bg='#e5e5e5',
                              cursor='hand2')
        logoutNavIcon.place(x=10, y=650)
        logoutNavIcon.bind("<Button>", self.doLogout)
        #Logout Label Navbar
        logoutNavLabel = Label(self.aroot,
                               text="LOGOUT",
                               font=('Segoe UI', 16, BOLD),
                               bg='#e5e5e5',
                               fg='#23374d',
                               cursor='hand2')
        logoutNavLabel.place(x=50, y=650)
        logoutNavLabel.bind("<Button>", self.doLogout)

        ##############################################################################
        ############                    DASHBOARD CONTENT                   ##########
        ##############################################################################

        #Customer Page Title
        cusTitle = Label(self.aroot,
                         text="Customer's Account",
                         font=('Segoe UI', 20, BOLD),
                         bg='#00bd56',
                         fg='#e5e5e5')
        cusTitle.place(x=500, y=20)

        #Add Account Button Property
        addCButton = Button(self.aroot,
                            image=imgTambah,
                            border=0,
                            bg='#00bd56',
                            activebackground='#00bd56',
                            command=self.tambahAkun,
                            cursor='hand2')
        addCButton.place(x=960, y=550)

        headerLabel = ["Account Type", "Balance"]
        data = []
        for raw in self.akun:
            tmpData = (raw.getType(), raw.getBalance())
            data.append(tmpData)

        #Account Table
        frame = Frame(self.aroot)
        frame.grid_columnconfigure(0, weight=1)
        frame.grid_rowconfigure(0, weight=1)
        sheet = Sheet(
            frame,
            page_up_down_select_row=True,
            column_width=120,
            startup_select=(0, 1, "rows"),
            data=
            data,  # [[f"{data_example[1][1]}" for c in range(4)] for r in range(5)],
            headers=[f"{c}" for c in headerLabel],
            theme="light green",
            height=480,
            width=700)
        sheet.enable_bindings(
            ("single_select", "drag_select", "select_all",
             "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"))
        frame.place(x=250, y=100)
        sheet.grid(row=0, column=0, sticky="nswe")

        #Hapus Account Button Property
        hapusButton = Button(self.aroot,
                             image=imgHapus,
                             border=0,
                             bg='#00bd56',
                             activebackground='#00bd56',
                             command=self.hapusAkun,
                             cursor='hand2')
        hapusButton.place(x=960, y=600)

        #Exit Button Property
        exitButton = Button(self.aroot,
                            image=imgExit,
                            border=0,
                            bg='#00bd56',
                            activebackground='#00bd56',
                            command=self.aroot.destroy,
                            cursor='hand2')
        exitButton.place(x=970, y=650)

        self.aroot.mainloop()
 def __init__(self):
     self.raiz = Tk()
     self.raiz.title ("Mantenimiento de Administración")
     self.raiz.geometry('900x600') 
     menubar = Menu(self.raiz)
     self.raiz.config(menu=menubar)
     filemenu = Menu(menubar, tearoff=0)
     filemenu.add_command(label="Acerca de..")
     filemenu.add_separator()
     filemenu.add_command(label="Salir", command=self.raiz.quit)
     mantmenu = Menu(menubar, tearoff=0)
     mantmenu.add_command(label="Clientes", command=self.mostrar_mant_telefonos)
     mantmenu.add_command(label="Servidor")
     menubar.add_cascade(label="Archivo", menu=filemenu)
     menubar.add_cascade(label="Mantenimiento", menu=mantmenu)
     self.fuente = font.Font(weight="bold")
     self.persona = Persona.Persona() 
     self.insertando = True
     self.lb_tituloPantalla = Label(self.raiz, text = "MANTENIMIENTO DE ADMINISTRACIÓN", font = self.fuente)
     self.lb_tituloPantalla.place(x = 320, y = 20)
     self.lb_cedula = Label(self.raiz, text = "Cedula:")
     self.lb_cedula.place(x = 240, y = 60)
     self.txt_cedula = Entry(self.raiz, textvariable=self.persona.cedula, justify="right")
     self.txt_cedula.place(x = 370, y = 60)
     self.lb_nombre = Label(self.raiz, text = "Nombre:")
     self.lb_nombre.place(x = 240, y = 90)
     self.txt_nombre = Entry(self.raiz, textvariable=self.persona.nombre, justify="right", width=30)
     self.txt_nombre.place(x = 370, y = 90)
     self.lb_apellido1 = Label(self.raiz, text = "Primer apellido:")
     self.lb_apellido1.place(x = 240, y = 120)
     self.txt_apellido1 = Entry(self.raiz, textvariable=self.persona.apellido1, justify="right", width=30)
     self.txt_apellido1.place(x = 370, y = 120)
     self.lb_apellido2 = Label(self.raiz, text = "Segundo apellido:")
     self.lb_apellido2.place(x = 240, y = 150)
     self.txt_apellido2 = Entry(self.raiz, textvariable=self.persona.apellido2, justify="right", width=30)
     self.txt_apellido2.place(x = 370, y = 150)
     self.lb_fec_nacimiento = Label(self.raiz, text = "Fecha nacimiento:")
     self.lb_fec_nacimiento.place(x = 240, y = 180)
     self.txt_fechaNacimiento = Entry(self.raiz, textvariable=self.persona.fecNacimiento, justify="right", width=30, state="readonly")
     self.txt_fechaNacimiento.place(x = 370, y = 180)
     self.bt_mostrarCalendario = Button(self.raiz, text="...", width=3, command = self.mostrarDatePicker)
     self.bt_mostrarCalendario.place(x = 650, y = 180)
     self.lb_sexo = Label(self.raiz, text = "Sexo:")
     self.lb_sexo.place(x = 240, y = 210)
     self.radio_sexoM = Radiobutton(self.raiz, text="Masculino", variable=self.persona.sexo,   value=1)
     self.radio_sexoF = Radiobutton(self.raiz, text="Femenino", variable=self.persona.sexo,   value=2)
     self.radio_sexoM.place(x = 370, y = 210)
     self.radio_sexoF.place(x = 490, y = 210)
     self.persona.sexo.set(1)
     self.lb_observaciones = Label(self.raiz, text = "Observaciones:")
     self.lb_observaciones.place(x = 240, y = 250)
     self.txt_observaciones = Entry(self.raiz, textvariable=self.persona.observaciones, justify="right", width=30)
     self.txt_observaciones.place(x = 370, y = 250)
     self.bt_borrar = Button(self.raiz, text="Limpiar", width=15, command = self.limpiarInformacion)
     self.bt_borrar.place(x = 370, y = 310)
     self.bt_enviar = Button(self.raiz, text="Enviar", width=15, command = self.enviarInformacion)
     self.bt_enviar.place(x = 510, y = 310)
     self.bt_modificar = Button(self.raiz, text="Modificar", width=15, command = self.enviarInformacion)
     self.bt_modificar.place(x = 650, y = 310)
     self.lb_tituloPantalla = Label(self.raiz, text = "INFORMACIÓN INCLUIDA", font = self.fuente)
     self.lb_tituloPantalla.place(x = 350, y = 355)
     self.lb_bloquear=Button(self.raiz,text="Bloquear",width=15,command=self.bloquear)
     self.lb_bloquear.place(x=650,y=330)
     self.desbloquear=Button(self.raiz,text="Desbloquear",width=15,command=self.desbloquear)
     self.lb_desbloquear.place(x=650,y=340)
     self.lb_iniciar_tiempo=Button(self.raiz,text="Iniciar tiempo",width=15,command=self.iniciar_tiempo)
     self.lb_iniciar_tiempo.place(x=650,y=350)
     self.lb_detener_tiempo=Button(self.raiz,text="Detener tiempo",width=15,command=self.detener_tiempo)
     self.lb_bloquear.place(x=650,y=360)
     self.lb_enviar_mensaje=Button(self.raiz,text="Enviar",width=15,command=self.enviarInformacion)
     self.lb_enviar_mensaje.place(x=650,y=370)
     self.sheet = Sheet(self.raiz,
                         page_up_down_select_row = True,
                         column_width = 120,
                         startup_select = (0,1,"rows"),
                         headers = ['Cédula', 'Nombre', 'Primer Ape.', 'Segundo Ape.', 'Fec. Nacimiento', 'Sexo'],
                         height = 195, 
                         width = 720 
                         )
     
     self.sheet.enable_bindings(("single_select", 
                                 "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"))
     self.sheet.place(x = 20, y = 390)
     self.bt_cargar = Button(self.raiz, text="Cargar", width=15, command = self.cargarInformacion)
     self.bt_cargar.place(x = 750, y = 385)
     self.bt_eliminar = Button(self.raiz, text="Eliminar", width=15, command = self.eliminarInformacion)
     self.bt_eliminar.place(x = 750, y = 425)
     self.cargarTodaInformacion()
     self.raiz.mainloop()
class Aplicacion:
    

    def __init__(self):
        self.raiz = Tk()
        self.raiz.title ("Mantenimiento de Administración")
        self.raiz.geometry('900x600') 
        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Acerca de..")
        filemenu.add_separator()
        filemenu.add_command(label="Salir", command=self.raiz.quit)
        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Clientes", command=self.mostrar_mant_telefonos)
        mantmenu.add_command(label="Servidor")
        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)
        self.fuente = font.Font(weight="bold")
        self.persona = Persona.Persona() 
        self.insertando = True
        self.lb_tituloPantalla = Label(self.raiz, text = "MANTENIMIENTO DE ADMINISTRACIÓN", font = self.fuente)
        self.lb_tituloPantalla.place(x = 320, y = 20)
        self.lb_cedula = Label(self.raiz, text = "Cedula:")
        self.lb_cedula.place(x = 240, y = 60)
        self.txt_cedula = Entry(self.raiz, textvariable=self.persona.cedula, justify="right")
        self.txt_cedula.place(x = 370, y = 60)
        self.lb_nombre = Label(self.raiz, text = "Nombre:")
        self.lb_nombre.place(x = 240, y = 90)
        self.txt_nombre = Entry(self.raiz, textvariable=self.persona.nombre, justify="right", width=30)
        self.txt_nombre.place(x = 370, y = 90)
        self.lb_apellido1 = Label(self.raiz, text = "Primer apellido:")
        self.lb_apellido1.place(x = 240, y = 120)
        self.txt_apellido1 = Entry(self.raiz, textvariable=self.persona.apellido1, justify="right", width=30)
        self.txt_apellido1.place(x = 370, y = 120)
        self.lb_apellido2 = Label(self.raiz, text = "Segundo apellido:")
        self.lb_apellido2.place(x = 240, y = 150)
        self.txt_apellido2 = Entry(self.raiz, textvariable=self.persona.apellido2, justify="right", width=30)
        self.txt_apellido2.place(x = 370, y = 150)
        self.lb_fec_nacimiento = Label(self.raiz, text = "Fecha nacimiento:")
        self.lb_fec_nacimiento.place(x = 240, y = 180)
        self.txt_fechaNacimiento = Entry(self.raiz, textvariable=self.persona.fecNacimiento, justify="right", width=30, state="readonly")
        self.txt_fechaNacimiento.place(x = 370, y = 180)
        self.bt_mostrarCalendario = Button(self.raiz, text="...", width=3, command = self.mostrarDatePicker)
        self.bt_mostrarCalendario.place(x = 650, y = 180)
        self.lb_sexo = Label(self.raiz, text = "Sexo:")
        self.lb_sexo.place(x = 240, y = 210)
        self.radio_sexoM = Radiobutton(self.raiz, text="Masculino", variable=self.persona.sexo,   value=1)
        self.radio_sexoF = Radiobutton(self.raiz, text="Femenino", variable=self.persona.sexo,   value=2)
        self.radio_sexoM.place(x = 370, y = 210)
        self.radio_sexoF.place(x = 490, y = 210)
        self.persona.sexo.set(1)
        self.lb_observaciones = Label(self.raiz, text = "Observaciones:")
        self.lb_observaciones.place(x = 240, y = 250)
        self.txt_observaciones = Entry(self.raiz, textvariable=self.persona.observaciones, justify="right", width=30)
        self.txt_observaciones.place(x = 370, y = 250)
        self.bt_borrar = Button(self.raiz, text="Limpiar", width=15, command = self.limpiarInformacion)
        self.bt_borrar.place(x = 370, y = 310)
        self.bt_enviar = Button(self.raiz, text="Enviar", width=15, command = self.enviarInformacion)
        self.bt_enviar.place(x = 510, y = 310)
        self.bt_modificar = Button(self.raiz, text="Modificar", width=15, command = self.enviarInformacion)
        self.bt_modificar.place(x = 650, y = 310)
        self.lb_tituloPantalla = Label(self.raiz, text = "INFORMACIÓN INCLUIDA", font = self.fuente)
        self.lb_tituloPantalla.place(x = 350, y = 355)
        self.lb_bloquear=Button(self.raiz,text="Bloquear",width=15,command=self.bloquear)
        self.lb_bloquear.place(x=650,y=330)
        self.desbloquear=Button(self.raiz,text="Desbloquear",width=15,command=self.desbloquear)
        self.lb_desbloquear.place(x=650,y=340)
        self.lb_iniciar_tiempo=Button(self.raiz,text="Iniciar tiempo",width=15,command=self.iniciar_tiempo)
        self.lb_iniciar_tiempo.place(x=650,y=350)
        self.lb_detener_tiempo=Button(self.raiz,text="Detener tiempo",width=15,command=self.detener_tiempo)
        self.lb_bloquear.place(x=650,y=360)
        self.lb_enviar_mensaje=Button(self.raiz,text="Enviar",width=15,command=self.enviarInformacion)
        self.lb_enviar_mensaje.place(x=650,y=370)
        self.sheet = Sheet(self.raiz,
                            page_up_down_select_row = True,
                            column_width = 120,
                            startup_select = (0,1,"rows"),
                            headers = ['Cédula', 'Nombre', 'Primer Ape.', 'Segundo Ape.', 'Fec. Nacimiento', 'Sexo'],
                            height = 195, 
                            width = 720 
                            )
        
        self.sheet.enable_bindings(("single_select", 
                                    "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"))
        self.sheet.place(x = 20, y = 390)
        self.bt_cargar = Button(self.raiz, text="Cargar", width=15, command = self.cargarInformacion)
        self.bt_cargar.place(x = 750, y = 385)
        self.bt_eliminar = Button(self.raiz, text="Eliminar", width=15, command = self.eliminarInformacion)
        self.bt_eliminar.place(x = 750, y = 425)
        self.cargarTodaInformacion()
        self.raiz.mainloop()
    def mostrar_mant_telefonos(self):
        mant_telefonos.MantTelefonos(self.raiz)
    def cargarTodaInformacion(self):
        try:
            self.personaBo = PersonoBO.PersonaBO() 
            resultado = self.personaBo.consultar()

            self.sheet.set_sheet_data(resultado)
        except Exception as e: 
            msg.showerror("Error",  str(e))
    def cargarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            cedula = (self.sheet.get_cell_data(datoSeleccionado[0],0))
            self.persona.cedula.set(cedula)
            self.personaBo = PersonoBO.PersonaBO() 
            self.personaBo.consultarPersona(self.persona) 
            self.insertando = False
            msg.showinfo("Acción: Consultar persona", "La información de la persona ha sido consultada correctamente")
        except Exception as e: 
            msg.showerror("Error",  str(e))
    def eliminarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            cedula = (self.sheet.get_cell_data(datoSeleccionado[0],0))
            nombre = (self.sheet.get_cell_data(datoSeleccionado[0],1))
            resultado = msg.askquestion("Eliminar",  "¿Desear eliminar a "+nombre+" de la base de datos?")
            if resultado == "yes":
                self.persona.cedula.set(cedula)
                self.personaBo = PersonoBO.PersonaBO()
                self.personaBo.eliminar(self.persona) 
                self.cargarTodaInformacion()
                self.persona.limpiar()
        except Exception as e: 
            msg.showerror("Error",  str(e))
    def printTxt(self, texto):
        print(texto)
    def enviarInformacion(self):
        try:
            self.personaBo = PersonoBO.PersonaBO() 
            if(self.insertando == True):
                self.personaBo.guardar(self.persona)
            else:
                self.personaBo.modificar(self.persona)
            self.cargarTodaInformacion()
            self.persona.limpiar() 
            if(self.insertando == True):
                msg.showinfo("Acción: Agregar persona", "La información de la persona ha sido incluida correctamente")
            else:
                msg.showinfo("Acción: Agregar modificar", "La información de la persona ha sido modificada correctamente") 
            self.insertando = True
        except Exception as e: 
            msg.showerror("Error",  str(e))
    def limpiarInformacion(self):
        self.persona.limpiar() 
        self.insertando = True
        msg.showinfo("Acción del sistema", "La información del formulario ha sido eliminada correctamente")
    def mostrarDatePicker(self):
        self.top = Toplevel(self.raiz)
        self.cal = Calendar(self.top, font="Arial 14", selectmode='day', locale='en_US',
                   cursor="hand", year=2019, month=6, day=16)
        self.cal.pack(fill="both", expand=True)
        ttk.Button(self.top, text="Seleccionar", command = self.seleccionarFecha).pack()
    def seleccionarFecha(self):
        self.persona.fecNacimiento.set(self.cal.selection_get())
Ejemplo n.º 21
0
    def __init__(self):
        #Pantalla
        self.raiz = Tk()
        self.raiz.title("Mantenimiento de Factura")
        self.raiz.geometry('600x730')

        #Barra menu
        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)

        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Salir", command=self.raiz.quit)

        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Clientes", command=self.abrir_C)
        mantmenu.add_command(label="Articulos", command=self.abrir_A)
        mantmenu.add_command(label="Proveedores", command=self.abrir_p)
        mantmenu.add_command(label="Conexion", command=self.abrir_R)

        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)

        #Objeto Factura
        self.fuente = font.Font(weight="bold")
        self.factura = Factura.Factura()
        self.insertando = True

        #Titulo
        self.lb_tituloPantalla = Label(self.raiz,
                                       text="MANTENIMIENTO DE FACTURA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=190, y=20)

        #Formulario

        #ID factura
        self.lb_cedula = Label(self.raiz, text="ID factura:")
        self.lb_cedula.place(x=150, y=60)
        self.txt_cedula = Entry(self.raiz,
                                textvariable=self.factura.PK_N_FACTURA,
                                justify="right")
        self.txt_cedula.place(x=300, y=60)

        #Cedula
        self.lb_nombre = Label(self.raiz, text="Cedula:")
        self.lb_nombre.place(x=150, y=90)
        self.txt_nombre = Entry(self.raiz,
                                textvariable=self.factura.FK_CEDULA,
                                justify="right")
        self.txt_nombre.place(x=300, y=90)

        #Tiempo
        self.lb_apellido2 = Label(self.raiz, text="Tiempo utilizado")
        self.lb_apellido2.place(x=150, y=120)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.TIEMPO_USO,
                                   justify="right",
                                   width=30)
        self.txt_apellido2.place(x=300, y=120)

        #Monto
        self.lb_apellido2 = Label(self.raiz, text="Monto Total:")
        self.lb_apellido2.place(x=150, y=150)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.MONTO,
                                   justify="right",
                                   width=30)
        self.txt_apellido2.place(x=300, y=150)

        #Articulos asociados
        self.lb_apellido2 = Label(self.raiz, text="ID Articulo asociado:")
        self.lb_apellido2.place(x=150, y=180)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.FK_ID_ART,
                                   justify="right")
        self.txt_apellido2.place(x=300, y=180)

        #Asociado

        #Se coloca un label del informacion
        self.lb_tituloPantalla = Label(self.raiz,
                                       text="INFORMACIÓN ASOCIADA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=200, y=270)

        #Nombre-cedula
        self.lb_apellido2 = Label(self.raiz, text="Nombre asociado:")
        self.lb_apellido2.place(x=150, y=310)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.CLIENTE,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=310)

        #Primer Apellido-cedula
        self.lb_apellido2 = Label(self.raiz, text="1.ª Apellido asociado:")
        self.lb_apellido2.place(x=150, y=340)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.APELLIDO_1,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=340)

        #Segundo Apellido-cedula
        self.lb_apellido2 = Label(self.raiz, text="2.ª Apellido asociado:")
        self.lb_apellido2.place(x=150, y=370)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.APELLIDO_2,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=370)

        #Nombre-articulo
        self.lb_apellido2 = Label(self.raiz, text="Nombre Articulo:")
        self.lb_apellido2.place(x=150, y=400)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.ARTICULO,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=400)

        #Botones

        #Boton Limpiar
        self.bt_borrar = Button(self.raiz,
                                text="Limpiar",
                                width=15,
                                command=self.limpiarInformacion)
        self.bt_borrar.place(x=190, y=220)

        #Boton Enviar
        self.bt_enviar = Button(self.raiz,
                                text="Enviar",
                                width=15,
                                command=self.enviarInformacion)
        self.bt_enviar.place(x=310, y=220)

        #Boton Cargar
        self.bt_borrar = Button(self.raiz,
                                text="Cargar",
                                width=15,
                                command=self.cargarInformacion)
        self.bt_borrar.place(x=430, y=220)

        #Boton Eliminar
        self.bt_enviar = Button(self.raiz,
                                text="Eliminar",
                                width=15,
                                command=self.eliminarInformacion)
        self.bt_enviar.place(x=550, y=220)

        self.bt_reporte = Button(self.raiz,
                                 text="Reporte",
                                 width=15,
                                 command=self.generarPDFListado)
        self.bt_reporte.place(x=670, y=220)

        #Se coloca un label del informacion
        self.lb_tituloPantalla = Label(self.raiz,
                                       text="INFORMACIÓN INCLUIDA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=200, y=440)

        self.sheet = Sheet(self.raiz,
                           page_up_down_select_row=True,
                           column_width=120,
                           startup_select=(0, 1, "rows"),
                           headers=[
                               'Factura', 'Cedula', 'Tiempo uso', 'Monto',
                               'ID articulo'
                           ],
                           height=170,
                           width=560)

        self.sheet.enable_bindings(
            ("single_select", "column_select", "row_select",
             "column_width_resize", "double_click_column_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"))

        self.sheet.place(x=20, y=480)

        self.cargarTodaInformacion()

        self.raiz.mainloop()
Ejemplo n.º 22
0
class Directorio_F:
    def __init__(self):
        #Pantalla
        self.raiz = Tk()
        self.raiz.title("Mantenimiento de Factura")
        self.raiz.geometry('600x730')

        #Barra menu
        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)

        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Salir", command=self.raiz.quit)

        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Clientes", command=self.abrir_C)
        mantmenu.add_command(label="Articulos", command=self.abrir_A)
        mantmenu.add_command(label="Proveedores", command=self.abrir_p)
        mantmenu.add_command(label="Conexion", command=self.abrir_R)

        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)

        #Objeto Factura
        self.fuente = font.Font(weight="bold")
        self.factura = Factura.Factura()
        self.insertando = True

        #Titulo
        self.lb_tituloPantalla = Label(self.raiz,
                                       text="MANTENIMIENTO DE FACTURA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=190, y=20)

        #Formulario

        #ID factura
        self.lb_cedula = Label(self.raiz, text="ID factura:")
        self.lb_cedula.place(x=150, y=60)
        self.txt_cedula = Entry(self.raiz,
                                textvariable=self.factura.PK_N_FACTURA,
                                justify="right")
        self.txt_cedula.place(x=300, y=60)

        #Cedula
        self.lb_nombre = Label(self.raiz, text="Cedula:")
        self.lb_nombre.place(x=150, y=90)
        self.txt_nombre = Entry(self.raiz,
                                textvariable=self.factura.FK_CEDULA,
                                justify="right")
        self.txt_nombre.place(x=300, y=90)

        #Tiempo
        self.lb_apellido2 = Label(self.raiz, text="Tiempo utilizado")
        self.lb_apellido2.place(x=150, y=120)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.TIEMPO_USO,
                                   justify="right",
                                   width=30)
        self.txt_apellido2.place(x=300, y=120)

        #Monto
        self.lb_apellido2 = Label(self.raiz, text="Monto Total:")
        self.lb_apellido2.place(x=150, y=150)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.MONTO,
                                   justify="right",
                                   width=30)
        self.txt_apellido2.place(x=300, y=150)

        #Articulos asociados
        self.lb_apellido2 = Label(self.raiz, text="ID Articulo asociado:")
        self.lb_apellido2.place(x=150, y=180)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.FK_ID_ART,
                                   justify="right")
        self.txt_apellido2.place(x=300, y=180)

        #Asociado

        #Se coloca un label del informacion
        self.lb_tituloPantalla = Label(self.raiz,
                                       text="INFORMACIÓN ASOCIADA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=200, y=270)

        #Nombre-cedula
        self.lb_apellido2 = Label(self.raiz, text="Nombre asociado:")
        self.lb_apellido2.place(x=150, y=310)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.CLIENTE,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=310)

        #Primer Apellido-cedula
        self.lb_apellido2 = Label(self.raiz, text="1.ª Apellido asociado:")
        self.lb_apellido2.place(x=150, y=340)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.APELLIDO_1,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=340)

        #Segundo Apellido-cedula
        self.lb_apellido2 = Label(self.raiz, text="2.ª Apellido asociado:")
        self.lb_apellido2.place(x=150, y=370)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.APELLIDO_2,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=370)

        #Nombre-articulo
        self.lb_apellido2 = Label(self.raiz, text="Nombre Articulo:")
        self.lb_apellido2.place(x=150, y=400)
        self.txt_apellido2 = Entry(self.raiz,
                                   textvariable=self.factura.ARTICULO,
                                   justify="right",
                                   state="readonly",
                                   width=30)
        self.txt_apellido2.place(x=300, y=400)

        #Botones

        #Boton Limpiar
        self.bt_borrar = Button(self.raiz,
                                text="Limpiar",
                                width=15,
                                command=self.limpiarInformacion)
        self.bt_borrar.place(x=190, y=220)

        #Boton Enviar
        self.bt_enviar = Button(self.raiz,
                                text="Enviar",
                                width=15,
                                command=self.enviarInformacion)
        self.bt_enviar.place(x=310, y=220)

        #Boton Cargar
        self.bt_borrar = Button(self.raiz,
                                text="Cargar",
                                width=15,
                                command=self.cargarInformacion)
        self.bt_borrar.place(x=430, y=220)

        #Boton Eliminar
        self.bt_enviar = Button(self.raiz,
                                text="Eliminar",
                                width=15,
                                command=self.eliminarInformacion)
        self.bt_enviar.place(x=550, y=220)

        self.bt_reporte = Button(self.raiz,
                                 text="Reporte",
                                 width=15,
                                 command=self.generarPDFListado)
        self.bt_reporte.place(x=670, y=220)

        #Se coloca un label del informacion
        self.lb_tituloPantalla = Label(self.raiz,
                                       text="INFORMACIÓN INCLUIDA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=200, y=440)

        self.sheet = Sheet(self.raiz,
                           page_up_down_select_row=True,
                           column_width=120,
                           startup_select=(0, 1, "rows"),
                           headers=[
                               'Factura', 'Cedula', 'Tiempo uso', 'Monto',
                               'ID articulo'
                           ],
                           height=170,
                           width=560)

        self.sheet.enable_bindings(
            ("single_select", "column_select", "row_select",
             "column_width_resize", "double_click_column_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"))

        self.sheet.place(x=20, y=480)

        self.cargarTodaInformacion()

        self.raiz.mainloop()

    def generarPDFListado(self):
        try:
            #Crea un objeto para la creación del PDF
            nombreArchivo = "ListadoPersonas.pdf"
            rep = reportPDF.Canvas(nombreArchivo)

            #Agrega el tipo de fuente Arial
            registerFont(TTFont('Arial', 'ARIAL.ttf'))

            #Crea el texto en donde se incluye la información
            textobject = rep.beginText()
            # Coloca el titulo
            textobject.setFont('Arial', 16)
            textobject.setTextOrigin(10, 800)
            textobject.setFillColor(colors.darkorange)
            textobject.textLine(text='LISTA DE FACTURA')
            #Escribe el titulo en el reportes
            rep.drawText(textobject)

            #consultar la informacion de la base de datos
            self.facturaBo = FacturaBO.FacturaBO(
            )  #se crea un objeto de logica de negocio
            informacion = self.facturaBo.consultar()
            #agrega los titulos de la tabla en la información consultada
            titulos = [
                "Factura", "Cedula", "Tiempo uso", "Monto", "ID articulo"
            ]
            informacion.insert(0, titulos)
            #crea el objeto tabla  para mostrar la información
            t = Table(informacion)
            #Le coloca el color tanto al borde de la tabla como de las celdas
            t.setStyle(
                TableStyle([("BOX", (0, 0), (-1, -1), 0.25, colors.black),
                            ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black)
                            ]))

            #para cambiar el color de las fichas de hace un ciclo según la cantidad de datos
            #que devuelve la base de datos
            data_len = len(informacion)
            for each in range(data_len):
                if each % 2 == 0:
                    bg_color = colors.whitesmoke
                else:
                    bg_color = colors.lightgrey

                if each == 0:  #Le aplica un estilo diferente a la tabla
                    t.setStyle(
                        TableStyle([('BACKGROUND', (0, each), (-1, each),
                                     colors.orange)]))
                else:
                    t.setStyle(
                        TableStyle([('BACKGROUND', (0, each), (-1, each),
                                     bg_color)]))

            #acomoda la tabla según el espacio requerido
            aW = 840
            aH = 780
            w, h = t.wrap(aW, aH)
            t.drawOn(rep, 10, aH - h)

            #Guarda el archivo
            rep.save()
            #Abre el archivo desde comandos, puede variar en MacOs es open
            #subprocess.Popen("open '%s'" % nombreArchivo, shell=True)
            subprocess.Popen(nombreArchivo, shell=True)  #Windows
        except IOError:
            msg.showerror("Error", "El archivo ya se encuentra abierto")

    #Limpiar
    def limpiarInformacion(self):
        self.factura.limpiar()
        msg.showinfo(
            "Acción del sistema",
            "La información del formulario ha sido eliminada correctamente")

    #envia la info
    def enviarInformacion(self):
        try:
            self.facturaBo = FacturaBO.FacturaBO(
            )  #se crea un objeto de logica de negocio
            if (self.insertando == True):
                self.facturaBo.guardar(self.factura)
            else:
                self.facturaBo.modificar(self.factura)

            self.cargarTodaInformacion()
            self.insertando = True
            self.factura.limpiar()  #se limpia el formulario

            if (self.insertando == True):
                msg.showinfo(
                    "Acción: Agregar factura",
                    "La información de la factura ha sido incluida correctamente"
                )  # Se muestra el mensaje de que todo esta correcto
            else:
                msg.showinfo(
                    "Acción: Modificar factura",
                    "La información de la factura ha sido modificada correctamente"
                )  # Se muestra el mensaje de que todo esta correcto
        except Exception as e:
            msg.showerror(
                "Error", str(e)
            )  #si se genera algun tipo de error muestra un mensache con dicho error

    #eliminar la info
    def eliminarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            factura = (self.sheet.get_cell_data(datoSeleccionado[0], 0))

            resultado = msg.askquestion(
                "Eliminar",
                "¿Desear eliminar a " + factura + " de la base de datos?")
            if resultado == "yes":
                self.factura.PK_N_FACTURA.set(factura)
                self.facturaBo = FacturaBO.FacturaBO()
                self.facturaBo.eliminar(self.factura)
                self.cargarTodaInformacion()
                self.factura.limpiar()
        except Exception as e:
            msg.showerror("Error", str(e))

    #cargar toda la info
    def cargarTodaInformacion(self):
        try:
            self.facturaBo = FacturaBO.FacturaBO()
            resultado = self.facturaBo.consultar()

            self.sheet.set_sheet_data(resultado)
        except Exception as e:
            msg.showerror("Error", str(e))

    #selecionado
    def cargarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            numero = (self.sheet.get_cell_data(datoSeleccionado[0], 0))

            self.factura.PK_N_FACTURA.set(numero)
            self.facturaBo = FacturaBO.FacturaBO()
            self.facturaBo.consultarFactura(self.factura)
            self.insertando = False
            msg.showinfo(
                "Acción: Consultar factura",
                "La información de la factura ha sido consultada correctamente"
            )

        except Exception as e:
            msg.showerror("Error", str(e))

    #abrir
    def abrir_C(self):
        from mant_Cliente import Directorio_C
        self.raiz.destroy()
        Directorio_C()

    def abrir_A(self):
        from mant_Articulos import Directorio_A
        self.raiz.destroy()
        Directorio_A()

    def abrir_p(self):
        from mant_Proveedor import Directorio_P
        self.raiz.destroy()
        Directorio_P()

    def abrir_R(self):
        from mant_RelacionAP import Conexion_AP
        self.raiz.destroy()
        Conexion_AP()
Ejemplo n.º 23
0
    def __init__(self, parent):
        self.parent = parent

        self.raiz = Toplevel(self.parent)
        self.raiz.title("Mantenimiento de Telefonos")
        self.raiz.geometry('900x510')

        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)

        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Acerca de..")
        filemenu.add_separator()
        filemenu.add_command(label="Salir", command=self.raiz.quit)

        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Personas",
                             command=self.mostrar_mant_personas)
        mantmenu.add_command(label="Direcciones")

        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)

        self.fuente = font.Font(weight="bold")

        self.telefono = Telefono.Telefono()
        self.insertando = True
        self.nombreCliente = StringVar()

        self.Cliente = Cliente.Cliente()

        self.lb_tituloPantalla = Label(self.raiz,
                                       text="MANTENIMIENTO DE TELEFONOS",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=320, y=20)

        self.lb_cedula = Label(self.raiz, text="Cedula:")
        self.lb_cedula.place(x=240, y=60)
        self.txt_cedula = Entry(self.raiz,
                                textvariable=self.telefono.cedula,
                                justify="right",
                                width=12)
        self.txt_cedula.place(x=370, y=60)

        self.bt_consultar = Button(self.raiz,
                                   text="Consultar",
                                   width=15,
                                   command=self.consultarNombre)
        self.bt_consultar.place(x=512, y=60)

        self.lb_nombre = Label(self.raiz, text="Nombre:")
        self.lb_nombre.place(x=240, y=90)
        self.txt_nombre = Entry(self.raiz,
                                textvariable=self.nombrePersona,
                                justify="right",
                                width=30)
        self.txt_nombre.place(x=370, y=90)

        self.lb_telefono = Label(self.raiz, text="Telefono:")
        self.lb_telefono.place(x=240, y=120)
        self.txt_telefono = Entry(self.raiz,
                                  textvariable=self.telefono.telefono,
                                  justify="right",
                                  width=30)
        self.txt_telefono.place(x=370, y=120)

        self.lb_descripcion = Label(self.raiz, text="Descripción:")
        self.lb_descripcion.place(x=240, y=150)
        self.txt_descripcion = Entry(self.raiz,
                                     textvariable=self.telefono.descripcion,
                                     justify="right",
                                     width=30)
        self.txt_descripcion.place(x=370, y=150)

        self.bt_borrar = Button(self.raiz,
                                text="Limpiar",
                                width=15,
                                command=self.limpiarInformacion)
        self.bt_borrar.place(x=370, y=180)

        self.bt_enviar = Button(self.raiz,
                                text="Enviar",
                                width=15,
                                command=self.enviarInformacion)
        self.bt_enviar.place(x=510, y=180)

        self.lb_tituloPantalla = Label(self.raiz,
                                       text="INFORMACIÓN INCLUIDA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=350, y=230)
        self.sheet = Sheet(
            self.raiz,
            page_up_down_select_row=True,
            column_width=120,
            startup_select=(0, 1, "rows"),
            headers=['Cédula', 'Nombre', 'Telefono', 'Descripción'],
            height=195,
            width=720)

        self.sheet.enable_bindings(
            ("single_select", "column_select", "row_select",
             "column_width_resize", "double_click_column_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"))
        self.sheet.place(x=20, y=260)

        self.bt_cargar = Button(self.raiz,
                                text="Cargar",
                                width=15,
                                command=self.cargarInformacion)
        self.bt_cargar.place(x=750, y=255)

        self.bt_eliminar = Button(self.raiz,
                                  text="Eliminar",
                                  width=15,
                                  command=self.eliminarInformacion)
        self.bt_eliminar.place(x=750, y=295)

        self.cargarTodaInformacion()

        self.parent.withdraw()

        self.raiz.protocol("WM_DELETE_WINDOW", self.on_closing)
Ejemplo n.º 24
0
class MantTelefono():
    def __init__(self, parent):
        self.parent = parent

        self.raiz = Toplevel(self.parent)
        self.raiz.title("Mantenimiento de Telefonos")
        self.raiz.geometry('900x510')

        menubar = Menu(self.raiz)
        self.raiz.config(menu=menubar)

        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Acerca de..")
        filemenu.add_separator()
        filemenu.add_command(label="Salir", command=self.raiz.quit)

        mantmenu = Menu(menubar, tearoff=0)
        mantmenu.add_command(label="Personas",
                             command=self.mostrar_mant_personas)
        mantmenu.add_command(label="Direcciones")

        menubar.add_cascade(label="Archivo", menu=filemenu)
        menubar.add_cascade(label="Mantenimiento", menu=mantmenu)

        self.fuente = font.Font(weight="bold")

        self.telefono = Telefono.Telefono()
        self.insertando = True
        self.nombreCliente = StringVar()

        self.Cliente = Cliente.Cliente()

        self.lb_tituloPantalla = Label(self.raiz,
                                       text="MANTENIMIENTO DE TELEFONOS",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=320, y=20)

        self.lb_cedula = Label(self.raiz, text="Cedula:")
        self.lb_cedula.place(x=240, y=60)
        self.txt_cedula = Entry(self.raiz,
                                textvariable=self.telefono.cedula,
                                justify="right",
                                width=12)
        self.txt_cedula.place(x=370, y=60)

        self.bt_consultar = Button(self.raiz,
                                   text="Consultar",
                                   width=15,
                                   command=self.consultarNombre)
        self.bt_consultar.place(x=512, y=60)

        self.lb_nombre = Label(self.raiz, text="Nombre:")
        self.lb_nombre.place(x=240, y=90)
        self.txt_nombre = Entry(self.raiz,
                                textvariable=self.nombrePersona,
                                justify="right",
                                width=30)
        self.txt_nombre.place(x=370, y=90)

        self.lb_telefono = Label(self.raiz, text="Telefono:")
        self.lb_telefono.place(x=240, y=120)
        self.txt_telefono = Entry(self.raiz,
                                  textvariable=self.telefono.telefono,
                                  justify="right",
                                  width=30)
        self.txt_telefono.place(x=370, y=120)

        self.lb_descripcion = Label(self.raiz, text="Descripción:")
        self.lb_descripcion.place(x=240, y=150)
        self.txt_descripcion = Entry(self.raiz,
                                     textvariable=self.telefono.descripcion,
                                     justify="right",
                                     width=30)
        self.txt_descripcion.place(x=370, y=150)

        self.bt_borrar = Button(self.raiz,
                                text="Limpiar",
                                width=15,
                                command=self.limpiarInformacion)
        self.bt_borrar.place(x=370, y=180)

        self.bt_enviar = Button(self.raiz,
                                text="Enviar",
                                width=15,
                                command=self.enviarInformacion)
        self.bt_enviar.place(x=510, y=180)

        self.lb_tituloPantalla = Label(self.raiz,
                                       text="INFORMACIÓN INCLUIDA",
                                       font=self.fuente)
        self.lb_tituloPantalla.place(x=350, y=230)
        self.sheet = Sheet(
            self.raiz,
            page_up_down_select_row=True,
            column_width=120,
            startup_select=(0, 1, "rows"),
            headers=['Cédula', 'Nombre', 'Telefono', 'Descripción'],
            height=195,
            width=720)

        self.sheet.enable_bindings(
            ("single_select", "column_select", "row_select",
             "column_width_resize", "double_click_column_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"))
        self.sheet.place(x=20, y=260)

        self.bt_cargar = Button(self.raiz,
                                text="Cargar",
                                width=15,
                                command=self.cargarInformacion)
        self.bt_cargar.place(x=750, y=255)

        self.bt_eliminar = Button(self.raiz,
                                  text="Eliminar",
                                  width=15,
                                  command=self.eliminarInformacion)
        self.bt_eliminar.place(x=750, y=295)

        self.cargarTodaInformacion()

        self.parent.withdraw()

        self.raiz.protocol("WM_DELETE_WINDOW", self.on_closing)

    def enviarInformacion(self):
        try:
            self.telefonoBo = TelefonoBO.TelefonoBO()
            if (self.insertando == True):
                self.telefonoBo.guardar(self.telefono)
            else:
                self.telefonoBo.modificar(self.telefono)

            self.cargarTodaInformacion()
            self.telefono.limpiar()
            self.nombreCliente.set("")

            if (self.insertando == True):
                msg.showinfo(
                    "Acción: Agregar teléfono",
                    "La información del teléfono ha sido incluida correctamente"
                )
            else:
                msg.showinfo(
                    "Acción: Modificar teléfono",
                    "La información del teléfono ha sido modificada correctamente"
                )

            self.insertando = True

        except Exception as e:
            msg.showerror("Error", str(e))

    def limpiarInformacion(self):
        self.telefono.limpiar()
        self.nombreCliente.set("")
        self.insertando = True
        msg.showinfo(
            "Acción del sistema",
            "La información del formulario ha sido eliminada correctamente")

    def consultarNombre(self):
        try:
            self.ClienteBo = PersonoBO.ClienteBO()
            self.Cliente.cedula.set(self.telefono.cedula.get())
            self.ClienteBo.consultarCliente(self.Cliente)
            if self.Cliente.nombre.get() == "":
                self.nombreCliente = "No existe el Cliente "
            else:
                self.nombreCliente.set(self.Cliente.nombre.get() + " " +
                                       self.Cliente.apellido1.get() + " " +
                                       self.Cliente.apellido2.get())

        except Exception as e:
            msg.showerror("Error", str(e))

    def cargarTodaInformacion(self):
        try:
            self.telefonoBo = TelefonoBO.TelefonoBO()
            resultado = self.telefonoBo.consultar()

            self.sheet.set_sheet_data(resultado)
        except Exception as e:
            msg.showerror("Error", str(e))

    def cargarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            telefono = (self.sheet.get_cell_data(datoSeleccionado[0], 2))
            self.telefono.telefono.set(telefono)
            self.telefonoBo = TelefonoBO.TelefonoBO()
            self.telefonoBo.consultarTelefono(self.telefono)
            self.consultarNombre()
            self.insertando = False
            msg.showinfo(
                "Acción: Consultar teléfono",
                "La información del teléfono ha sido consultada correctamente")

        except Exception as e:
            msg.showerror("Error", str(e))

    def eliminarInformacion(self):
        try:
            datoSeleccionado = self.sheet.get_currently_selected()
            telefono = (self.sheet.get_cell_data(datoSeleccionado[0], 2))
            nombre = (self.sheet.get_cell_data(datoSeleccionado[0], 1))

            resultado = msg.askquestion(
                "Eliminar", "¿Desear eliminar el telefono " + telefono +
                " de " + nombre + " de la base de datos?")
            if resultado == "yes":
                self.telefono.telefono.set(telefono)
                self.telefonoBo = TelefonoBO.TelefonoBO()
                self.telefonoBo.eliminar(self.telefono)
                self.cargarTodaInformacion()
                self.telefono.limpiar()
                self.nombreCliente.set("")

        except Exception as e:
            msg.showerror("Error", str(e))

    def mostrar_mant_cliente(self):
        self.parent.deiconify()
        self.raiz.destroy()

    def on_closing(self):
        self.parent.destroy()
Ejemplo n.º 25
0
    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 = "dark",
            data=[[
                f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(30)
            ] for r in range(2000)],  #to set sheet data at startup
            #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)],
            #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.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 = [3, 1, 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)
Ejemplo n.º 26
0
class AnalyzeStockScreen(Frame):
    def __init__(self, master=None, session=None):
        super().__init__(master)
        self.master = master
        self.session = session
        self.analyze_controller = FAnalyzeStockController(session)
        self.pack(padx=20, pady=20)
        self.create_widgets()

    def create_widgets(self):
        # Khởi tạo tab phân tích chứng khoán

        ## Phần nhập ngày bắt đầu
        self.start_date_frame = Frame(self)
        self.start_date_frame.pack(fill=X)
        self.start_date_label = Label(self.start_date_frame,
                                      text="Start date",
                                      width=10)
        self.start_date_label.pack(side=LEFT, padx=5, pady=5)
        self.start_date_input = Entry(self.start_date_frame)
        self.start_date_input.pack(fill=X, padx=5, expand=True)

        ## Phần nhập ngày kết thúc
        self.end_date_frame = Frame(self)
        self.end_date_frame.pack(fill=X)
        self.end_date_label = Label(self.end_date_frame,
                                    text="End date",
                                    width=10)
        self.end_date_label.pack(side=LEFT, padx=5, pady=5)
        self.end_date_input = Entry(self.end_date_frame)
        self.end_date_input.pack(fill=X, padx=5, expand=True)

        ## Phần nút bấm
        self.stock_submit_frame = Frame(self)
        self.stock_submit_frame.pack(fill=X, padx=10)

        ## Phần button phân tích
        self.stock_submit = Button(self.stock_submit_frame)
        self.stock_submit["text"] = "Tính"
        self.stock_submit["command"] = lambda: self.start_calc()
        self.stock_submit.pack(side=RIGHT)

        # Phầns button export excel
        self.export_excel_button = Button(self.stock_submit_frame,
                                          state=DISABLED)
        self.export_excel_button["text"] = "Export file"
        self.export_excel_button["command"] = lambda: self.export_file_excel()
        self.export_excel_button.pack(side=RIGHT, padx=20)

        ## Phần bản tính
        self.tabel_frame = Frame(self)
        self.tabel_frame.pack(fill=X, pady=10)
        self.sheet = Sheet(self.tabel_frame)
        self.sheet.pack(fill=X)

        self.header = ("Mã", "Giá đóng nhỏ nhất", "Giá đóng lớn nhất")
        self.sheet.headers(self.header)

        ### Cấu hình cho tkinter sheet
        self.sheet.enable_bindings(
            ("single_select", "row_select", "column_width_resize", "arrowkeys",
             "right_click_popup_menu", "rc_select", "rc_insert_row",
             "rc_delete_row", "copy", "cut", "paste", "delete", "undo",
             "edit_cell"))

    def start_calc(self):
        ## Disable trang export file button
        self.export_excel_button["state"] = DISABLED

        datetime_format = "%d/%m/%Y"
        startDate = datetime.strptime(self.start_date_input.get().strip(),
                                      datetime_format)
        endDate = datetime.strptime(self.end_date_input.get(), datetime_format)

        self.analyzeStocks = self.analyze_controller.get_analyze_stocks_data(
            startDate, endDate)

        ## Tạo data cho tkinter sheet
        self.data_sheet = []

        for anaStock in self.analyzeStocks:
            self.data_sheet.append([
                anaStock.code, anaStock.closedPriceMin, anaStock.closedPriceMax
            ])

        ## Thêm vào tkinter sheet
        self.sheet.set_sheet_data(self.data_sheet)

        self.export_excel_button["state"] = NORMAL

    def export_file_excel(self):

        ## Tạo bảnh tính excel với tên file là file_excel_<Thời gian tính theo giây>
        workbook = xlsxwriter.Workbook('file_excel_{}.xlsx'.format(
            time.time()))
        worksheet = workbook.add_worksheet()

        ## Tạo kiểu kiểu chữ
        bold = workbook.add_format({'bold': True})

        ## Phần header cho trang tính excel
        worksheet.write('A1', 'Mã', bold)
        worksheet.write('B1', 'Giá đóng nhỏ nhất', bold)
        worksheet.write('C1', 'Giá đóng lớn nhất', bold)

        ## Thêm dòng vào bảng tính
        row = 1
        for record in self.analyzeStocks:
            worksheet.write(row, 0, record.code)
            worksheet.write(row, 1, record.closedPriceMin)
            worksheet.write(row, 2, record.closedPriceMax)
            row += 1

        ## Lưu file và đóng bảng tính
        workbook.close()
Ejemplo n.º 27
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,
            page_up_down_select_row=True,
            #empty_vertical = 0,
            column_width=120,
            startup_select=(0, 1, "rows"),
            #row_height = "4",
            #default_row_index = "numbers",
            #default_header = "both",
            #empty_horizontal = 0,
            #show_vertical_grid = False,
            #show_horizontal_grid = False,
            #auto_resize_default_row_index = False,
            #header_height = "3",
            #row_index_width = 100,
            #align = "center",
            #header_align = "w",
            #row_index_align = "w",
            data=[[
                f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(50)
            ] for r in range(1000)],  #to set sheet data at startup
            #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 = "light green",
            #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.disable_bindings() #uses the same strings
        #self.sheet.enable_bindings()

        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("light green")

        # __________ 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")
        #self.sheet.highlight_rows(6, "green")
        #self.sheet.highlight_columns(4, "yellow")

        # __________ DISPLAY SUBSET OF COLUMNS __________

        #self.sheet.display_subset_of_columns(indexes = [1, 0, 2, 10, 15, 20, 25, 35, 30, 36, 39, 9, 5, 11, 12, 43, 45], 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),
        #                           ("end_edit_cell", self.end_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("bind_all", self.all_extra_bindings)
        #self.sheet.extra_bindings("begin_edit_cell", self.begin_edit_cell)
        #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.cell_selected(0, 0))
        #print (self.sheet.row_selected(0))
        #print (self.sheet.column_selected(0))
        #print (self.sheet.anything_selected())
        #print (self.sheet.all_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 all_extra_bindings(self, event):
        print(event)

    def begin_edit_cell(self, event):
        print(event)  # event[2] is keystroke
        return event[
            2]  # return value is the text to be put into cell edit window

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

    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
Ejemplo n.º 28
0
class Application:
    def __init__(self, master):
        self.master = master
        self.now = datetime.now()
        # self.master.wm_iconbitmap("logo.ico")
        self.master.eval('tk::PlaceWindow . center')
        self.master.minsize(400, 300)
        self.master.grid_columnconfigure(0, weight=1)
        self.master.grid_rowconfigure(0, weight=1)
        style = ttk.Style(self.master)
        style.configure("Placeholder.TEntry", foreground="#d5d5d5")
        self.master.title("Query thông tin sản phẩm")
        self.savedKw = str(Path.home()) + os.path.sep + "savedkw.txt"
        self.master_data = {}
        self.selected_sheets_data = []
        self.data_to_fill = []
        self.menubar_items = ["File", "Xem", "Công cụ", "Giúp đỡ"]
        self.sheet = None
        self.gspread_sheet = None
        self.url_input = None
        self.sheet_list = []
        self.sheet_titles = []
        self.highlighted_index = []
        # self.url_gsheet = "https://docs.google.com/spreadsheets/d/10oJamLk0Bj4ffcDbnu9-96-dn7Tf7TM0EnJ2-emSp9c/edit#gid=1900586655"
        self.url_gsheet = "Reason Code CB"
        self.error_load_sheet = False
        self.current_words = []
        self.toggle_theme = IntVar()
        self.toggle_theme.set(0)
        self.toggle_compact = IntVar()
        self.toggle_compact.set(0)
        self.logging = []
        self.current_log = []
        self.area_filter_value = IntVar()
        self.sheet_filter_value = IntVar()
        self.create_widgets()

    def get_data_to_fill(self, selected_sheets):
        for selected_sheet in selected_sheets:
            self.selected_sheets_data.append(self.master_data[selected_sheet])
            self.sheet_titles.append(self.master_data[selected_sheet][0])
        for each_sheet in self.selected_sheets_data:
            self.data_to_fill = self.data_to_fill + each_sheet

    def get_gsheet_value(self, gsheet_url):
        scope = [
            "https://spreadsheets.google.com/feeds",
            "https://www.googleapis.com/auth/spreadsheets",
            "https://www.googleapis.com/auth/drive.file",
            "https://www.googleapis.com/auth/drive"
        ]
        creds = ServiceAccountCredentials.from_json_keyfile_name(
            "creds.json", scope)
        # creds = ServiceAccountCredentials.from_json_keyfile_dict(creds_dict, scope)
        self.data_to_fill = []
        self.error_load_sheet = False
        try:
            client = gspread.authorize(creds)
            if "http" in gsheet_url:
                self.gspread_sheet = client.open_by_url(gsheet_url)
            else:
                self.gspread_sheet = client.open(gsheet_url)
            worksheets = self.gspread_sheet.worksheets()
            for worksheet in worksheets:
                worksheet_name = worksheet.title
                worksheet_values = self.gspread_sheet.worksheet(
                    worksheet_name).get_all_values()
                self.sheet_list.append(worksheet_name)
                self.master_data[worksheet_name] = worksheet_values
            self.get_data_to_fill(self.sheet_list)
        except (ServerNotFoundError, Exception) as e:
            self.error_load_sheet = True
            self.cell_value_label.configure(text="Có lỗi xảy ra, hãy thử lại",
                                            anchor="w")
            self.data_to_fill = [[]]
        except SpreadsheetNotFound as notfound:
            self.error_load_sheet = True
            self.cell_value_label.configure(
                text="File spreadsheet không tồn tại", anchor="w")
            self.data_to_fill = [[]]

    class AutocompleteEntry(ttk.Entry):
        def __init__(self, autocompleteList, placeholder, *args, **kwargs):

            # Custom matches function
            if 'matchesFunction' in kwargs:
                self.matchesFunction = kwargs['matchesFunction']
                del kwargs['matchesFunction']
            else:

                def matches(fieldValue, acListEntry):
                    pattern = re.compile('.*' + re.escape(fieldValue) + '.*',
                                         re.IGNORECASE)
                    return re.match(pattern, acListEntry)

                self.matchesFunction = matches

            ttk.Entry.__init__(self,
                               *args,
                               style="Placeholder.TEntry",
                               **kwargs)
            self.autocompleteList = autocompleteList
            self.placeholder = placeholder
            self.focus()
            self.insert("0", self.placeholder)
            self.bind("<FocusIn>", self.clear_placeholder)
            self.bind("<FocusOut>", self.add_placeholder)

            self.var = self["textvariable"]
            if self.var == '':
                self.var = self["textvariable"] = StringVar()

            self.var.trace('w', self.changed)
            self.bind("<Right>", self.selection)
            self.bind("<Up>", self.moveUp)
            self.bind("<Down>", self.moveDown)
            self.bind("<Escape>", self.hide)

            self.listboxUp = False

        def clear_placeholder(self, e):
            if self["style"] == "Placeholder.TEntry":
                self.delete("0", "end")
                self["style"] = "TEntry"

        def add_placeholder(self, e):
            if not self.get():
                self.insert("0", self.placeholder)
                self["style"] = "Placeholder.TEntry"

        def changed(self, name, index, mode):
            if self.var.get() == '':
                if self.listboxUp:
                    self.listbox.destroy()
                    self.listboxUp = False
            else:
                words = self.comparison()
                self.listboxLength = len(words)
                if words:
                    if not self.listboxUp:
                        self.listbox = Listbox(width=self["width"],
                                               height=self.listboxLength)
                        self.listbox.bind("<<ListboxSelect>>", self.clickItem)
                        self.listbox.bind("<Right>", self.selection)
                        self.listbox.place(x=self.winfo_x(),
                                           y=self.winfo_y() +
                                           self.winfo_height())
                        self.listboxUp = True

                    self.listbox.delete(0, END)
                    for w in words:
                        self.listbox.insert(END, w)
                else:
                    if self.listboxUp:
                        self.listbox.destroy()
                        self.listboxUp = False

        def clickItem(self, event):
            if self.listboxUp:
                index = int(self.listbox.curselection()[0])
                self.var.set(self.listbox.get(index))
                self.listbox.destroy()
                self.listboxUp = False
                self.icursor(END)

        def selection(self, event):
            if self.listboxUp and self.listbox.curselection() != ():
                self.var.set(self.listbox.get(ACTIVE))
                self.listbox.destroy()
                self.listboxUp = False
                self.icursor(END)
            else:
                if self.listboxUp:
                    self.listbox.destroy()
                self.listboxUp = False
                self.icursor(END)

        def hide(self, event):
            if self.listboxUp:
                self.listbox.destroy()
                self.listboxUp = False

        def moveUp(self, event):
            if self.listboxUp:
                if self.listbox.curselection() == ():
                    index = '-2'
                else:
                    index = self.listbox.curselection()[-1]

                if index != END:
                    self.listbox.selection_clear(first=index)
                    index = str(int(index) - 1)

                    self.listbox.see(index)  # Scroll!
                    self.listbox.selection_set(first=index)
                    self.listbox.activate(index)

        def moveDown(self, event):
            if self.listboxUp:
                if self.listbox.curselection() == ():
                    index = '-1'
                else:
                    index = self.listbox.curselection()[-1]

                if index != END:
                    self.listbox.selection_clear(first=index)
                    index = str(int(index) + 1)

                    self.listbox.see(index)  # Scroll!
                    self.listbox.selection_set(first=index)
                    self.listbox.activate(index)

        def comparison(self):
            return [
                w for w in self.autocompleteList
                if self.matchesFunction(self.var.get(), w)
            ]

    def get_saved_keywords(self):
        try:
            with open(self.savedKw, "r", encoding="utf-8") as f:
                lines = f.readlines()
                for line in lines:
                    self.current_words.append(line.replace("\n", ""))
        except FileNotFoundError as fe:
            pass

    def save_keywords(self, keyword):
        if keyword not in self.current_words and keyword != "":
            with open(self.savedKw, "a", encoding="utf-8") as f:
                f.write(f"{keyword}\n")

    def search_keyword(self, event):
        self.search_bar.selection(event)
        kw = self.search_bar.get()
        result = []
        titles = []
        for each_sheet in self.selected_sheets_data:
            search_result = [
                row for row in each_sheet if kw.lower() in str(row).lower()
            ]
            if len(search_result) > 0:
                search_result.insert(0, each_sheet[0])
                titles.append(each_sheet[0])
            # search_result = list(set(search_result))
            result = result + search_result
        self.sheet.set_sheet_data(result, reset_col_positions=False)
        self.dehighlight_current_titles()
        self.highlight_sheet_title(result, titles)
        if kw != "":
            self.save_keywords(kw)
            log_output = "Đã tìm từ khóa: {}\n".format(kw)
            self.logging.append(log_output)
            if len(result) > 0 and kw not in self.current_words:
                self.current_words.append(kw)

    def highlight_sheet_title(self, current_data, titles):
        for index, value in enumerate(current_data):
            for i in titles:
                if i == value:
                    for i in range(len(i)):
                        self.sheet.highlight_cells(row=index,
                                                   column=i,
                                                   bg="#ed4337",
                                                   fg="white")
            self.highlighted_index.append(index)
        self.sheet.refresh()

    def dehighlight_current_titles(self, indexes):
        for r in self.highlighted_index:
            for c in range(50):
                self.sheet.dehighlight_cells(row=r, column=c)
        self.sheet.refresh()

    def load_data(self):
        self.sheet.set_sheet_data([[]], reset_col_positions=True)
        for i in self.menubar_items:
            self.menubar.entryconfig(i, state="disabled")
        self.cell_value_label.configure(text="Đang tải dữ liệu file ...",
                                        anchor="w")
        self.get_gsheet_value(self.url_gsheet)
        self.toggle_compact.set(0)
        self.sheet.set_sheet_data(self.data_to_fill, reset_col_positions=True)
        if not self.error_load_sheet:
            self.cell_value_label.configure(text="---", anchor="w")
        for i in self.menubar_items:
            self.menubar.entryconfig(i, state="normal")
        self.highlight_sheet_title(self.data_to_fill, self.sheet_titles)

    def load_data_in_thread(self):
        t = Thread(target=self.load_data)
        t.start()

    def cell_select(self, response):
        self.cell_value_label.config(
            text=self.sheet.get_cell_data(response[1], response[2]))

    def load_another_gsheet(self):
        self.load_new_wd = Toplevel()
        self.load_new_wd.title("Nhập tên hoặc url của spreadsheet")
        self.load_new_wd.grab_set()
        self.load_new_wd.resizable(False, False)
        self.load_new_wd.grid_columnconfigure(0, weight=1)
        self.load_new_wd.grid_rowconfigure(0, weight=1)
        sub_frame = Frame(self.load_new_wd)
        sub_frame.grid(row=0, column=0, sticky="nsew", padx=1, pady=1)

        self.url_input = ttk.Entry(sub_frame, width=100)
        self.url_input.focus()
        self.url_input.grid(row=0,
                            column=0,
                            ipady=5,
                            sticky="we",
                            padx=5,
                            pady=5)
        self.url_input.bind("<Return>", self.get_new_gsheet_data)

        sub_frame.grid_columnconfigure(0, weight=1)
        sub_frame.grid_rowconfigure(1, weight=1)

    def get_new_gsheet_data(self, event):
        if self.url_gsheet.strip() != "":
            self.url_gsheet = self.url_input.get()
            self.load_new_wd.destroy()
            self.load_data_in_thread()

    def switch_theme(self):
        mode = self.toggle_theme.get()
        if mode == 0:
            self.sheet.change_theme("light")
        else:
            self.sheet.change_theme("dark")

    def switch_compact(self):
        mode = self.toggle_compact.get()
        len_shd = len(self.data_to_fill)
        if mode == 0:
            self.sheet.set_column_widths([120 for c in range(len_shd)])
        else:
            self.sheet.set_column_widths([30 for c in range(len_shd)])
        self.sheet.refresh()

    def filter_sheet(self):
        self.filter_wd = Toplevel()
        self.filter_wd.title("Filter dữ liệu")
        self.filter_wd.maxsize(400, 200)
        self.filter_wd.grab_set()
        self.filter_wd.grid_columnconfigure(0, weight=1)
        self.filter_wd.grid_rowconfigure(0, weight=1)
        nb = ttk.Notebook(self.filter_wd)
        nb.grid(row=0, column=0, sticky="nswe")
        area_filter = Frame(self.filter_wd, padx=1, pady=1)
        sheet_filter = Frame(self.filter_wd, padx=1, pady=1)
        area_filter.grid(row=0, column=0, sticky="nsew", padx=1, pady=1)
        sheet_filter.grid(row=0, column=0, sticky="nsew", padx=1, pady=1)

        nb.add(area_filter, text="Filter theo vùng")
        nb.add(sheet_filter, text="Filter theo sheet")

        radiobtn1 = Radiobutton(area_filter,
                                text="Shopee C2C",
                                variable=self.area_filter_value,
                                value=1)
        radiobtn1.grid(row=0, column=0)
        radiobtn2 = Radiobutton(area_filter,
                                text="Shopee Mall",
                                variable=self.area_filter_value,
                                value=2)
        radiobtn2.grid(row=1, column=0)
        radiobtn3 = Radiobutton(area_filter,
                                text="Note",
                                variable=self.area_filter_value,
                                value=3)
        radiobtn3.grid(row=1, column=0)
        for sheet_name in self.sheet_list:
            ttk.Checkbutton(sheet_filter, text=sheet_name).grid(sticky="w")

        nb.grid_columnconfigure(0, weight=1)
        nb.grid_rowconfigure(0, weight=1)

        sheet_filter.grid_columnconfigure(0, weight=1)
        sheet_filter.grid_rowconfigure(0, weight=1)

    # def get_logging(self):
    #     if len(self.current_log) < len(self.logging):
    #         self.log_entry.config(state=NORMAL)
    #         self.log_entry.insert(INSERT, self.logging[len(self.logging) - 1])
    #         self.log_entry.see(END)
    #         self.log_entry.config(state=DISABLED)
    #         self.current_log.append(self.logging[len(self.logging) - 1])
    #     self.log_entry.after(1000, self.get_logging)

    def open_console(self):
        self.console_wd = Toplevel()
        self.console_wd.title("Console log")
        # self.console_wd.grab_set()
        self.console_wd.minsize(500, 200)
        self.console_wd.resizable(False, False)
        self.console_wd.grid_columnconfigure(0, weight=1)
        self.console_wd.grid_rowconfigure(0, weight=1)
        sub_frame = Frame(self.console_wd)
        sub_frame.grid(row=0, column=0, sticky="nsew", padx=1, pady=1)
        self.log_entry = ScrolledText(sub_frame)
        self.log_entry.grid(row=0, column=0, sticky="nswe", padx=5, pady=5)
        self.log_entry.insert(
            INSERT,
            "Console log của app được mở vào lúc {}\n\n".format(self.now))
        # self.get_logging()
        sub_frame.grid_columnconfigure(0, weight=1)
        sub_frame.grid_rowconfigure(0, weight=1)

    def create_menu_bar(self):
        self.menubar = Menu(self.master)

        filemenu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label=self.menubar_items[0], menu=filemenu)
        filemenu.add_command(label="Reload dữ liệu",
                             command=self.load_data_in_thread)
        filemenu.add_command(label="Thoát", command=self.master.quit)

        viewmenu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label=self.menubar_items[1], menu=viewmenu)
        viewmenu.add_command(label="Filter dữ liệu", command=self.filter_sheet)
        viewmenu.add_checkbutton(label="Đổi theme trắng/đen",
                                 variable=self.toggle_theme,
                                 command=self.switch_theme)
        viewmenu.add_checkbutton(label="Chế độ compact",
                                 variable=self.toggle_compact,
                                 command=self.switch_compact)

        toolmenu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label=self.menubar_items[2], menu=toolmenu)
        toolmenu.add_command(label="Load dữ liệu khác",
                             command=self.load_another_gsheet)

        helpmenu = Menu(self.menubar, tearoff=0)
        self.menubar.add_cascade(label=self.menubar_items[3], menu=helpmenu)
        helpmenu.add_command(label="Console log", command=self.open_console)

        self.master.config(menu=self.menubar)

    def create_widgets(self):
        self.get_saved_keywords()

        #--------CREATE MENU BAR----------
        self.create_menu_bar()

        #--------CREATE NAVIGATION FRAME----------
        self.main_frame = Frame(self.master)
        self.main_frame.grid(row=0, column=0, sticky="nsew", padx=1, pady=1)

        #--------CREATE SEARCH BAR AND SEARCH BUTTON WIDGET----------
        self.search_bar = self.AutocompleteEntry(self.current_words,
                                                 "Nhập từ khóa cần tìm",
                                                 self.main_frame)
        self.search_bar.grid(row=0,
                             column=0,
                             ipady=5,
                             sticky="we",
                             padx=5,
                             pady=5)
        self.search_bar.bind("<Return>", self.search_keyword)

        #--------CREATE CELL DETAIL VALUE LABEL----------
        self.cell_value_label = Label(self.main_frame, text="---", anchor="w")
        self.cell_value_label.grid(row=1, column=0, padx=5, sticky="nw")

        self.main_frame.grid_columnconfigure(0, weight=1)
        self.main_frame.grid_rowconfigure(2, weight=1)

        #--------CREATE SHEET WIDGET----------
        self.sheet = Sheet(self.main_frame, align="w")
        self.sheet.enable_bindings(
            ("single_select", "drag_select", "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", "rc_select",
             "copy", "paste", "undo"))
        self.sheet.extra_bindings([("cell_select", self.cell_select)])
        self.sheet.grid(row=2, column=0, sticky="nswe", padx=5, pady=5)
        self.load_data_in_thread()
Ejemplo n.º 29
0
    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,
            page_up_down_select_row=True,
            #empty_vertical = 0,
            column_width=120,
            startup_select=(0, 1, "rows"),
            #row_height = "4",
            #default_row_index = "numbers",
            #default_header = "both",
            #empty_horizontal = 0,
            #show_vertical_grid = False,
            #show_horizontal_grid = False,
            #auto_resize_default_row_index = False,
            #header_height = "3",
            #row_index_width = 100,
            #align = "center",
            #header_align = "w",
            #row_index_align = "w",
            data=[[
                f"Row {r}, Column {c}\nnewline1\nnewline2" for c in range(50)
            ] for r in range(1000)],  #to set sheet data at startup
            #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 = "light green",
            #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.disable_bindings() #uses the same strings
        #self.sheet.enable_bindings()

        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("light green")

        # __________ 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")
Ejemplo n.º 30
0
class EmailTab(tk.Frame):

    def __init__(self, master):
        self.emailHandler = EmailSheetHandler(FILENAME)
        tk.Frame.__init__(self, master)
        self.grid_columnconfigure(0, weight = 1)
        self.grid_rowconfigure(0, weight = 1)
        self.frame = ttk.Frame(self, height=450, width=400)
        self.frame.grid_columnconfigure(0, weight = 1)
        self.frame.grid_rowconfigure(0, weight = 1)
        self.sheet = Sheet(self.frame,
                           page_up_down_select_row = True,
                           #empty_vertical = 0,
                           column_width = 300,
                           startup_select = (0,1,"rows"),
                           data=self.populate_sheet(),
                            total_columns = 3, #if you want to set empty sheet dimensions at startup
                            height = 450, #height and width arguments are optional
                            width = 600 #For full startup arguments see DOCUMENTATION.md
                            )
        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",
                                         "arrowkeys",
                                         "row_height_resize",
                                         "double_click_row_resize",
                                         "right_click_popup_menu",
                                         "rc_select",
                                         "edit_cell"))

        self.sheet.extra_bindings("end_edit_cell", self.end_edit_cell)

        self.frame.grid(row = 0, column = 0, sticky = "nsw")
        self.sheet.grid(row = 0, column = 0, sticky = "nw")

        self.email_button_frame = ttk.Frame(self.frame, padding=(3,3,12,12), borderwidth=5, width=100, heigh=200)
        self.email_add_button = tk.Button(self.email_button_frame, text="Add email", command=self.add_email)
        self.email_merge_button = tk.Button(self.email_button_frame, text="Merge email (with file)", command=self.merge_mails)
        self.email_update_button = tk.Button(self.email_button_frame, text="Update file with table", command=self.email_file_update )
        self.email_button_frame.grid(row=0, column=2, sticky="nswe")
        self.email_add_button.grid(row=1, column=1)
        self.email_merge_button.grid(row=2, column=1)
        self.email_update_button.grid(row=3, column=1)

        # print(self.sheet.get_sheet_data(get_index=0, get_header=0))

    def end_edit_cell(self, event):
        print(event)
        print(self.sheet.get_cell_data(event[0], event[1    ]))

    def add_email(self):
        package = []
        AddDialogue(package, "Add Email", "Add Email")
        print("Rsult: ", package)
        self.emailHandler.append_to_file(package)
        self.update_table()
        
    def email_file_update(self):
        self.emailHandler.update_email_file(self.sheet.get_sheet_data())

    def update_table(self):
        data = self.populate_sheet()
        self.sheet.set_sheet_data(data)
        
    def merge_mails(self):
        file = filedialog.askopenfile().name
        print(file)
        # TODO: handle merge
        print(self.emailHandler.validate(file))

    def populate_sheet(self):
        self.data = []
        try:
            with open(FILENAME, 'r') as f:
                L = f.readlines()
            self.data = [i.strip("\n").split(",") for i in L]
            # for i in self.data: i.append("50")
            return self.data
        except FileNotFoundError:
            return self.data