def __build_gui(self): self.window = tk.Tk() self.window.title("Query Seatfinder") self.gui_pane = tk.Frame(self.window) self.gui_pane.rowconfigure(0, weight=1) self.gui_pane.columnconfigure(0, weight=1) self.label = tk.Label(self.window, text="Select a period of time for the query") self.label.pack(padx=10, pady=10, side=tk.TOP, anchor=tk.W) self.button_send_query = tk.Button(self.gui_pane, text='OK', command=self.button_pressed) self.__interval_selection() self.label_from = tk.Label(self.gui_pane, text="from:") self.label_to = tk.Label(self.gui_pane, text="to:") self.dateentry_from = tkcalendar.DateEntry(self.gui_pane, width=12, background='darkblue', foreground='white', borderwidth=2) self.dateentry_to = tkcalendar.DateEntry(self.gui_pane, width=12, background='darkblue', foreground='white', borderwidth=2) self.timeentry_from = mw.TimeEntry(self.gui_pane) self.timeentry_to = mw.TimeEntry(self.gui_pane) self.progressbar = ttk.Progressbar(self.window, mode='determinate') self.progressbar["maximum"] = 100 self.__mean_option_selection() self.gui_pane.pack(fill=tk.X, expand=0) self.progressbar.pack(padx=10, pady=10, side=tk.BOTTOM, fill=tk.X, expand=0) self.timeentry_from.set_time(datetime(2012, 1, 1)) self.timeentry_to.set_time(datetime(2012, 1, 1)) self.dateentry_from.set_date(self.dateentry_to.get_date() - dt.timedelta(days=1)) self.__layout() for widget in self.gui_pane.winfo_children(): self.__change_font_size(widget, 12) self.__change_font_size(self.label, 12) self.window.mainloop()
def edit_dates(self): pop_up = Toplevel(background=self.controller.bg) page = self.controller.get_page("Em_App") settings = page.employee.employee_sett.copy() ttk.Label(pop_up, text="Aktualnie").grid(row=0, column=1, pady=5) ttk.Label(pop_up, text="Nowe wartości").grid(row=0, column=2, pady=5) ttk.Label(pop_up, text="Data zatrudnienia").grid( row=1, column=0, pady=5) ttk.Label(pop_up, text=settings["hire_date"]).grid( row=1, column=1, pady=5) if settings["fire_date"] != "": ttk.Label(pop_up, text="Data zwolnienia").grid( row=2, column=0, pady=5) ttk.Label(pop_up, text=settings["fire_date"]).grid( row=2, column=1, pady=5) fire_cal = tkcalendar.DateEntry( pop_up, borderwidth=2, year=datetime.datetime.now().year) fire_date = datetime.datetime.strptime( settings["fire_date"], "%d/%m/%Y") fire_cal.set_date(fire_date) fire_cal.grid(row=2, column=2, pady=5) hire_date = datetime.datetime.strptime( settings["hire_date"], "%d/%m/%Y") hire_cal = tkcalendar.DateEntry( pop_up, borderwidth=2, year=datetime.datetime.now().year) hire_cal.set_date(hire_date) hire_cal.grid(row=1, column=2, pady=5) def save(): name = page.employee.name.get() if "[Z]" in name: name = name.replace("[Z]", "_") with open("./Pracownicy/" + name + "/" + "settings.json", "r") as f: data = json.load(f) data["hire_date"] = hire_cal.get_date().strftime("%d/%m/%Y") if settings["fire_date"] != "": data["fire_date"] = fire_cal.get_date().strftime("%d/%m/%Y") with open("./Pracownicy/" + name + "/" + "settings.json", "w") as f: json.dump(data, f, indent=4, ensure_ascii=False) page.employee.read_data() page.controller.set_status("Zmieniono daty pracownika: " + name) pop_up.destroy() save = ttk.Button(pop_up, text="Zapisz", command=save) save.grid(row=3, column=0, columnspan=3, sticky=NSEW) x = self.controller.winfo_x() y = self.controller.winfo_y() pop_up.geometry( "+%d+%d" % (x + self.controller.winfo_reqwidth()/2 - pop_up.winfo_width()/2, y + 200))
def __init__(self, date_from, date_to): super().__init__() self._date_to = date_to self._date_from = date_from label = tk.Label(self, text="From") label.pack() self._cal_from = tkcalendar.DateEntry(self) self._cal_from.pack() label = tk.Label(self, text="To") label.pack() self._cal_to = tkcalendar.DateEntry(self) self._cal_to.pack() b = tk.Button(self, text="Confirm", command=self._confirm) b.pack()
def __createWidget(self): if self.innerFrame is not None: self.innerFrame.destroy() self.innerFrame = tk.Frame(self) self.dateSelector = tk.StringVar() dateEntry = tkc.DateEntry(self.innerFrame, textvariable=self.dateSelector, maxdate=dt.datetime.today()) dateEntry.grid(row=0, column=0, columnspan=2) dateEntry.bind('<<DateEntrySelected>>', self.setDate) self.recordFrame = None self.setDate() self.projectSelector = tk.StringVar() self.nameMap = self.hourTracker.getProjectNames() self.projectNames = [ project.name for project in sorted(self.nameMap.values(), key=operator.attrgetter('sortIdx')) ] if len(self.nameMap) > 0: self.projectSelector.set(self.projectNames[self.projectNameIdx]) tk.OptionMenu(self.innerFrame, self.projectSelector, *tuple(self.projectNames)).grid(row=2, column=0) button = tk.Button(self.innerFrame, text='Record', command=self.recordActivity) button.grid(row=2, column=1) button.bind("<Up>", self.__changeProjectUp) button.bind("<Down>", self.__changeProjectDown) self.innerFrame.grid(row=0, column=0)
def __init__(self, master, *args, **kwargs): self.master = master self.startlabel = tk.Label(self.master, text='Start Date') self.endlabel = tk.Label(self.master, text='End Date') self.startdate = tkcalendar.DateEntry(self.master) self.enddate = tkcalendar.DateEntry(self.master) self.startdate.config(firstweekday='sunday', showweeknumbers='false', weekendbackground='white', weekendforeground='black', date_pattern='mm/dd/yy') self.enddate.config(firstweekday='sunday', showweeknumbers='false', weekendbackground='white', weekendforeground='black', date_pattern='mm/dd/yy') self.startlabel.grid(row=0, column=3) self.endlabel.grid(row=0, column=4) self.startdate.grid(row=1, column=3, padx=5) self.enddate.grid(row=1, column=4, padx=(5, 10))
def onWindowFinalize(self, window: sg.Window) -> None: today = date.today() # There are no normal calendar in pySimpleGUI, so adding it by tkinter self.from_calendar = tkcalendar.DateEntry(window.FindElement('_db_from_frame_').Widget, width=10, year=today.year, month=today.month, day=today.day, date_pattern='dd/mm/Y', borderwidth=2) self.till_calendar = tkcalendar.DateEntry(window.FindElement('_db_till_frame_').Widget, width=10, year=today.year, month=today.month, day=today.day, date_pattern='dd/mm/Y', borderwidth=2) self.from_calendar.pack() self.till_calendar.pack() self.initLiChessClient()
def main(): root = tk.Tk() style = ttk.Style(root) style.theme_use('clam') test_frame = ttk.Frame(root) test_frame.pack(side='top', fill='both', expand=True) test_date_entry = tkc.DateEntry(test_frame, locale='en_US') test_date_entry.pack(padx=10, pady=10) test_date_entry._top_cal.overrideredirect(False) root.after(100, test_date_entry.drop_down) root.mainloop()
def __init__(self, window, db): self.window = window self.hour_list = [] self.date_list = [] self.weekHeader = [] self.hour_list_display = [] self.db = db self.initial_date = datetime.strftime(datetime.now(), '%Y-%m-%d') # get_emp_list is from clockOn module. Gets all employees and appends it to employee_list self.employee_list = [] self.get_emp_list() self.window.columnconfigure(0, weight=1) self.window.rowconfigure(0, weight=1) self.window.rowconfigure(1, weight=5) self.top_frame = tkinter.Frame(self.window) self.top_frame.grid(row=0, column=0, sticky='nsew') self.top_frame.config(borderwidth=1, relief='solid') # Configure column/row for top_frame self.top_frame.columnconfigure(0, weight=1) self.top_frame.columnconfigure(1, weight=3) self.top_frame.columnconfigure(2, weight=1) self.top_frame.rowconfigure(0, weight=1) self.display_frame = tkinter.Frame(self.window) self.display_frame.grid(row=1, column=0, sticky='nsew') # Configure column/row for display_frame self.display_frame.columnconfigure(0, weight=2) self.display_frame.columnconfigure(1, weight=2) self.display_frame.columnconfigure(2, weight=2) self.display_frame.columnconfigure(3, weight=2) self.display_frame.columnconfigure(4, weight=2) self.display_frame.columnconfigure(5, weight=2) self.display_frame.columnconfigure(6, weight=2) self.display_frame.columnconfigure(7, weight=2) self.display_frame.columnconfigure(8, weight=2) self.display_frame.rowconfigure(0, weight=1) self.datepicker = tkinter.Entry(self.top_frame) self.datepicker.grid(row=0, column=1, sticky='w') self.calender = tkcalendar.DateEntry(self.datepicker, locale='en_AU', date_pattern='y-mm-dd') self.calender.grid(row=0, column=1) self.calender.bind('<<DateEntrySelected>>', self.date_select) self.generate_headers(self.display_frame) self.generate_hours(self.display_frame)
def __init__(self, parent, controller): HomeFrame.__init__(self, parent, controller) self.button_home.config(command=self.go_home) self.controller = controller # Back button self.button_back = tk.Button(self, text='<--Back', command=self.go_back) self.button_back.grid(row=2, column=1, sticky='w') # Number of games label self.label_num_games = tk.Label(self, text='Games / Player') self.label_num_games.grid(row=3, column=2, sticky='e') # Number of games spinbox self.spinbox_num_games = tk.Spinbox(self, from_=0, to_=1000, width=5) self.spinbox_num_games.grid(row=3, column=3, sticky='w', pady=5, padx=5) # Season start date label self.label_start_date = tk.Label(self, text='Start Date') self.label_start_date.grid(row=4, column=2, sticky='e') # Season start date entry self.date_entry_start_date = tkcalendar.DateEntry( self, firstweekday='sunday', showweeknumbers=False, date_pattern='y-mm-dd') self.date_entry_start_date.grid(row=4, column=3, sticky='w', pady=5, padx=5) # Players label self.label_players = tk.Label(self, text='Players') self.label_players.grid(row=5, column=2, sticky='e') # Players listbox self.listbox_players = tk.Listbox(self, selectmode='multiple', width=30) self.listbox_players.grid(row=5, column=3, sticky='w', pady=5, padx=5) self.controller.get_db().register_insert_callback( Table.PLAYER, self.update_player_listbox) # Submit button self.button_submit = tk.Button(self, text='Submit', command=self.submit_new_season) self.button_submit.grid(row=6, column=3, sticky='w', padx=5, pady=5)
def __init__(self, window, db): self.db = db self.employee_list = [] self.window = window self.get_emp_list() today = datetime.strptime(get_current_date(), '%Y-%m-%d') self.selected_date = datetime.strftime(datetime.now(), '%Y-%m-%d') # USER SELECTBOX emp_options = tkinter.ttk.Combobox(window, values=self.employee_list, state='readonly') emp_options.current(0) emp_options.grid(row=1, column=1, columnspan=2, sticky='nw') emp_options.bind('<<ComboboxSelected>>', self.employee_select) self.selected_employee = emp_options.get() # DATE SELECT datepicker = tkinter.Entry(window) datepicker.grid(row=2, column=1, sticky='nw') calender = tkcalendar.DateEntry(datepicker, locale='en_AU', date_pattern='y-mm-dd', maxdate=today) calender.grid(row=0, column=1) calender.bind('<<DateEntrySelected>>', self.date_select) # CLOCK ON / OFF LABEL clock_on_label = tkinter.Label(window, text='Clock On ') clock_on_label.grid(row=3, column=1, sticky='nw') clock_off_label = tkinter.Label(window, text='Clock Off ') clock_off_label.grid(row=4, column=1, sticky='nw') # CLOCK ON / OFF TIME DISPLAY self.clock_on_time = tkinter.Button(window, text='None', command=self.set_clock_on) self.clock_on_time.grid(row=3, column=2, sticky='nw') self.clock_off_time = tkinter.Button(window, text='None', command=self.set_clock_off) self.clock_off_time.grid(row=4, column=2, sticky='nw') self.update_time()
def __init__(self, parent_frame, date_value=None, time_type=None, employee=None, time_value=None, user_input=None): super().__init__(parent_frame) # CHOSEN PASSWORD TO ACCESS ALTER CONTROLS # since this app is only using a local database, the password is only saved on script. self._password = '******' # INITIALIZE VARIABLES self.parent_frame = parent_frame self.time_type = time_type self.employee = employee self.user_input = user_input # INITIALIZE EMPLOYEE COMBOBOX self.emp_combobox = ttk.Combobox(self.parent_frame, state='readonly') self.emp_combobox.grid() # INITIALIZE DATE SELECT self.calendar = tkcalendar.DateEntry(self.parent_frame, date_pattern='y-mm-dd', state='readonly') self.calendar.grid(sticky='ew') self.date_value = self.calendar.get() # INITIALIZE BUTTON FOR CREATING NEW EMPLOYEE self.create_emp_button = tk.Button(self.parent_frame, text='CREATE EMPLOYEE') self.create_emp_button.grid(sticky='ew') # INITIALIZE BUTTONS THAT DISPLAY CLOCK ON AND OFF TIMES self.on_button = tk.Button(self.parent_frame, text='CLOCK ON TIME') self.off_button = tk.Button(self.parent_frame, text='CLOCK OFF TIME') self.on_button.grid(sticky='ew') self.off_button.grid(sticky='ew')
def create(self, parent): self.dateEntry = tkc.DateEntry(parent, textvariable=self.dateSelector, maxdate=self.time) self.dateEntry.grid(row=0, column=0, columnspan=2) hr = tk.Spinbox(parent, from_=-1, to=24, textvariable=self.hrSelector, width=5) hr.grid(row=1, column=0) min_ = tk.Spinbox(parent, from_=-1, to=60, textvariable=self.minSelector, width=5, command=self.rotateMin) min_.grid(row=1, column=1) if len(self.projects) > 0: self.projectSelector.set(self.projectNames[self.projectNameIdx]) tk.OptionMenu(parent, self.projectSelector, *tuple(self.projectNames))\ .grid(row=2, column=0, columnspan=2)
def layout(self): tk.Grid.rowconfigure(self, 1, weight=1) for c in range(6): tk.Grid.columnconfigure(self, c, weight=1) # Create drop-down to select term self.term_str.trace('w', self.update_course_menu) self.term_menu = tk.OptionMenu(self, self.term_str, None) self.term_menu.grid(column=0, row=0, columnspan=2) # Create drop-down to select course self.course_id.trace_add('write', self.update_student_list) # self.course_str.trace('w', self.update_student_list) self.course_menu = tk.OptionMenu(self, self.course_str, None) self.course_menu.grid(column=2, row=0, columnspan=2) # Create date-picker self.date_picker = tkc.DateEntry(self) self.date_picker.grid(column=5, row=0) self.date = self.date_picker.get_date() self.date_picker.bind('<<DateEntrySelected>>', self.update_date) # Create tree view to show students enrolled self.tree_view = ttk.Treeview(self, columns=['students', 'present'], show='headings') self.tree_view.heading(0, text='Students') self.tree_view.heading(1, text='Present') self.tree_view.grid(column=0, row=1, columnspan=6, sticky=tk.NSEW) not_present_button = tk.Button(self, text='Not Present', command=self.mark_not_present) not_present_button.grid(row=2, column=0, columnspan=3, sticky=tk.NSEW) present_button = tk.Button(self, text='Present', command=self.mark_present) present_button.grid(row=2, column=3, columnspan=3, sticky=tk.NSEW)
width=50, height=3) search_border.place(relx=0.519, rely=0.6) search_option = tk.StringVar() search_option.set(companies[0]) search_menu = tk.OptionMenu(root, search_option, *companies) search_menu.config(relief="groove") search_menu.place(relx=0.535, rely=0.613) search_cal = tkcalendar.DateEntry( root, selectmode="day", year=2005, month=1, day=3, locale='en_US', date_pattern='MM/dd/yyyy', mindate=tkcalendar.calendar_.calendar.datetime.date(2005, 1, 3), maxdate=tkcalendar.calendar_.calendar.datetime.date(2020, 11, 27)) search_cal.place(relx=0.632, rely=0.619) search_button = tk.Button(root, text="Search") search_button.config(width=10, bg="light steel blue", relief="groove", command=search) search_button.place(relx=0.75, rely=0.616) """ --- Companies --- """ company_label = tk.Label(root, text="COMPANIES")
sticky="W") svt = tk.StringVar() titre = tk.Entry(cadre2, textvariable=svt, width=50, font="Arial", highlightthickness=1) titre.grid(row=1, column=0, columnspan=4) tk.Label(cadre2, text="Start Date: ", font="Arial").grid(row=2, column=0, sticky="W") dated = cal.DateEntry(cadre2, date_pattern="dd/mm/Y", font="Arial", locale="fr_FR", borderwidth=1) dated.grid(row=2, column=1) tk.Label(cadre2, text="End Date: ", font="Arial").grid(row=2, column=2, sticky="W") datef = cal.DateEntry(cadre2, date_pattern="dd/mm/Y", font="Arial", locale="fr_FR", borderwidth=1) datef.grid(row=2, column=3, sticky="E") tk.Label(cadre2, text="Description: ", font="Arial").grid(row=3,
def __init__(self, master): self.master = master self.master.title("Mantaro SYS") self.master.geometry("400x400") pestañas = ttk.Notebook(self.master) tab1 = ttk.Frame(pestañas) tab2 = ttk.Frame(pestañas) pestañas.add(tab1, text="Recepcion Productos") pestañas.add(tab2, text="Detalle de Recepcion") pestañas.pack(expan=1, fill="both") #==================================== self.frame1 = ttk.Labelframe(tab1, text="Registro de Documentos", width=50) self.frame1.grid(row=1, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="Nro Documento").grid(row=0, column=0, padx=5, pady=5, sticky=tk.E) self.Id_Recepcion = ttk.Entry(self.frame1) self.Id_Recepcion.grid(row=0, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="Id Usuario").grid(row=1, column=0, padx=5, pady=5, sticky=tk.E) self.cmb_usuario = ttk.Combobox(self.frame1, width=25) self.cmb_usuario.grid(row=1, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="Proveedor").grid(row=2, column=0, padx=5, pady=5, sticky=tk.E) self.cmb_prov = ttk.Combobox(self.frame1, width=25) self.cmb_prov.grid(row=2, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="Tipo Documentos").grid(row=3, column=0, padx=5, pady=5, sticky=tk.E) self.cmb_tipo_doc = ttk.Combobox(self.frame1, width=15) self.cmb_tipo_doc['values'] = ("Factura", "Boleta") self.cmb_tipo_doc.grid(row=3, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="Elegir Fecha").grid(row=4, column=0, padx=5, pady=5, sticky=tk.E) self.fechaR = tkcalendar.DateEntry(self.frame1) self.fechaR.grid(row=4, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="SubTotal").grid(row=5, column=0, padx=5, pady=5, sticky=tk.E) self.subtotal = ttk.Entry(self.frame1) self.subtotal.grid(row=5, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="IGV").grid(row=6, column=0, padx=5, pady=5, sticky=tk.E) self.igv = ttk.Entry(self.frame1) self.igv.grid(row=6, column=1, padx=5, pady=5, sticky=tk.W) tk.Label(self.frame1, text="Total").grid(row=7, column=0, padx=5, pady=5, sticky=tk.E) self.total = ttk.Entry(self.frame1) self.total.grid(row=7, column=1, padx=5, pady=5, sticky=tk.W) ttk.Button(self.frame1, text="Agregar", command=self._AddDocs).grid(row=8, column=1, padx=5, pady=5, sticky=tk.W + tk.E) #================================================= self.frame2 = ttk.Labelframe(tab1, text="Ver Datos", width=200) self.frame2.grid(row=2, column=1, padx=5, pady=5, sticky=tk.W) self.tabla1 = ttk.Treeview(self.frame2, height=10, column=('#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8')) self.tabla1.grid(row=1, column=1, columnspan=2) self.tabla1.column('#1', width=100, minwidth=90) self.tabla1.column('#2', width=100, minwidth=90) self.tabla1.column('#3', width=100, minwidth=90) self.tabla1.column('#4', width=100, minwidth=90) self.tabla1.column('#5', width=100, minwidth=90) self.tabla1.column('#6', width=100, minwidth=90) self.tabla1.column('#7', width=100, minwidth=90) self.tabla1.column('#8', width=100, minwidth=90) self.tabla1['show'] = 'headings' self.tabla1.heading('#1', text="Id Doc", anchor=tk.W) self.tabla1.heading('#2', text="Usuario", anchor=tk.W) self.tabla1.heading('#3', text="Proveedor", anchor=tk.W) self.tabla1.heading('#4', text="Tipo Doc", anchor=tk.W) self.tabla1.heading('#5', text="Fecha", anchor=tk.W) self.tabla1.heading('#6', text="Subtotal", anchor=tk.W) self.tabla1.heading('#7', text="IGV", anchor=tk.W) self.tabla1.heading('#8', text="Total", anchor=tk.W) ttk.Button(self.frame2, text="Editar", command=self._EditDocs).grid(row=2, column=1, padx=3, pady=3, sticky=tk.W + tk.E) ttk.Button(self.frame2, text="Eliminar", command=self._DeleteDocs).grid(row=2, column=2, padx=3, pady=3, sticky=tk.W + tk.E) #====================================================== self.frame3 = ttk.Labelframe(tab2, text="Productos", width=80) self.frame3.grid(row=2, column=1, padx=3, pady=3, sticky=tk.NW) tk.Label(self.frame3, text="Codigo Ingreso").grid(row=0, column=0, padx=3, pady=3, sticky=tk.E) self.varCodigo = StringVar() self.CodVenta = ttk.Entry(self.frame3, textvariable=self.varCodigo, width=15, state='disabled') self.CodVenta.grid(row=0, column=1, padx=3, pady=3, sticky=tk.W) tk.Label(self.frame3, text="Codigo Recibo").grid(row=1, column=0, padx=3, pady=3, sticky=tk.E) self.cmb_nroRecibo = ttk.Combobox(self.frame3, width=25) self.cmb_nroRecibo.grid(row=1, column=1) #falta cargar values tk.Label(self.frame3, text="Codigo Producto").grid(row=2, column=0, padx=3, pady=3, sticky=tk.E) self.codProducto = ttk.Combobox(self.frame3, width=25) self.codProducto.grid(row=2, column=1) tk.Label(self.frame3, text="Nombre Producto").grid(row=3, column=0, padx=3, pady=3, sticky=tk.E) self.nombProducto = ttk.Entry(self.frame3) self.nombProducto.grid(row=3, column=1) tk.Label(self.frame3, text="Cantidad").grid(row=4, column=0, padx=3, pady=3, sticky=tk.E) self.spin_variable = DoubleVar() self.spin = ttk.Spinbox(self.frame3, from_=0, to=20, width=5, textvariable=self.spin_variable) self.spin.grid(row=4, column=1) tk.Label(self.frame3, text="Precio").grid(row=5, column=0, padx=3, pady=3, sticky=tk.E) self.precio = DoubleVar() self.precioProducto = ttk.Entry(self.frame3, textvariable=self.precio) self.precioProducto.grid(row=5, column=1) tk.Label(self.frame3, text="Total").grid(row=6, column=0, padx=3, pady=3, sticky=tk.E) self.total_precio_variable = DoubleVar() self.totalPrecio = ttk.Entry(self.frame3, textvariable=self.total_precio_variable) self.totalPrecio.grid(row=6, column=1) ttk.Button(self.frame3, text="Generar ID", command=self._codIngreso).grid(row=7, column=0, padx=3, pady=3) ttk.Button(self.frame3, text="Calcular", command=lambda: self._calcular(self.spin_variable.get( ), self.precio.get())).grid(row=7, column=1, padx=3, pady=3) ttk.Button(self.frame3, text="Agregar", command=self._agregar_tabla).grid(row=7, column=2, padx=3, pady=3) #====================================================== self.frame4 = ttk.Labelframe(tab2, text="Detalles", width=100) self.frame4.grid(row=3, column=1, padx=3, pady=3, sticky=tk.NW) self.tabla_detalles = ttk.Treeview(self.frame4, height=10, column=('#1', '#2', '#3', '#4', '#5', '#6', '#7')) self.tabla_detalles.grid(row=1, column=0) self.tabla_detalles.column("#1", width=100, minwidth=85) self.tabla_detalles.column("#2", width=100, minwidth=85) self.tabla_detalles.column("#3", width=100, minwidth=85) self.tabla_detalles.column("#4", width=100, minwidth=85) self.tabla_detalles.column("#5", width=100, minwidth=85) self.tabla_detalles.column("#6", width=100, minwidth=85) self.tabla_detalles.column("#7", width=100, minwidth=85) self.tabla_detalles['show'] = 'headings' self.tabla_detalles.heading('#1', text="Codigo Registro", anchor=tk.W) self.tabla_detalles.heading('#2', text="Id Producto ", anchor=tk.W) self.tabla_detalles.heading('#3', text="Recibo ", anchor=tk.W) self.tabla_detalles.heading('#4', text="Nombre ", anchor=tk.W) self.tabla_detalles.heading('#5', text="Cantidad ", anchor=tk.W) self.tabla_detalles.heading('#6', text="Precio ", anchor=tk.W) self.tabla_detalles.heading('#7', text="Total ", anchor=tk.W) self.frame6 = tk.LabelFrame(self.frame4) self.frame6.grid(row=4, column=0, sticky=tk.E) ttk.Button(self.frame6, text="Eliminar", command=self._deleteselection).grid(row=0, column=0) ttk.Button(self.frame6, text="Actualizar", command=self._actualizar).grid(row=0, column=1) ttk.Button(self.frame6, text="Limpiar", command=self._limpieza).grid(row=0, column=2) ttk.Button(self.frame6, text="Informe", command=self._generarInforme).grid(row=0, column=3) #=========================================================================================================================================================================== self._cargarU() self._cargarP() self._getDocs() self._cargarRecibo() self._cargarCodProducto()
def __init__(self, master): self.master = master self.master.title("Mantaro SYS") self.master.geometry("400x400") pestañas = ttk.Notebook(self.master) tab1 = ttk.Frame(pestañas) tab2 = ttk.Frame(pestañas) pestañas.add(tab1, text="Ventas") pestañas.add(tab2, text="Registro de Documentos") pestañas.pack(expan=1, fill="both") #====================================================================================== self.frame1 = ttk.Labelframe(tab1, text="Registro de Ventas", width=100) self.frame1.grid(row=1, column=1, padx=3, pady=3, sticky=tk.NW) tk.Label(self.frame1, text="Nro Recibo").grid(row=1, column=1, padx=3, pady=3) self.NroRecibo = ttk.Entry(self.frame1, width=20) self.NroRecibo.grid(row=1, column=2, padx=3, pady=3) tk.Label(self.frame1, text="Recibo").grid(row=1, column=3, padx=3, pady=3) self.cmbTipoDoc = ttk.Combobox(self.frame1, width=20) self.cmbTipoDoc['values'] = ("Factura", "Boleta") self.cmbTipoDoc.grid(row=1, column=4, padx=3, pady=3) tk.Label(self.frame1, text="Usuario").grid(row=2, column=1, padx=3, pady=3) self.cmbIdUsuario = ttk.Combobox(self.frame1, width=25) self.cmbIdUsuario.grid(row=2, column=2, padx=3, pady=3) tk.Label(self.frame1, text="Cliente").grid(row=2, column=3, padx=3, pady=3) self.IdCliente = ttk.Entry(self.frame1) self.IdCliente.grid(row=2, column=4, padx=3, pady=3) tk.Label(self.frame1, text="Fecha de Venta").grid(row=3, column=1, padx=3, pady=3) self.FechaVenta = tkcalendar.DateEntry(self.frame1) self.FechaVenta.grid(row=3, column=2, padx=3, pady=3, sticky=tk.W) tk.Label(self.frame1, text="Codigo Venta").grid(row=3, column=3, padx=3, pady=3, sticky=tk.W) self.varCodigo = StringVar() self.CodVenta = ttk.Entry(self.frame1, textvariable=self.varCodigo, width=15, state='disabled') self.CodVenta.grid(row=3, column=4, padx=3, pady=3, sticky=tk.W) ttk.Button(self.frame1, text="Generar Codigo", command=self._generarcod).grid(row=4, column=4, padx=3, pady=3, sticky=tk.W) self.frame3 = ttk.Labelframe(tab1, text="Productos", width=80) self.frame3.grid(row=2, column=1, padx=3, pady=3, sticky=tk.NW) tk.Label(self.frame3, text="Codigo Producto").grid(row=0, column=0, padx=3, pady=3, sticky=tk.W) self.codProducto = ttk.Combobox(self.frame3, width=25) self.codProducto.grid(row=0, column=1) tk.Label(self.frame3, text="Nombre Producto").grid(row=1, column=0, padx=3, pady=3, sticky=tk.W) self.nombProducto = ttk.Entry(self.frame3) self.nombProducto.grid(row=1, column=1) tk.Label(self.frame3, text="Cantidad").grid(row=2, column=0, padx=3, pady=3, sticky=tk.W) self.spin_variable = DoubleVar() self.spin = ttk.Spinbox(self.frame3, from_=0, to=20, width=5, textvariable=self.spin_variable) self.spin.grid(row=2, column=1) tk.Label(self.frame3, text="Precio").grid(row=3, column=0, padx=3, pady=3, sticky=tk.W) self.precio = DoubleVar() self.precioProducto = ttk.Entry(self.frame3, textvariable=self.precio) self.precioProducto.grid(row=3, column=1) tk.Label(self.frame3, text="Total").grid(row=4, column=0, padx=3, pady=3, sticky=tk.W) self.total_precio_variable = DoubleVar() self.totalPrecio = ttk.Entry(self.frame3, textvariable=self.total_precio_variable) self.totalPrecio.grid(row=4, column=1) ttk.Button(self.frame3, text="Calcular", command=lambda: self._calcular1(self.spin_variable.get( ), self.precio.get())).grid(row=5, column=1, padx=3, pady=3) ttk.Button(self.frame3, text="Agregar", command=self._carrito).grid(row=5, column=0, padx=3, pady=3) self.frame4 = ttk.Labelframe(tab1, text="Detalles", width=100) self.frame4.grid(row=3, column=1, padx=3, pady=3, sticky=tk.NW) self.tabla_detalles = ttk.Treeview(self.frame4, height=8, column=('#1', '#2', '#3', '#4', '#5', '#6', '#7')) self.tabla_detalles.grid(row=1, column=0) self.tabla_detalles.column("#1", width=100, minwidth=85) self.tabla_detalles.column("#2", width=100, minwidth=85) self.tabla_detalles.column("#3", width=100, minwidth=85) self.tabla_detalles.column("#4", width=100, minwidth=85) self.tabla_detalles.column("#5", width=100, minwidth=85) self.tabla_detalles.column("#6", width=100, minwidth=85) self.tabla_detalles.column("#7", width=100, minwidth=85) self.tabla_detalles['show'] = 'headings' self.tabla_detalles.heading('#1', text="Id Venta ", anchor=tk.W) self.tabla_detalles.heading('#2', text="Id Producto ", anchor=tk.W) self.tabla_detalles.heading('#3', text="Recibo ", anchor=tk.W) self.tabla_detalles.heading('#4', text="Nombre ", anchor=tk.W) self.tabla_detalles.heading('#5', text="Cantidad ", anchor=tk.W) self.tabla_detalles.heading('#6', text="Precio ", anchor=tk.W) self.tabla_detalles.heading('#7', text="Total ", anchor=tk.W) self.frame5 = tk.LabelFrame(self.frame4, width=100) self.frame5.grid(row=2, column=0, sticky=tk.E) tk.Label(self.frame5, text="Sub Total").grid(row=1, column=1, sticky=tk.W) self.subtotal_variable = StringVar() self.SubTotalEntry = ttk.Entry(self.frame5, width=10, textvariable=self.subtotal_variable) self.SubTotalEntry.grid(row=1, column=2, sticky=tk.W) tk.Label(self.frame5, text="IGV").grid(row=2, column=1, sticky=tk.W) self.igv_variable = StringVar() self.IGVEntry = ttk.Entry(self.frame5, width=10, textvariable=self.igv_variable) self.IGVEntry.grid(row=2, column=2, sticky=tk.W) tk.Label(self.frame5, text="Total").grid(row=3, column=1, sticky=tk.W) self.total_variable = DoubleVar() self.TotalEntry = ttk.Entry(self.frame5, width=10, textvariable=self.total_variable) self.TotalEntry.grid(row=3, column=2, sticky=tk.W) self.frame6 = tk.LabelFrame(self.frame4) self.frame6.grid(row=3, column=0, sticky=tk.E) ttk.Button(self.frame6, text="Agregar", command=self._prueba1).grid(row=0, column=0) ttk.Button(self.frame6, text="Eliminar", command=self._deleteseletion).grid(row=0, column=1) ttk.Button(self.frame6, text="Registrar", command=self._generarDocVenta).grid(row=0, column=3) ttk.Button(self.frame6, text="Actualizar", command=self._prueba2).grid(row=0, column=4) ttk.Button(self.frame6, text="Limpiar", command=self._limpiar).grid(row=0, column=5) ttk.Button(self.frame6, text="Informe", command=self._generarInforme).grid(row=0, column=6) #================================================================================================= self._cargarU() self._cargarCodProducto() #================================================================================================= self.frame_final = ttk.Labelframe(tab2, text="Recibos", width=200) self.frame_final.grid(row=1, column=1, padx=5, pady=5, sticky=tk.W) self.tabla_recibos = ttk.Treeview(self.frame_final, height=20, column=('#1', '#2', '#3', '#4', '#5', '#6', '#7', '#8')) self.tabla_recibos.grid(row=1, column=1, padx=3, pady=3) self.tabla_recibos.column('#1', width=100, minwidth=90) self.tabla_recibos.column('#2', width=100, minwidth=90) self.tabla_recibos.column('#3', width=100, minwidth=90) self.tabla_recibos.column('#4', width=100, minwidth=90) self.tabla_recibos.column('#5', width=100, minwidth=90) self.tabla_recibos.column('#6', width=100, minwidth=90) self.tabla_recibos.column('#7', width=100, minwidth=90) self.tabla_recibos.column('#8', width=100, minwidth=90) self.tabla_recibos['show'] = 'headings' self.tabla_recibos.heading('#1', text="Nro Recibo", anchor=tk.W) self.tabla_recibos.heading('#2', text="Usuario", anchor=tk.W) self.tabla_recibos.heading('#3', text="Cliente", anchor=tk.W) self.tabla_recibos.heading('#4', text="Tipo Doc", anchor=tk.W) self.tabla_recibos.heading('#5', text="Fecha Venta", anchor=tk.W) self.tabla_recibos.heading('#6', text="Sub Total", anchor=tk.W) self.tabla_recibos.heading('#7', text="Igv", anchor=tk.W) self.tabla_recibos.heading('#8', text="Total", anchor=tk.W) ttk.Button(self.frame_final, text="Eliminar", command=self._DeleteRecibo).grid(row=2, column=1, padx=3, pady=3, sticky=tk.E) self._GetReciboVenta()
def construct_window(self): """Создает интерфейс окна.""" # *** Наименование события window_left, window_top = tls.center_window( self, cnst.EVENT_EDITOR_WINDOW_WIDTH, cnst.EVENT_EDITOR_WINDOW_HEIGHT) window_geometry = f"{cnst.EVENT_EDITOR_WINDOW_WIDTH}x{cnst.EVENT_EDITOR_WINDOW_HEIGHT}+{window_left}+{window_top}" self.geometry(window_geometry) self.update_idletasks() # *** Наименование события self.event_name_frame = tk.Frame(self) self.event_name_entry = tk.Entry(self.event_name_frame, width=40) self.event_name_entry.pack(side=tk.RIGHT) self.event_name_entry.focus() self.event_name_label = tk.Label( self.event_name_frame, text="Название события", width=20) # bg='black', fg='white', ) self.event_name_label.pack(side=tk.LEFT) self.event_name_frame.pack(padx=10, pady=10) # *** Тип и период события self.options_labels_frame = tk.Frame(self) self.event_type_label = tk.Label(self.options_labels_frame, text="Тип события", width=20) self.event_type_label.pack(side=tk.LEFT) self.event_period_label = tk.Label(self.options_labels_frame, text="Периодичность события", width=20) self.event_period_label.pack(side=tk.RIGHT) self.options_labels_frame.pack() self.options_frame = tk.Frame(self) self.event_type_combo = ttk.Combobox(self.options_frame, width=30) self.event_type_combo.pack(side=tk.LEFT) self.event_period_combo = ttk.Combobox(self.options_frame, width=30) self.event_period_combo.pack(side=tk.LEFT) self.options_frame.pack(padx=10, pady=10) # *** Дата события self.event_date_frame = tk.Frame(self) self.event_date_label = tk.Label(self.event_date_frame, text="Дата события", width=20) self.event_date_label.pack(side=tk.LEFT) self.event_date_entry = tkcal.DateEntry(self.event_date_frame, width=12, locale="ru_RU", borderwidth=2) self.event_date_entry.pack(side=tk.RIGHT) self.event_date_frame.pack(padx=10, pady=10) # *** Кнопки self.buttons_frame = tk.Frame(self) self.ok_button = tk.Button(command=self.save_data, master=self.buttons_frame, text="Принять") self.ok_button.pack(side=tk.LEFT) self.cancel_button = tk.Button(command=self.destroy, master=self.buttons_frame, text="Отмена") self.cancel_button.pack(side=tk.RIGHT) self.buttons_frame.pack(padx=10, pady=10) self.update_idletasks()
def create_widgets(self): # ### Frames ########################################################## # the left one contains buttons, filters and displays table with numerical data # the right one contains map self.left_frame = tk.Frame(self.master, highlightbackground="red", highlightcolor="red", borderwidth=2) self.right_frame = tk.Frame(self.master) self.left_frame.pack(side='left', anchor='n') self.right_frame.pack(side='right') # ### Buttons ######################################################### self.button_load = tk.Button(self.left_frame, text="Load flights", command=self.load_flights) self.button_next = tk.Button(self.left_frame, text="Next", command=self.show_next_flight) self.button_previous = tk.Button(self.left_frame, text="Previous", command=self.show_previous_flight) # ### Labels ########################################################## label_filters = tk.Label(self.left_frame, text="Filters", font=('Helvetica', 14, 'bold')) label_calendar = tk.Label(self.left_frame, text="Pick a date") label_calendar_note = tk.Label( self.left_frame, text="Data is available only for July 2018", fg='brown') label_ades = tk.Label(self.left_frame, text="ADES") label_adep = tk.Label(self.left_frame, text="ADEP") label_ncp = tk.Label(self.left_frame, text="NCP") label_wpt = tk.Label(self.left_frame, text="WPT") label_entry_type = tk.Label(self.left_frame, text="Entry type") label_exit_type = tk.Label(self.left_frame, text="Exit type") # ### Calendar ######################################################## self.calendar = tkcalendar.DateEntry(self.left_frame, year=2018, month=7, day=1, width=8) # ### Comboboxes ###################################################### ades_var = tk.StringVar(self.left_frame) adep_var = tk.StringVar(self.left_frame) ncp_var = tk.StringVar(self.left_frame) wpt_var = tk.StringVar(self.left_frame) ades_var.set(self.ades_list[0]) ncp_var.set(self.ncp_list[0]) wpt_var.set(self.wpt_list[0]) self.combobox_ades = ttk.Combobox(self.left_frame, textvariable=ades_var, values=self.ades_list, width=8) self.combobox_adep = ttk.Combobox(self.left_frame, textvariable=adep_var, values=self.adep_list, width=8) self.combobox_ncp = ttk.Combobox(self.left_frame, textvariable=ncp_var, values=self.ncp_list, width=8) self.combobox_wpt = ttk.Combobox(self.left_frame, textvariable=wpt_var, values=self.wpt_list, width=8) # ### Radiobuttons #################################################### self.entry_var = tk.StringVar(self.left_frame) self.entry_var.set('Any') entry_options = ['Any', 'Lateral', 'Vertical'] radiobutton_entry_a = tk.Radiobutton(self.left_frame, text=entry_options[0], variable=self.entry_var, value=entry_options[0]) radiobutton_entry_l = tk.Radiobutton(self.left_frame, text=entry_options[1], variable=self.entry_var, value=entry_options[1]) radiobutton_entry_v = tk.Radiobutton(self.left_frame, text=entry_options[2], variable=self.entry_var, value=entry_options[2]) self.exit_var = tk.StringVar(self.left_frame) self.exit_var.set('Any') exit_options = ['Any', 'Lateral', 'Vertical'] radiobutton_exit_a = tk.Radiobutton(self.left_frame, text=exit_options[0], variable=self.exit_var, value=exit_options[0]) radiobutton_exit_l = tk.Radiobutton(self.left_frame, text=exit_options[1], variable=self.exit_var, value=exit_options[1]) radiobutton_exit_v = tk.Radiobutton(self.left_frame, text=exit_options[2], variable=self.exit_var, value=exit_options[2]) # ### Add widgets ##################################################### label_filters.grid(row=1, column=1, sticky='w') label_calendar.grid(row=2, column=0) self.calendar.grid(row=2, column=1) label_calendar_note.grid(row=3, column=0, columnspan=2) label_ades.grid(row=4, column=0) label_adep.grid(row=5, column=0) label_ncp.grid(row=6, column=0) label_wpt.grid(row=7, column=0) self.button_load.grid(row=8, column=0, sticky='ew') self.button_next.grid(row=8, column=1, sticky='ew') self.button_previous.grid(row=8, column=2, sticky='ew') self.combobox_ades.grid(row=4, column=1) self.combobox_adep.grid(row=5, column=1) self.combobox_ncp.grid(row=6, column=1) self.combobox_wpt.grid(row=7, column=1) label_entry_type.grid(row=2, column=2) label_exit_type.grid(row=3, column=2) radiobutton_entry_a.grid(row=2, column=3) radiobutton_entry_l.grid(row=2, column=4) radiobutton_entry_v.grid(row=2, column=5) radiobutton_exit_a.grid(row=3, column=3) radiobutton_exit_l.grid(row=3, column=4) radiobutton_exit_v.grid(row=3, column=5)
def main_function(): root = tkinter.Tk() root.minsize(width=1150, height=660) root.title('EXPENDITURE ENTRY') root.iconbitmap( os.path.join('FILES', 'HOME_ACCOUNTING', 'icons', 'home_acc_exp_entry.ico')) root.focus_force() # creating folder, database file and required tables initially if not existing def file_initialisation(): if not os.path.exists(os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA')): os.mkdir(os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA')) db_connection = sqlite3.connect( os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA', 'home_accounting.db')) db_cursor = db_connection.cursor() # table for storing current entries and clearing if any previous exists db_cursor.execute("""CREATE TABLE IF NOT EXISTS entries ( date TEXT, item TEXT, category TEXT, mode TEXT, unit TEXT, quantity REAL, rate REAL, da REAL, dr REAL, net REAL)""") db_connection.commit() db_cursor.execute("""DELETE FROM entries""") db_connection.commit() # tables for storing the defaults db_cursor.execute("""CREATE TABLE IF NOT EXISTS item (item TEXT)""") db_connection.commit() db_cursor.execute( """CREATE TABLE IF NOT EXISTS category (category TEXT)""") db_connection.commit() db_cursor.execute("""CREATE TABLE IF NOT EXISTS mode (mode TEXT)""") db_connection.commit() db_cursor.execute("""CREATE TABLE IF NOT EXISTS unit (unit TEXT)""") db_connection.commit() db_cursor.execute( """CREATE TABLE IF NOT EXISTS pair (item TEXT, category TEXT)""") db_connection.commit() db_connection.close() # function for setting the auto complete values for the auto complete widgets .. accepts a tuple with widget and name def set_auto_completion(field): db_connection = sqlite3.connect( os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA', 'home_accounting.db')) db_cursor = db_connection.cursor() data = db_cursor.execute("SELECT * FROM " + field[1]).fetchall() l = [] for x in range(len(data)): l.append(data[x][0]) field[0].set_completion_list(l) # function for validating the input as only numeric def only_numeric(letter): if bool(re.match('\d*\.\d*$', letter)): return True if letter.isdigit(): return True if letter == '': return True else: return False # function to facilitate Return for going to next widget def next_widget_on_return(event): x = event.widget.tk_focusNext() x.focus() if x != button_add_done: x.select_range(0, tkinter.END) return "break" # validation of date picker entry as date only on focus out def date_only(event): if not bool(re.match('\d\d\/\d\d\/\d\d\d\d', date_picker.get())): messagebox.showerror( 'INVALID VALUE', "Please enter a valid date in the format dd/mm/yyyy") date_picker.focus_set() date_picker.select_range(0, tkinter.END) else: try: datetime.datetime.strptime(date_picker.get(), "%d/%m/%Y").date() except ValueError: messagebox.showerror( 'INVALID VALUE', "Please enter a valid date in the format dd/mm/yyyy") date_picker.focus_set() date_picker.select_range(0, tkinter.END) # capitalizing the text entries def capitalize_words(event, widget): x = '' if event is not None: x = event.widget.get().strip() elif widget is not None: x = widget.get().strip() if x != '': x = x[0].upper() + x[1:] if event is not None: event.widget.delete(0, tkinter.END) event.widget.insert(0, x) elif widget is not None: widget.delete(0, tkinter.END) widget.insert(0, x) # function for auto filling of category def category_auto_fill(event): capitalize_words(event, None) if item_entry.get() != '': db_connection = sqlite3.connect( os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA', 'home_accounting.db')) db_cursor = db_connection.cursor() db_cursor.execute("SELECT category FROM pair WHERE item='" + item_entry.get() + "' COLLATE NOCASE") data = db_cursor.fetchall() if bool(data): category_entry.delete(0, tkinter.END) category_entry.insert(0, data[0][0]) category_entry.config(state='disabled') mode_entry.focus_set() else: category_entry.config(state='normal') category_entry.focus_set() category_entry.select_range(0, tkinter.END) # function for formatting the numerical inputs in various fields accordingly def format_numerals(event, widget): if event is not None: if event.widget.get() != '': x = float(event.widget.get()) event.widget.delete(0, tkinter.END) if x != 0 and event.widget == quantity_entry: event.widget.insert(0, "{:.3f}".format(x)) elif x != 0 and event.widget == rate_entry: event.widget.insert(0, "{:.2f}".format(x)) elif event.widget in [dis_all_entry, dis_rec_entry, net_entry]: event.widget.insert(0, "{:.2f}".format(x)) elif widget is not None: if widget.get() != '': x = float(widget.get()) widget.delete(0, tkinter.END) if x != 0 and widget == quantity_entry: widget.insert(0, "{:.3f}".format(x)) elif x != 0 and widget == rate_entry: widget.insert(0, "{:.2f}".format(x)) elif widget in [dis_all_entry, dis_rec_entry, net_entry]: widget.insert(0, "{:.2f}".format(x)) # function to calculate the net price after leaving the dis rec entry if possible def net_price_if_possible(event): format_numerals(event, None) empty = 0 for i in [quantity_entry, rate_entry, dis_all_entry, dis_rec_entry]: if i.get() == '': empty = empty + 1 if not empty: net = (float(quantity_entry.get()) * float(rate_entry.get())) + float( dis_all_entry.get()) - float(dis_rec_entry.get()) net_entry.delete(0, tkinter.END) net_entry.insert(0, "{:.2f}".format(net)) # function to calculate numeral value if a single numeral field other than net is left at last def single_empty_numeral(event): format_numerals(event, None) empty = 0 for i in [ quantity_entry, rate_entry, dis_all_entry, dis_rec_entry, net_entry ]: if i.get() == '': empty = empty + 1 if empty == 1: if quantity_entry.get() == '': qty = (float(net_entry.get()) - float(dis_all_entry.get()) + float(dis_rec_entry.get())) / float(rate_entry.get()) quantity_entry.delete(0, tkinter.END) quantity_entry.insert(0, "{:.3f}".format(qty)) elif rate_entry.get() == '': r = (float(net_entry.get()) - float(dis_all_entry.get()) + float(dis_rec_entry.get())) / float(quantity_entry.get()) rate_entry.delete(0, tkinter.END) rate_entry.insert(0, "{:.2f}".format(r)) elif dis_all_entry.get() == '': da = float(net_entry.get()) + float(dis_rec_entry.get()) - ( float(quantity_entry.get()) * float(rate_entry.get())) dis_all_entry.delete(0, tkinter.END) dis_all_entry.insert(0, "{:.2f}".format(da)) elif dis_rec_entry.get() == '': dr = (float(quantity_entry.get()) * float(rate_entry.get())) + float( dis_all_entry.get()) - float(net_entry.get()) dis_rec_entry.delete(0, tkinter.END) dis_rec_entry.insert(0, "{:.2f}".format(dr)) elif net_entry.get() == '': net = (float(quantity_entry.get()) * float(rate_entry.get())) + float( dis_all_entry.get()) - float(dis_rec_entry.get()) net_entry.delete(0, tkinter.END) net_entry.insert(0, "{:.2f}".format(net)) elif empty > 1: messagebox.showwarning( "UNKNOWN QUANTITY LIMIT EXCEEDED", "Please do not leave more than one among Quantity, Rate, Dis. Allowed, Dis. Received and Net Price as empty" ) if quantity_entry.get() == '': quantity_entry.focus_set() elif rate_entry.get() == '': rate_entry.focus_set() elif dis_all_entry.get() == '': dis_all_entry.focus_set() elif dis_rec_entry.get() == '': dis_rec_entry.focus_set() # function to execute on add OR done def add_or_done(): capitalize_words(None, item_entry) category_auto_fill(None) for i in [category_entry, mode_entry, unit_entry]: capitalize_words(None, i) for i in [quantity_entry, rate_entry, dis_all_entry, dis_rec_entry]: format_numerals(None, i) net_price_if_possible(None) format_numerals(None, net_entry) single_empty_numeral(None) empty = 0 for i in [ date_picker, item_entry, category_entry, mode_entry, unit_entry, quantity_entry, rate_entry, dis_all_entry, dis_rec_entry, net_entry ]: if i.get() == '': empty = empty + 1 if empty != 0: messagebox.showerror( 'EMPTY FIELDS NOT PERMITTED', 'Please do not leave any of the fields empty') for i in [ date_picker, item_entry, category_entry, mode_entry, unit_entry, quantity_entry, rate_entry, dis_all_entry, dis_rec_entry, net_entry ]: if i.get() == '': i.focus_set() break else: db_connection = sqlite3.connect( os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA', 'home_accounting.db')) db_cursor = db_connection.cursor() date = to_year_month_day(date_picker.get()) item = item_entry.get() category = category_entry.get() mode = mode_entry.get() unit = unit_entry.get() quantity = float(quantity_entry.get()) rate = float(rate_entry.get()) da = float(dis_all_entry.get()) dr = float(dis_rec_entry.get()) net = float(net_entry.get()) if button_add_done.cget('text') == 'ADD': db_cursor.execute( """INSERT INTO entries VALUES (?,?,?,?,?,?,?,?,?,?)""", (date, item, category, mode, unit, quantity, rate, da, dr, net)) db_connection.commit() db_connection.close() elif button_add_done.cget('text') == 'DONE': row = int(tree.selection()[0]) db_cursor.execute( """UPDATE entries SET date=?, item=?, category=?, mode=?, unit=?, quantity=?, rate=?, da=?, dr=?, net=? WHERE rowid=""" + str(row), (date, item, category, mode, unit, quantity, rate, da, dr, net)) db_connection.commit() db_connection.close() button_add_done.config(text='ADD') category_entry.config(state='normal') for i in [ net_entry, dis_all_entry, dis_rec_entry, rate_entry, quantity_entry, category_entry, item_entry, unit_entry ]: i.delete(0, tkinter.END) for i in [net_entry, dis_all_entry, dis_rec_entry, rate_entry]: i.insert(0, '0.00') quantity_entry.insert(0, '0.000') update_tree() item_entry.focus_set() # function to convert date to year/month/day format def to_year_month_day(d): return d[6:] + '/' + d[3:5] + '/' + d[:2] # function to convert date to day/month/year def to_day_month_year(d): return d[8:] + '/' + d[5:7] + '/' + d[:4] # function to update the tree whenever needed def update_tree(): tree.delete(*tree.get_children()) db_connection = sqlite3.connect( os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA', 'home_accounting.db')) db_cursor = db_connection.cursor() num_of_entries = 0 db_cursor.execute("SELECT COUNT(*) FROM entries") num_of_entries = db_cursor.fetchall()[0][0] total_net = 0 db_cursor.execute("SELECT SUM(net) FROM entries") total_net = db_cursor.fetchall()[0][0] if total_net is None: total_net = 0 db_cursor.execute("SELECT quantity FROM entries") quantities = db_cursor.fetchall() db_cursor.execute("SELECT rate FROM entries") rates = db_cursor.fetchall() total_gross = 0 for i in range(num_of_entries): total_gross += (quantities[i][0] * rates[i][0]) label_number_of_entries.config(text='No. of entries = ' + str(num_of_entries)) label_total_gross.config(text='Total Gross = ' + "{:.2f}".format(total_gross)) label_total_net.config(text='Total Net = ' + "{:.2f}".format(total_net)) db_cursor.execute("SELECT * FROM entries") the_entries = db_cursor.fetchall() for i in range(num_of_entries): row = [] date = to_day_month_year(the_entries[i][0]) item = the_entries[i][1] category = the_entries[i][2] mode = the_entries[i][3] unit = the_entries[i][4] quantity = "{:.3f}".format(the_entries[i][5]) rate = "{:.2f}".format(the_entries[i][6]) da = "{:.2f}".format(the_entries[i][7]) dr = "{:.2f}".format(the_entries[i][8]) net = "{:.2f}".format(the_entries[i][9]) for j in [ date, item, category, mode, unit, quantity, rate, da, dr, net ]: row.append(j) if i % 2 == 0: tree.insert(parent='', index='end', iid=i + 1, values=row) else: tree.insert(parent='', index='end', iid=i + 1, values=row, tags=('odd', )) db_connection.close() check_tree_selection(None) # function to check if any selection is made in the tree and change state of the three buttons def check_tree_selection(event): if tree.selection(): button_edit.config(state=tkinter.NORMAL) button_delete.config(state=tkinter.NORMAL) button_clear_selection.config(state=tkinter.NORMAL) else: button_edit.config(state=tkinter.DISABLED) button_delete.config(state=tkinter.DISABLED) button_clear_selection.config(state=tkinter.DISABLED) # function to be called on 'edit' button def edit_entry(): row = int(tree.selection()[0]) button_edit.config(state='disabled') button_delete.config(state='disabled') button_clear_selection.config(state='disabled') button_add_done.config(text='DONE') for i in [ date_picker, item_entry, category_entry, mode_entry, unit_entry, quantity_entry, rate_entry, dis_all_entry, dis_rec_entry, net_entry ]: i.delete(0, tkinter.END) db_connection = sqlite3.connect( os.path.join('FILES', 'HOME_ACCOUNTING', 'DATA', 'home_accounting.db')) db_cursor = db_connection.cursor() db_cursor.execute("SELECT * FROM entries WHERE rowid=" + str(row)) data_to_edit = db_cursor.fetchall() date_picker.insert(0, to_day_month_year(data_to_edit[0][0])) item_entry.insert(0, data_to_edit[0][1]) category_entry.insert(0, data_to_edit[0][2]) mode_entry.insert(0, data_to_edit[0][3]) unit_entry.insert(0, data_to_edit[0][4]) quantity_entry.insert(0, "{:.3f}".format(data_to_edit[0][5])) rate_entry.insert(0, "{:.2f}".format(data_to_edit[0][6])) dis_all_entry.insert(0, "{:.2f}".format(data_to_edit[0][7])) dis_rec_entry.insert(0, "{:.2f}".format(data_to_edit[0][8])) net_entry.insert(0, "{:.2f}".format(data_to_edit[0][9])) date_picker.focus_set() # function for clearing the selection made in the tree def clear_selection(): update_tree() # theme setting of ttk widgets style = ttk.Style() style.theme_use("clam") # default is vista style.configure("Treeview", background='white', fieldbackground='white', rowheight=25, font='TkDefaultFont 9 italic') style.configure("Treeview.Heading", font='TkDefaultFont 10 bold') style.map("Treeview", background=[('selected', 'RoyalBlue3')]) # calling the function to initially check the existence of files and creating it if not existing file_initialisation() date_picker = tkcalendar.DateEntry(root, date_pattern='dd/mm/yyyy') date_picker.place(relx=0.02, rely=0.0256, relwidth=0.15) date_picker.focus_set() date_picker.bind("<Return>", next_widget_on_return) date_picker.bind("<FocusOut>", date_only) label_item = tkinter.Label(root, text='Item', font='TkDefaultFont 10 italic') label_item.place(relx=0.02, rely=0.0256 * 4 - 0.0065) item_entry = autocomplete.AutocompleteEntry(root, completevalues=[]) item_entry.place(relx=0.02, rely=0.0256 * 5, relwidth=0.15) item_entry.bind("<Return>", next_widget_on_return) item_entry.bind("<FocusOut>", category_auto_fill) label_category = tkinter.Label(root, text='Category', font='TkDefaultFont 10 italic') label_category.place(relx=0.02, rely=0.0256 * 8 - 0.0065) category_entry = autocomplete.AutocompleteEntry(root, completevalues=[]) category_entry.place(relx=0.02, rely=0.0256 * 9, relwidth=0.15) category_entry.bind("<Return>", next_widget_on_return) category_entry.bind( "<FocusOut>", lambda event, widget=None: capitalize_words(event, widget)) label_mode = tkinter.Label(root, text='Mode Of Payment', font='TkDefaultFont 10 italic') label_mode.place(relx=0.02, rely=0.0256 * 12 - 0.0065) mode_entry = autocomplete.AutocompleteEntry(root, completevalues=[]) mode_entry.place(relx=0.02, rely=0.0256 * 13, relwidth=0.15) mode_entry.bind("<Return>", next_widget_on_return) mode_entry.bind("<FocusOut>", lambda event, widget=None: capitalize_words(event, widget)) label_unit = tkinter.Label(root, text='Unit (Quantity Description)', font='TkDefaultFont 10 italic') label_unit.place(relx=0.02, rely=0.0256 * 16 - 0.0065) unit_entry = autocomplete.AutocompleteEntry(root, completevalues=[]) unit_entry.place(relx=0.02, rely=0.0256 * 17, relwidth=0.15) unit_entry.bind("<Return>", next_widget_on_return) unit_entry.bind("<FocusOut>", lambda event, widget=None: capitalize_words(event, widget)) label_quantity = tkinter.Label(root, text='Quantity', font='TkDefaultFont 10 italic') label_quantity.place(relx=0.02, rely=0.0256 * 20 - 0.0065) quantity_entry = tkinter.Entry(root) quantity_entry.place(relx=0.02, rely=0.0256 * 21, relwidth=0.15) quantity_entry.config(validate='all', validatecommand=(root.register(only_numeric), '%P')) quantity_entry.insert(0, '0.000') quantity_entry.bind("<Return>", next_widget_on_return) quantity_entry.bind( "<FocusOut>", lambda event, widget=None: format_numerals(event, widget)) label_rate = tkinter.Label(root, text='Rate', font='TkDefaultFont 10 italic') label_rate.place(relx=0.02, rely=0.0256 * 24 - 0.0065) rate_entry = tkinter.Entry(root) rate_entry.place(relx=0.02, rely=0.0256 * 25, relwidth=0.15) rate_entry.config(validate='all', validatecommand=(root.register(only_numeric), '%P')) rate_entry.insert(0, '0.00') rate_entry.bind("<Return>", next_widget_on_return) rate_entry.bind("<FocusOut>", lambda event, widget=None: format_numerals(event, widget)) label_dis_all = tkinter.Label(root, text='Dis. Allowed', font='TkDefaultFont 10 italic') label_dis_all.place(relx=0.02, rely=0.0256 * 28 - 0.0065) dis_all_entry = tkinter.Entry(root) dis_all_entry.place(relx=0.02, rely=0.0256 * 29, relwidth=0.07) dis_all_entry.config(validate='all', validatecommand=(root.register(only_numeric), '%P')) dis_all_entry.insert(0, '0.00') dis_all_entry.bind("<Return>", next_widget_on_return) dis_all_entry.bind( "<FocusOut>", lambda event, widget=None: format_numerals(event, widget)) label_dis_rec = tkinter.Label(root, text='Dis. Received', font='TkDefaultFont 10 italic') label_dis_rec.place(relx=0.02 + 0.07 + 0.01, rely=0.0256 * 28 - 0.0065) dis_rec_entry = tkinter.Entry(root) dis_rec_entry.place(relx=0.02 + 0.07 + 0.01, rely=0.0256 * 29, relwidth=0.07) dis_rec_entry.config(validate='all', validatecommand=(root.register(only_numeric), '%P')) dis_rec_entry.insert(0, '0.00') dis_rec_entry.bind("<Return>", next_widget_on_return) dis_rec_entry.bind("<FocusOut>", net_price_if_possible) label_net = tkinter.Label(root, text='Net Price', font='TkDefaultFont 10 italic') label_net.place(relx=0.02, rely=0.0256 * 32 - 0.0065) net_entry = tkinter.Entry(root) net_entry.place(relx=0.02, rely=0.0256 * 33, relwidth=0.15) net_entry.config(validate='all', validatecommand=(root.register(only_numeric), '%P')) net_entry.insert(0, '0.00') net_entry.bind("<Return>", next_widget_on_return) net_entry.bind("<FocusOut>", single_empty_numeral) button_add_done = tkinter.Button(root, text='ADD', relief='groove', font='TkDefaultFont 11 bold italic', command=add_or_done) button_add_done.place(relx=0.045, rely=0.0256 * 36, relheight=0.0256 * 2, relwidth=0.10) button_add_done.bind("<Return>", lambda event=None: button_add_done.invoke()) button_save_exit = tkinter.Button(root, text='SAVE and EXIT', relief='groove', font='TkDefaultFont 11 bold italic') button_save_exit.place(relwidth=0.15, relheight=0.0256 * 3, relx=0.425, rely=0.870) button_save_exit.bind("<Return>", lambda event=None: button_save_exit.invoke()) button_no_save_exit = tkinter.Button(root, text='EXIT without SAVING', relief='groove', font='TkDefaultFont 11 bold italic') button_no_save_exit.place(relwidth=0.15, relheight=0.0256 * 3, relx=0.615, rely=0.870) button_no_save_exit.bind("<Return>", lambda event=None: button_no_save_exit.invoke()) button_edit = tkinter.Button(root, text='Edit', state=tkinter.DISABLED, relief='groove', command=edit_entry) button_edit.place(relwidth=0.07, relheight=0.0256 * 2, rely=0.79, relx=0.47) button_edit.bind("<Return>", lambda event=None: button_edit.invoke()) button_delete = tkinter.Button(root, text='Delete', state=tkinter.DISABLED, relief='groove') button_delete.place(relwidth=0.07, relheight=0.0256 * 2, rely=0.79, relx=0.56) button_delete.bind("<Return>", lambda event=None: button_delete.invoke()) button_clear_selection = tkinter.Button(root, text='Clear Selection', state=tkinter.DISABLED, relief='groove', command=clear_selection) button_clear_selection.place(relwidth=0.07, relheight=0.0256 * 2, rely=0.79, relx=0.65) button_clear_selection.bind( "<Return>", lambda event=None: button_clear_selection.invoke()) button_item_list = tkinter.Button(root, text='..', font='TkDefaultFont 11 bold italic') button_item_list.place(relx=0.18, rely=0.0256 * 5, height=21, relwidth=0.02) button_category_list = tkinter.Button(root, text='..', font='TkDefaultFont 11 bold italic') button_category_list.place(relx=0.18, rely=0.0256 * 9, height=21, relwidth=0.02) button_mode_list = tkinter.Button(root, text='..', font='TkDefaultFont 11 bold italic') button_mode_list.place(relx=0.18, rely=0.0256 * 13, height=21, relwidth=0.02) button_unit_list = tkinter.Button(root, text='..', font='TkDefaultFont 11 bold italic') button_unit_list.place(relx=0.18, rely=0.0256 * 17, height=21, relwidth=0.02) label_number_of_entries = tkinter.Label(root, text='No. of entries = 0', font='TkDefaultFont 10 italic') label_number_of_entries.place(relx=0.22, rely=0.73) label_total_gross = tkinter.Label(root, text='Total Gross = 0.00', font='TkDefaultFont 10 italic') label_total_gross.place(relx=0.63, rely=0.73) label_total_net = tkinter.Label(root, text='Total Net = 0.00', font='TkDefaultFont 10 italic') label_total_net.place(relx=0.865, rely=0.73) tree_scroll = tkinter.Scrollbar(root, orient=tkinter.VERTICAL) tree_scroll.place(relheight=0.7, relx=0.97, rely=0.03) tree = ttk.Treeview(root, show=['headings'], yscrollcommand=tree_scroll.set, selectmode='browse') tree.place(relwidth=0.75, relheight=0.7, relx=0.22, rely=0.03) tree_scroll.config(command=tree.yview) tree.bind('<FocusIn>', check_tree_selection) tree.bind('<ButtonRelease-1>', check_tree_selection) tree.bind('<KeyRelease>', check_tree_selection) tree['columns'] = ('date', 'item', 'cat', 'mode', 'unit', 'qty', 'rate', 'da', 'dr', 'net') root.update() tree.update() tree.column('date', anchor=tkinter.CENTER, width=int(tree.winfo_width() / 10)) tree.column('item', anchor=tkinter.W, width=int(tree.winfo_width() / 8)) tree.column('cat', anchor=tkinter.W, width=int(tree.winfo_width() / 7.5)) tree.column('mode', anchor=tkinter.W, width=int(tree.winfo_width() / 9)) tree.column('unit', anchor=tkinter.W, width=int(tree.winfo_width() / 12)) tree.column('qty', anchor=tkinter.E, width=int(tree.winfo_width() / 11)) tree.column('rate', anchor=tkinter.E, width=int(tree.winfo_width() / 11)) tree.column('da', anchor=tkinter.E, width=int(tree.winfo_width() / 13)) tree.column('dr', anchor=tkinter.E, width=int(tree.winfo_width() / 13)) tree.column('net', anchor=tkinter.E, width=int(tree.winfo_width() / 8.5)) tree.heading('date', text='Date') # , anchor=tkinter.W tree.heading('item', text='Item') tree.heading('cat', text='Category') tree.heading('mode', text='Mode') tree.heading('unit', text='Unit') tree.heading('qty', text='Quantity') tree.heading('rate', text='Rate') tree.heading('da', text='Dis. All') tree.heading('dr', text='Dis. Rec') tree.heading('net', text='Net Price') tree.tag_configure('odd', background="light sky blue") # calling function to initially set the auto completion values for different fields for i in [(item_entry, 'item'), (category_entry, 'category'), (mode_entry, 'mode'), (unit_entry, 'unit')]: set_auto_completion(i) root.mainloop()
if value.get() != "": incomeresult[key] = int(value.get()) incomeresult["date"] = ent.get() monthly_expense1 = MonthlyExpense("Income") monthly_expense1.input_data(incomeresult) monthly_expense2 = MonthlyExpense("Expense") monthly_expense2.input_data(expenseresult) clear() def send_report(): report = SendEmail() report.send_report() root.quit() tk.Label(submitframe, text="Date").pack(padx=10, pady=10) ent = tkc.DateEntry(submitframe, width=15, backgroud="blue", foreground="red", borderwidth=3) ent.pack(padx=10, pady=10) submitbutton = tk.Button(submitframe, text="Submit", command=button_submit) submitbutton.pack() report = tk.Button(submitframe, text="Report", command=send_report) report.pack() root.mainloop()
def new_keys(): def on_click_nk(): def is_valid_expiry_date(): if expiry.get() == "": return False if expiry.get() == "0": return True if expiry.get() == "1" and date_choice.get_date() > date.today(): return True else: return False def expiry_val(): if expiry.get() == "0": return 0 if expiry.get() == "1" and date_choice.get_date() > date.today(): return str(date_choice.get_date()) if name.get() != "": if functions_.is_email(email.get()): if length.get() != 0: if is_valid_expiry_date(): if passph.get() != "": lp = LoadPage("Generating Key...") lp.show_() master.update() functions_.generate_new_keys( name.get(), email.get(), comment.get(), length.get(), expiry_val(), passph.get()) lp.close_() popupmsg( "Think about saving your keys before closing \n the program. If you don't, they will be lost forever." ) back_to_main_menu() else: popupmsg("Please enter a valid passphrase.") else: popupmsg( "Please enter a valid expiry date in the future.") else: popupmsg("Please enter a valid key length") else: popupmsg("Please enter a valid email") else: popupmsg("Please enter a valid name") master.update() #The application will crash about 25% of the time if master.update() is not present length = IntVar(master, 0) expiry = StringVar(master, "") name_label = Label(master, text="Name :", anchor=W, font="Arial 11") name = Entry(master) email_label = Label(master, text="Email :", anchor=W, font="Arial 11") email = Entry(master) comment_label = Label(master, text="Comment (optional):", anchor=W, font="Arial 11") comment = Entry(master) length_label = Label(master, text="Key Length :", anchor=W, font="Arial 11") length_choice = [ Radiobutton(master, text="1024", variable=length, value=1024, indicatoron=0), Radiobutton(master, text="2048", variable=length, value=2048, indicatoron=0), Radiobutton(master, text="4096", variable=length, value=4096, indicatoron=0) ] expiry_label = Label(master, text="Expiry :", anchor=W, font="Arial 11") date_choice = ttkal.DateEntry(master, width=125, background='darkblue', foreground='white', borderwidth=2) expiry_choice = [ Radiobutton(master, text="NEVER", padx=20, variable=expiry, value=0, indicatoron=0), Radiobutton(master, text="ON :", padx=20, variable=expiry, value=1, indicatoron=0) ] passph_label = Label(master, text="Passphrase :", anchor=W, font="Arial 11") passph = Entry(master) algo_label = Label(master, text="Algorithm : RSA", anchor=W, font="Arial 11") button1 = Button(master, text='GENERATE KEYS', command=on_click_nk) new_key_form = [[625, 130, name_label, 500], [625, 150, name, 500], [625, 180, email_label, 500], [625, 200, email, 500], [625, 230, comment_label, 500], [625, 250, comment, 500], [625, 280, length_label, 500], [625 - 166, 300, length_choice[0], 166], [625, 300, length_choice[1], 166], [625 + 166, 300, length_choice[2], 166], [625, 330, expiry_label, 500], [625 - 125, 350, expiry_choice[0], 250], [625 + 62, 350, expiry_choice[1], 125], [625 + 62 + 125, 350, date_choice, 125], [625, 380, passph_label, 500], [625, 400, passph, 500], [625, 430, algo_label, 500], [625, 470, button1, 500]] for i in new_key_form: canvas0.create_window(i[0], i[1], window=i[2], width=i[3], tags="new_key_menu")
lbl_qual = tk.Label(main_window, text="Choose Qualification", font=(10)) lbl_qual.grid(rows=10, column=1, padx=10, pady=5, sticky='w') # Qualification Combobox cmbx_qual = tk.ttk.Combobox(main_window, values=lst_qual, state='readonly') cmbx_qual.grid(rows=11, column=0, columnspan=2, padx=10, pady=5, sticky='w') cmbx_qual.current(0) # Birthdate label lbl_birth = tk.Label(main_window, text="Select birth date", font=(10)) lbl_birth.grid(rows=12, column=1, padx=10, pady=5, sticky='w') # Birthdate date picker dp_birth = tkcalendar.DateEntry(main_window, width=12, background='darkblue', foreground='white', borderwidth=2, date_pattern='dd/mm/y') dp_birth.grid(rows=13, column=0, columnspan=2, padx=10, pady=5, sticky='we') # joining date label lbl_birth = tk.Label(main_window, text="Select joining date", font=(10)) lbl_birth.grid(rows=14, column=1, padx=10, pady=5, sticky='w') # Joining date picker dp_joining = tkcalendar.DateEntry(main_window, width=12, background='darkblue', foreground='white', borderwidth=2, date_pattern='dd/mm/y')
inputHour = ttk.Combobox(fenster, values=[ "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" ], state="readonly") inputMinutes = ttk.Combobox(fenster, values=["00", "15", "30", "45"], state="readonly") inputDate = tkcalendar.DateEntry(fenster, locale='de_DE', width=12, background='darkblue', foreground='white', borderwidth=2, year=2020) # structure window with grid inputStartpoint.grid(row=1, column=2, pady=30, columnspan=2) startpointLabel.grid(row=1, column=1) inputHour.grid(row=2, column=2) colonLabel.grid(row=2, column=3) inputMinutes.grid(row=2, column=3) timeLabel.grid(row=2, column=1) inputDate.grid(row=3, column=2) dateLabel.grid(row=3, column=1)
def body(self, master): frm_base = Frame(master) frm_base.pack(fill=BOTH) Label(frm_base, height="2", width="30", text="Account:", bg=BUTTON_COLOR, font=BUTTON_FONT, fg=BUTTON_FONT_COLOR).pack(padx=15, pady=5) accounts = self.__user.accounts_names self.__account_from.set(accounts[0]) op = OptionMenu(frm_base, self.__account_from, *accounts) op.pack(padx=5, pady=5) op.configure(relief=GROOVE, width="25", height="2", bg=DATA_COLOR, font=DATA_FONT, fg=DATA_FONT_COLOR) Label(frm_base, height="2", width="30", text="Category:", bg=BUTTON_COLOR, font=BUTTON_FONT, fg=BUTTON_FONT_COLOR).pack(padx=5, pady=5) self.__category_to.set(self.__categories[0]) op1 = OptionMenu(frm_base, self.__category_to, *self.__categories) op1.pack(padx=5, pady=5) op1.configure(relief=GROOVE, width="25", height="2", bg=DATA_COLOR, font=DATA_FONT, fg=DATA_FONT_COLOR) Label(frm_base, height="2", width="30", text="Amount:", bg=BUTTON_COLOR, font=BUTTON_FONT, fg=BUTTON_FONT_COLOR).pack(padx=5, pady=5) self.__amount = Entry(frm_base, width="30") self.__amount.insert(END, "0.0") self.__amount.pack(padx=5, pady=5) Label(frm_base, height="2", width="30", text="Date:", bg=BUTTON_COLOR, font=BUTTON_FONT, fg=BUTTON_FONT_COLOR).pack(padx=5, pady=5) self.__date = tkcalendar.DateEntry(frm_base, date_pattern='dd-mm-y') self.__date.pack(padx=5, pady=5) self.__date.set_date(datetime.date.today()) Label(frm_base, height="2", width="30", text="Description:", bg=BUTTON_COLOR, font=BUTTON_FONT, fg=BUTTON_FONT_COLOR).pack(padx=5, pady=5) self.__description = Entry(frm_base, width="30") self.__description.pack(padx=5, pady=5) return frm_base
def create_widgets(self): '''Tabs''' self.tab_parent = ttk.Notebook(self.root) self.main_tab = ttk.Frame(self.tab_parent) self.search_tab = ttk.Frame(self.tab_parent) #self.statistics_tab = ttk.Frame(self.tab_parent) self.tab_parent.add(self.main_tab, text='Νέο Έγγραφο') self.tab_parent.add(self.search_tab, text='Αναζήτηση') #self.tab_parent.add(self.statistics_tab, text='Στατιστικά') self.tab_parent.pack(expand=True, fill='both') '''Main Tab''' self.f1_1 = tk.LabelFrame( self.main_tab, text='Αιτία Ακύρωσης', bg="lightyellow", padx=5, pady=5) #font='"Segoe UI" 12 bold', fg="red") self.f1_1.pack(expand=True, fill='both') self.reason_variable = tk.StringVar() self.loss = tk.Radiobutton(self.f1_1, text='Απώλεια', variable=self.reason_variable, value='Απώλεια', bg='lightyellow', activebackground='lightyellow', tristatevalue=0) self.loss.pack(side='left', expand=True) self.theft = tk.Radiobutton(self.f1_1, text='Κλοπή', variable=self.reason_variable, value='Κλοπή', bg='lightyellow', activebackground='lightyellow', tristatevalue=0) self.theft.pack(side='left', expand=True) self.confiscated = tk.Radiobutton( self.f1_1, text='Κατάσχεση', variable=self.reason_variable, value='Κατάσχεση', bg='lightyellow', activebackground='lightyellow', tristatevalue=0) #font='TkDefaultFont 11') self.confiscated.pack(side='left', expand=True) self.f1_2 = tk.LabelFrame(self.main_tab, text='Στοιχεία Δελτίου', bg="lightyellow", padx=5, pady=5) self.f1_2.pack(expand=True, fill='both') tk.Label(self.f1_2, text='Αριθμός Δελτίου:', bg="lightyellow").grid(row=0, column=0) self.id_number_entry = tk.Entry(self.f1_2) self.id_number_entry.grid(row=0, column=1, sticky='we') tk.Label(self.f1_2, text='Επώνυμο:', bg="lightyellow").grid(row=2, column=0) self.surname_entry = tk.Entry(self.f1_2) self.surname_entry.grid(row=2, column=1, sticky='we') tk.Label(self.f1_2, text='Όνομα:', bg="lightyellow").grid(row=3, column=0) self.name_entry = tk.Entry(self.f1_2) self.name_entry.grid(row=3, column=1, sticky='we') for col in range(3): self.f1_2.grid_columnconfigure(col, weight=1, minsize=183) self.f1_3 = tk.LabelFrame(self.main_tab, text='Στοιχεία Εγγράφου', bg="lightyellow", padx=5, pady=5) self.f1_3.pack(expand=True, fill='both') self.f1_3_1 = tk.Frame(self.f1_3, bg="lightyellow", padx=5, pady=5) self.f1_3_1.pack(expand=True, fill='both') self.office_variable = tk.IntVar() self.embassy = tk.Radiobutton(self.f1_3_1, text=self.office_dict[1], variable=self.office_variable, value=1, bg='lightyellow', activebackground='lightyellow') self.embassy.pack(side='left', fill='both', expand=True) self.embassy.bind( '<ButtonRelease-1>', lambda event, office_type=1: data.create_office_tup(office_type)) self.gen_con = tk.Radiobutton(self.f1_3_1, text=self.office_dict[2], variable=self.office_variable, value=2, bg='lightyellow', activebackground='lightyellow') self.gen_con.pack(side='left', fill='both', expand=True) self.gen_con.bind( '<ButtonRelease-1>', lambda event, office_type=2: data.create_office_tup(office_type)) self.hon_gen_con = tk.Radiobutton(self.f1_3_1, text=self.office_dict[3], variable=self.office_variable, value=3, bg='lightyellow', activebackground='lightyellow') self.hon_gen_con.pack(side='left', fill='both', expand=True) self.hon_gen_con.bind( '<ButtonRelease-1>', lambda event, office_type=3: data.create_office_tup(office_type)) self.np_gen_con = tk.Radiobutton(self.f1_3_1, text=self.office_dict[4], variable=self.office_variable, value=4, bg='lightyellow', activebackground='lightyellow') self.np_gen_con.pack(side='left', fill='both', expand=True) self.np_gen_con.bind( '<ButtonRelease-1>', lambda event, office_type=4: data.create_office_tup(office_type)) self.port_auth = tk.Radiobutton(self.f1_3_1, text=self.office_dict[5], variable=self.office_variable, value=5, bg='lightyellow', activebackground='lightyellow') self.port_auth.pack(side='left', fill='both', expand=True) self.port_auth.bind( '<ButtonRelease-1>', lambda event, office_type=5: data.create_office_tup(office_type)) self.f1_3_2 = tk.Frame(self.f1_3, bg="lightyellow", padx=5, pady=5) self.f1_3_2.pack(expand=True, fill='both') tk.Label(self.f1_3_2, text='Προξενική/Λιμενική Αρχή:', bg="lightyellow").grid(row=0, column=0) self.office_name_variable = tk.StringVar() self.office_name_variable.set("Επιλέξτε από τη λίστα...") self.office_name_combo = ttk.Combobox( self.f1_3_2, textvariable=self.office_name_variable, values=(), state='readonly') self.office_name_combo.bind('<<ComboboxSelected>>', self.combobox_selection) self.office_name_combo.grid(row=0, column=1, sticky='we') tk.Button(self.f1_3_2, text='Νέα Προξενική Αρχή', command=self.new_office).grid(row=0, column=2) tk.Label(self.f1_3_2, text='Αριθμός Πρωτοκόλλου:', bg="lightyellow").grid(row=1, column=0) self.protocol_num_entry = tk.Entry(self.f1_3_2) self.protocol_num_entry.grid(row=1, column=1, sticky='we') tk.Label(self.f1_3_2, text='Ημερομηνία Πρωτοκόλλου:', bg="lightyellow").grid(row=2, column=0) self.protocol_date_entry = tkcalendar.DateEntry( self.f1_3_2, date_pattern='dd/mm/y', locale='el_GR' ) #width=12, background='darkblue', foreground='white', borderwidth=2 self.protocol_date_entry.grid(row=2, column=1, sticky='we') self.protocol_date_entry.delete(0, 'end') for col in range(3): self.f1_3_2.grid_columnconfigure(col, weight=1, minsize=183) self.f1_5 = tk.Frame(self.main_tab, bg="lightyellow", padx=5, pady=5) self.f1_5.pack(expand=True, fill='both', side="bottom") self.new_button = tk.Button(self.f1_5, text='Νέο Έγγραφο', command=self.reset) self.create_button = tk.Button(self.f1_5, text='Δημιουργία Εγγράφου', command=self.get_values) self.create_button.grid(row=0, column=1, sticky='ns') tk.Button(self.f1_5, text='Έξοδος', command=self.exit).grid(row=0, column=2, sticky='ns') for col in range(3): self.f1_5.grid_columnconfigure(col, weight=1, minsize=183) self.f1_4 = tk.LabelFrame(self.main_tab, text='Άλλα Έγγραφα', bg="lightyellow", padx=5, pady=5) self.f1_4.pack(expand=True, fill='both', side="left") self.other_doc_passport_var = tk.IntVar() tk.Checkbutton(self.f1_4, text='Διαβατήριο', bg="lightyellow", activebackground='lightyellow', variable=self.other_doc_passport_var, onvalue=1, offvalue=0).pack(side='left', expand=True, fill='both') self.other_doc_driver_var = tk.IntVar() tk.Checkbutton(self.f1_4, text='Άδεια Ικανότητας Οδήγησης', bg="lightyellow", activebackground='lightyellow', variable=self.other_doc_driver_var, onvalue=1, offvalue=0).pack(side='left', expand=True, fill='both') self.f1_4_1 = tk.LabelFrame(self.main_tab, text='Αίτηση - Καρτέλα', bg="lightyellow", padx=5, pady=5) self.f1_4_1.pack(expand=True, fill='both', side="left") self.card_var = tk.IntVar() tk.Checkbutton(self.f1_4_1, text='Χρειάζεται σκανάρισμα η καρτέλα;', bg="lightyellow", activebackground='lightyellow', variable=self.card_var).pack(side='left', expand=True, fill='both') '''Search Tab''' self.f2 = tk.LabelFrame(self.search_tab, text="Κριτήρια Αναζήτησης", bg="lightyellow", padx=5, pady=5) self.f2.pack(expand=True, fill='both') tk.Label(self.f2, text='Αριθμός Δελτίου:', bg="lightyellow").grid(row=0, column=0) self.id_number_search_entry = tk.Entry(self.f2) self.id_number_search_entry.grid(row=0, column=1, sticky='we') tk.Label(self.f2, text='Επώνυμο:', bg="lightyellow").grid(row=1, column=0) self.surname_search_entry = tk.Entry(self.f2) self.surname_search_entry.grid(row=1, column=1, sticky='we') tk.Label(self.f2, text='Προξενική/Λιμενική Αρχή:', bg="lightyellow").grid(row=2, column=0) self.office_search_tup = data.create_office_search_tup('search') self.office_name_search_variable = tk.StringVar() self.office_name_search = ttk.Combobox( self.f2, textvariable=self.office_name_search_variable, values=self.office_search_tup, state='readonly') self.office_name_search.current(0) self.office_name_search.grid(row=2, column=1, sticky='we') tk.Button(self.f2, text='Επεξεργασία Αρχών', command=self.edit_office).grid(row=2, column=2) for col in range(3): self.f2.grid_columnconfigure(col, weight=1, minsize=183) self.f3 = tk.LabelFrame(self.search_tab, text="Ταξινόμηση Κατά", bg="lightyellow", padx=5, pady=5) self.f3.pack(expand=True, fill='both') self.sort_by_variable = tk.StringVar(value='timestamp') self.sort_by_creation_date = tk.Radiobutton( self.f3, text='Ημερομηνία Δημιουργίας', variable=self.sort_by_variable, value='timestamp', bg='lightyellow', activebackground='lightyellow') self.sort_by_creation_date.pack(fill='both', expand=True, side='left') self.sort_by_name = tk.Radiobutton(self.f3, text='Επώνυμο', variable=self.sort_by_variable, value='surname, name', bg='lightyellow', activebackground='lightyellow') self.sort_by_name.pack(fill='both', expand=True, side='left') self.sort_by_prot_date = tk.Radiobutton(self.f3, text='Ημερομηνία Πρωτοκόλλου', variable=self.sort_by_variable, value='protocol_date', bg='lightyellow', activebackground='lightyellow') self.sort_by_prot_date.pack(fill='both', expand=True, side='left') tk.Button(self.f3, text='Αναζήτηση', command=self.get_search_pars).pack(fill='both', expand=True, side='left') self.f4 = tk.LabelFrame(self.search_tab, text="Αποτελέσματα", bg="lightyellow", padx=5, pady=5) self.f4.pack(expand=True, fill='both') self.tree = ttk.Treeview(self.f4, style='Treeview') self.tree["columns"] = tuple(f'#{_i}' for _i in range(1, 10)) self.column_tup = ('', 'Α/Α', 'Αρ. Δελτίου', 'Επώνυμο', 'Όνομα', 'Αιτιολογία', 'Προξενική Αρχή', 'Αρ. Πρωτοκόλλου', 'Ημ. Πρωτοκόλλου', 'Ημ. Δημιουργίας') self.column_widths = [0, 45, 70, 130, 100, 70, 100, 110, 110, 130] #first column is blank for _i in range(len(self.column_tup)): self.tree.heading(f"#{_i}", text=self.column_tup[_i], anchor="w") self.tree.column(f"#{_i}", width=self.column_widths[_i]) self.sbar = ttk.Scrollbar(self.f4, orient="vertical", command=self.tree.yview) self.sbar.pack(side='right', fill='y') self.tree.configure(yscrollcommand=self.sbar.set) self.sbar_1 = ttk.Scrollbar(self.f4, orient="horizontal", command=self.tree.xview) self.sbar_1.pack(side='bottom', fill='x') self.tree.configure(xscrollcommand=self.sbar_1.set) self.tree.pack(side='top', fill='both', expand=True) self.tree.bind('<<TreeviewSelect>>', self.tree_on_select) self.f5 = tk.Frame(self.search_tab, bg="lightyellow", padx=5, pady=5) self.f5.pack(expand=True, fill='both') self.delete_button = ttk.Button(self.f5, text='Διαγραφή', command=data.delete_from_database, state='disabled') self.delete_button.pack(side='right', fill='both') self.edit_button = ttk.Button(self.f5, text='Επεξεργασία', command=data.update_entry_retrieve, state='disabled') self.edit_button.pack(side='right', fill='both') '''Right click menu design''' self.popup_menu = tk.Menu(self.root, tearoff=0) self.popup_menu.add_command(label="Επικόλληση") self.id_number_entry.bind_class("Entry", "<Button-3><ButtonRelease-3>", self.right_click_menu) '''Main window position''' window_centre_position(self.root) '''Create shelve or open''' if not os.path.isfile( os.path.join(self.user_pref_location, "user_pref.dat")): self.create_shelve() self.open_shelve()
def _EditDocs(self): try: self.tabla1.item(self.tabla1.selection())['text'][0] except IndexError as e: msg.showwarning("Mantaro SYS", "Por favor seleccione un item") return cod_recibo = self.tabla1.item(self.tabla1.selection())['values'][0] self.edit_wind = tk.Toplevel() self.edit_wind.title("Editar Docs") self.frame_edicion = tk.LabelFrame(self.edit_wind, text="Editar Docs", width=100) self.frame_edicion.grid(row=0, column=0, padx=3, pady=3, sticky=tk.W) tk.Label(self.frame_edicion, text="Usuario").grid(row=1, column=0, padx=3, pady=3, sticky=tk.E) cmbUsuario = ttk.Combobox(self.frame_edicion, width=18) cmbUsuario.grid(row=1, column=1, padx=3, pady=3, sticky=tk.W) listaUsuarios = list() query = "select IdTrabajador from Usuarios" rows = self._consultas(query) for row in rows: listaUsuarios.append(row[0]) cmbUsuario['values'] = listaUsuarios tk.Label(self.frame_edicion, text="Proveedor").grid(row=2, column=0, padx=3, pady=3, sticky=tk.E) cmbProveedor = ttk.Combobox(self.frame_edicion, width=18) cmbProveedor.grid(row=2, column=1, padx=3, pady=3, sticky=tk.W) listaProveedor = list() query2 = "select IdProv from Proveedor" rows2 = self._consultas(query2) for i in rows2: listaProveedor.append(i[0]) cmbProveedor['values'] = listaProveedor tk.Label(self.frame_edicion, text="Tipo Documento").grid(row=3, column=0, padx=3, pady=3, sticky=tk.E) cmbTipoDoc = ttk.Combobox(self.frame_edicion, width=20) cmbTipoDoc.grid(row=3, column=1, padx=3, pady=3, sticky=tk.W) cmbTipoDoc['values'] = ['Factura', 'Boleta'] tk.Label(self.frame_edicion, text="Fecha Recepcion").grid(row=4, column=0, padx=3, pady=3, sticky=tk.E) fechaRegisto = tkcalendar.DateEntry(self.frame_edicion) fechaRegisto.grid(row=4, column=1, padx=3, pady=3, sticky=tk.W) tk.Label(self.frame_edicion, text="Sub Total").grid(row=5, column=0, padx=3, pady=3, sticky=tk.E) entrada_subtotal = ttk.Entry(self.frame_edicion) entrada_subtotal.grid(row=5, column=1, pady=3, padx=3, sticky=tk.W) tk.Label(self.frame_edicion, text="IGV").grid(row=6, column=0, padx=3, pady=3, sticky=tk.E) entrada_IGV = ttk.Entry(self.frame_edicion) entrada_IGV.grid(row=6, column=1, pady=3, padx=3, sticky=tk.W) tk.Label(self.frame_edicion, text="Total").grid(row=7, column=0, padx=3, pady=3, sticky=tk.E) entrada_total = ttk.Entry(self.frame_edicion) entrada_total.grid(row=7, column=1, pady=3, padx=3, sticky=tk.W) ttk.Button( self.frame_edicion, text="Actualizar", command=lambda: self._EditarDocumento(cod_recibo, cmbUsuario.get( ), cmbProveedor.get( ), cmbTipoDoc.get(), fechaRegisto.get_date(), entrada_subtotal.get( ), entrada_IGV.get(), entrada_total.get())).grid(row=8, column=1, pady=3, padx=3, sticky=tk.W)
def edit_entry(self): self.edit_window = tk.Toplevel(self.root) self.edit_window.title("Επεξεργασία Εγγραφής") self.edit_window.resizable(width='false', height='false') #self.root.wait_window(self.new_office_window) #self.new_office_window.geometry('1000x400') self.f_edit_entry = tk.Frame(self.edit_window, bg="lightyellow", padx=5, pady=5) self.f_edit_entry.pack(expand=True, fill='both') edit_labels = [ 'Αριθμός Δελτίου', 'Επώνυμο', 'Όνομα', 'Αιτία Ακύρωσης', 'Προξενική/Λιμενική Αρχή', 'Αριθμός Πρωτοκόλλου', 'Ημερομηνία Πρωτοκόλλου' ] for count, label in enumerate(edit_labels): tk.Label(self.f_edit_entry, text=f'{label}:', bg="lightyellow").grid(row=count, column=0) self.edit_id_number = tk.Entry(self.f_edit_entry) self.edit_id_number.grid(row=0, column=1) self.edit_id_number.insert(0, data.edit_id_number) self.edit_surname = tk.Entry(self.f_edit_entry) self.edit_surname.grid(row=1, column=1) self.edit_surname.insert(0, data.edit_surname) self.edit_name = tk.Entry(self.f_edit_entry) self.edit_name.grid(row=2, column=1) self.edit_name.insert(0, data.edit_name) self.edit_reason = tk.Entry(self.f_edit_entry) self.edit_reason_variable = tk.StringVar() self.reason_tup = ('Απώλεια', 'Κλοπή', 'Κατάσχεση') self.edit_reason = ttk.Combobox( self.f_edit_entry, textvariable=(self.edit_reason_variable), values=self.reason_tup, state='readonly') self.edit_reason.grid(row=3, column=1) self.edit_reason.current(self.reason_tup.index(data.edit_reason)) self.edit_office_tup = data.create_office_search_tup() self.edit_office_name_variable = tk.StringVar() self.edit_office_name = ttk.Combobox( self.f_edit_entry, textvariable=self.edit_office_name_variable, values=self.edit_office_tup, state='readonly') self.edit_office_name.current( self.edit_office_tup.index(data.edit_office_name)) self.edit_office_name.grid(row=4, column=1) self.edit_protocol_num = tk.Entry(self.f_edit_entry) self.edit_protocol_num.grid(row=5, column=1) self.edit_protocol_num.insert(0, data.edit_protocol_num) self.edit_protocol_date = tkcalendar.DateEntry(self.f_edit_entry, date_pattern='dd/mm/y', locale='el_GR') self.edit_protocol_date.grid(row=6, column=1) self.edit_protocol_date.delete(0, 'end') self.edit_protocol_date.insert(0, data.edit_protocol_date) self.f1_edit_entry = tk.Frame(self.edit_window, bg="lightyellow", padx=5, pady=5) self.f1_edit_entry.pack(expand=True, fill='both') tk.Button(self.f1_edit_entry, text='Ενημέρωση Εγγραφής', command=data.insert_update_entry).pack() window_centre_position(self.edit_window)
def __init__(self, master, app, *args, **kwargs): tk.Frame.__init__(self, master, args, **kwargs) self.app = app self.rowsPerPageVar = tk.IntVar(self) self.colsPerPageVar = tk.IntVar(self) self.rowsPerPageVar.set(3) self.colsPerPageVar.set(3) self.row1 = tk.Frame(self) self.row1.pack(fill=tk.X) label1 = tk.Label(self.row1, text='Возраст от') label1.pack(side=tk.LEFT, pady=5) opts = list(range(16, 50)) self.varAgeFrom = tk.IntVar(self) self.varAgeFrom.set(opts[0]) self.ageFromSel = tk.OptionMenu(self.row1, self.varAgeFrom, *opts) self.ageFromSel.pack(side=tk.LEFT, pady=5) label2 = tk.Label(self.row1, text='до') label2.pack(side=tk.LEFT) self.varAgeTo = tk.IntVar(self) self.varAgeTo.set(opts[14]) self.ageToSel = tk.OptionMenu(self.row1, self.varAgeTo, *opts) self.ageToSel.pack(side=tk.LEFT) label3 = tk.Label(self.row1, text='лет') label3.pack(side=tk.LEFT) self.varType = tk.StringVar(self) self.varType.set('все') self.hdTypeSel = tk.OptionMenu(self.row1, self.varType, *(['все'] + list(hdTypes.keys()))) self.hdTypeSel.pack(side=tk.LEFT) gender_opts = ['all', 'male', 'female', 'None'] self.varGender = tk.StringVar(self) self.varGender.set(gender_opts[0]) self.genderSel = tk.OptionMenu(self.row1, self.varGender, *gender_opts) self.genderSel.pack(side=tk.LEFT) self.bioParamsFrame = tk.Frame(self.row1) self.bioParamsFrame.pack(side=tk.LEFT) self.varBioPhysical = tk.IntVar(self) self.varBioIntellectual = tk.IntVar(self) self.varBioEmotional = tk.IntVar(self) self.varBioPhysical.set(50) self.varBioIntellectual.set(50) self.varBioEmotional.set(50) self.bioPhysicalScale = tk.Scale(self.bioParamsFrame, from_=0, to=100, resolution=1, orient=tk.HORIZONTAL, variable=self.varBioPhysical) self.bioIntellectualScale = tk.Scale(self.bioParamsFrame, from_=0, to=100, resolution=1, orient=tk.HORIZONTAL, variable=self.varBioIntellectual) self.bioEmotionalScale = tk.Scale(self.bioParamsFrame, from_=0, to=100, resolution=1, orient=tk.HORIZONTAL, variable=self.varBioEmotional) self.bioPhysicalScale.grid(row=0, column=0) self.bioIntellectualScale.grid(row=0, column=1) self.bioEmotionalScale.grid(row=0, column=2) bioPhysicalLabel = tk.Label(self.bioParamsFrame, text='физ', font='Helvetica 8') bioPhysicalLabel.grid(row=1, column=0) bioIntellectualLabel = tk.Label(self.bioParamsFrame, text='инт', font='Helvetica 8') bioIntellectualLabel.grid(row=1, column=1) bioEmotionalLabel = tk.Label(self.bioParamsFrame, text='эмо', font='Helvetica 8') bioEmotionalLabel.grid(row=1, column=2) # --------------------------------------- self.row2 = tk.Frame(self) self.row2.pack(fill=tk.X) self.varCity = tk.StringVar(self) self.varCity.set('Санкт-Петербург') cityEntryLabel = tk.Label(self.row2, text="city:") cityEntryLabel.pack(side=tk.LEFT) self.cityEntry = tk.Entry(self.row2, textvariable=self.varCity, width=32) self.cityEntry.pack(side=tk.LEFT, padx=5) self.varName = tk.StringVar(self) self.varName.set('') self.nameEntryLabel = tk.Label(self.row2, text="Name") self.nameEntry = tk.Entry(self.row2, textvariable=self.varName, width=30) self.nameEntry.pack(side=tk.LEFT, padx=5) init_month = datetime.now().month - 1 init_year = datetime.now().year if init_month == 0: init_month = 12 init_year -= 1 self.minLastLoginDate = tkcalendar.DateEntry(self.row2, month=init_month, year=init_year, locale='ru_RU') self.minLastLoginDate.pack(side=tk.LEFT) tooltip.Hovertip(self.minLastLoginDate, text='Minimum last login date') # --------------------------------------- self.row3 = tk.Frame(self) self.row3.pack(fill=tk.X) rowsPerPageList = list(range(1, 10)) self.rowsPerPage = tk.OptionMenu(self.row3, self.rowsPerPageVar, *rowsPerPageList) colsPerPageList = list(range(2, 6)) self.colsPerPage = tk.OptionMenu(self.row3, self.colsPerPageVar, *colsPerPageList) tk.Label(self.row3, text='rows').pack(side=tk.LEFT) self.rowsPerPage.pack(side=tk.LEFT) tk.Label(self.row3, text='cols').pack(side=tk.LEFT) self.colsPerPage.pack(side=tk.LEFT) self.resizeCardsAreaButton = tk.Button(self.row3, text='Resize cards area', command=self.resize_cards_area) self.resizeCardsAreaButton.pack(side=tk.LEFT, padx=5) self.showSimpleCardsButton = tk.Button(self.row3, text='All simple cards', command=self.show_simple_cards) self.showSimpleCardsButton.pack(side=tk.LEFT, padx=5) self.showFilteredUserCardsButton = tk.Button( self.row3, text='Show user cards', command=self.show_filtered_cards) self.showFilteredUserCardsButton.pack(side=tk.LEFT, padx=5)
def create_widgets(self): self.register_label = Label(self, text="Aggiungi un'azienda", font=("bold", 25), pady=20) self.register_label.place(relx=0.5, rely=0.1, anchor=CENTER) self.nome_label = Label(self, text="Nome:", font=(18)) self.nome_label.place(relx=0.3, rely=0.2, anchor=CENTER) self.nome_text = StringVar() self.nome_textbox = Entry(self, width=20, textvariable=self.nome_text) self.nome_textbox.place(relx=0.5, rely=0.2, anchor=CENTER) markets = [ 'Other', 'Software', 'Curated Web', 'Analytics', 'E-Commerce', 'Games', 'Semiconductors', 'Clean Technology', 'Finance', 'Mobile', 'Biotechnology', 'Search', 'Advertising', 'Security', 'Health Care', 'Enterprise Software', 'Social Media', 'Messaging', 'Web Hosting', 'Hardware + Software', 'Education' ] self.market_label = Label(self, text="Settore:", font=(18)) self.market_label.place(relx=0.3, rely=0.3, anchor=CENTER) self.market_text = StringVar() self.market_combobox = ttk.Combobox(self, values=markets) self.market_combobox.place(relx=0.5, rely=0.3, anchor=CENTER) self.total_investment_label = Label(self, text="Totale fondi ricevuti:", font=(18)) self.total_investment_label.place(relx=0.3, rely=0.4, anchor=CENTER) self.total_investment_text = StringVar() self.total_investment_textbox = Entry( self, width=20, textvariable=self.total_investment_text) self.total_investment_textbox.place(relx=0.5, rely=0.4, anchor=CENTER) self.funding_rounds_label = Label(self, text="Numero investimenti ricevuti:", font=(18)) self.funding_rounds_label.place(relx=0.3, rely=0.5, anchor=CENTER) self.funding_rounds_text = StringVar() self.funding_rounds_textbox = Entry( self, width=20, textvariable=self.funding_rounds_text) self.funding_rounds_textbox.place(relx=0.5, rely=0.5, anchor=CENTER) self.founded_at_label = Label(self, text="Fondata nel:", font=(18)) self.founded_at_label.place(relx=0.3, rely=0.6, anchor=CENTER) self.founded_at_cal = tkcalendar.DateEntry(self, bg="darkblue", fg="white") self.founded_at_cal.place(relx=0.5, rely=0.6, anchor=CENTER) self.first_funding_at_label = Label(self, text="Data primo investimento:", font=(18)) self.first_funding_at_label.place(relx=0.3, rely=0.7, anchor=CENTER) self.first_funding_at_cal = tkcalendar.DateEntry(self, bg="darkblue", fg="white") self.first_funding_at_cal.place(relx=0.5, rely=0.7, anchor=CENTER) self.last_funding_at_label = Label(self, text="Data ultimo investimento:", font=(18)) self.last_funding_at_label.place(relx=0.3, rely=0.8, anchor=CENTER) self.last_funding_at_cal = tkcalendar.DateEntry(self, bg="darkblue", fg="white") self.last_funding_at_cal.place(relx=0.5, rely=0.8, anchor=CENTER) self.inserimento_button = Button(self, text="Inserisci azienda", font=(18), width=20, command=lambda: self.inserisci()) self.inserimento_button.place(relx=0.5, rely=0.9, anchor=CENTER) self.indietro_button = Button(self, text="Indietro", font=(18), width=10, command=lambda: self.controller. show_frame(HomePage.Home, self.username)) self.indietro_button.place(relx=0.5, rely=0.95, anchor=CENTER)