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")
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)])
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 __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")
def __init__(self, parent, C): tk.Frame.__init__(self, parent) self.C = C self.parent_cols = [] self.rowlen = 0 self.grid_rowconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) self.grid_columnconfigure(1, weight=1) self.flattened_choices = flattened_base_ids_choices( self, command=self.flattened_mode_toggle) self.flattened_choices.grid(row=1, column=0, pady=(0, 5), sticky="wnse") self.flattened_selector = flattened_column_selector(self) self.selector = id_and_parent_column_selector(self) self.selector.grid(row=1, column=0, sticky="wnse") self.sheetdisplay = Sheet(self, theme=self.C.theme, header_font=("Calibri", 13, "normal"), outline_thickness=1) self.sheetdisplay.enable_bindings("enable_all") self.sheetdisplay.extra_bindings([ ("row_index_drag_drop", self.drag_row), ("column_header_drag_drop", self.drag_col), ("ctrl_x", self.reset_selectors), ("delete_key", self.reset_selectors), ("rc_delete_column", self.reset_selectors), ("rc_delete_row", self.reset_selectors), ("rc_insert_column", self.reset_selectors), ("rc_insert_row", self.reset_selectors), ("ctrl_v", self.reset_selectors), ("ctrl_z", self.reset_selectors), ("edit_cell", self.edit_cell_in_sheet) ]) self.sheetdisplay.grid(row=0, column=1, rowspan=3, sticky="nswe") self.cont_ = button(self, text="Build tree with selections ", style="TF.Std.TButton", command=self.try_to_build_tree) self.cont_.grid(row=2, column=0, sticky="wns", padx=10, pady=(10, 50)) self.cont_.config(width=40) self.flattened_selector.grid(row=0, column=0, pady=(0, 9), sticky="nswe") self.selector.grid_forget() self.selector.grid(row=0, column=0, sticky="nswe") self.flattened_selector.grid_forget()
def __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)
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)
def TableMultiPlayer(subRoot): data = RezultatiFetch.listaRezultataMP() table = Sheet(subRoot, height=600, width=600, data=data, headers=headers, show_x_scrollbar=False) return table
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()
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()
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)
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()
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 _________________________ """ """_____________________________________________________________"""
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()
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()
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())
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()
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()
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)
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()
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)
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()
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
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()
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")
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