def make_view_toolbar(view_id, root, account): clear_view_toolbar() view_name = DATABASE_VIEW_NAMES[view_id] print('Grid viewer toolbar is filling...') global view_toolbar insert_button = main_window.ToolbarButton(view_toolbar, text='Вставить...') insert_button.pack(side=RIGHT, fill=Y) insert_button.config( command=(lambda: insert_into_view(view_id, root, account))) if account.is_admin(): delete_button = main_window.ToolbarButton(view_toolbar, text='Удалить...') # delete_button.pack(side=RIGHT, fill=Y) delete_button.config( command=(lambda: delete_data_from(view_name, root, account))) update_button = main_window.ToolbarButton(view_toolbar, text='Обновить...') # update_button.pack(side=RIGHT, fill=Y) update_button.config( command=(lambda: update_data_of(view_name, root, account)))
def make_table_toolbar(table_id, root, account): clear_table_toolbar() # table_name = DATABASE_TABLE_NAMES[table_id] print('Grid viewer toolbar is filling...') global table_toolbar show_child_records_button = main_window.ToolbarButton( table_toolbar, text='Дочерние записи...') show_child_records_button.pack(side=LEFT, fill=Y) show_child_records_button.config( command=(lambda: show_child_records(table_id, root, account))) if account.is_admin(): insert_button = main_window.ToolbarButton(table_toolbar, text='Вставить...') insert_button.pack(side=RIGHT, fill=Y) insert_button.config( command=(lambda: insert_into_table(table_id, root, account))) delete_button = main_window.ToolbarButton(table_toolbar, text='Удалить...') delete_button.pack(side=RIGHT, fill=Y) delete_button.config( command=(lambda: delete_data_from(table_id, root, account))) update_button = main_window.ToolbarButton(table_toolbar, text='Изменить...') update_button.pack(side=RIGHT, fill=Y) update_button.config( command=(lambda: update_data_of(table_id, root, account)))
def ask_table_row(table_id, root, account): table_name = INTERFACE_TABLE_NAMES[table_id].upper() window = Toplevel(root) window.title('Выбор записи в таблице ' + table_name + ' [' + account.get_rights() + ']') window.resizable(width=True, height=True) window.state('zoomed') toolbar = Frame(window) toolbar.pack(side=BOTTOM, expand=NO, fill=X) column_names = INTERFACE_TABLE_COLUMN_NAMES[table_id] table_data = db_helper.select_all_from(DATABASE_TABLE_NAMES[table_id]) constraint = db_viewer.get_table_constraint(table_id, account) grid_viewer = db_viewer.ScrolledGridViewer(window, column_names, table_data, constraint) grid_viewer.pack(expand=YES, fill=BOTH) table_name_label = Label(toolbar) table_name_label.config(text='Выберите запись в таблице ' + table_name, font=TOOLBAR_BUTTON_FONT) table_name_label.pack(side=LEFT, expand=NO, fill=Y) def cancel(): nonlocal cancel_button_pressed, window cancel_button_pressed = True window.destroy() cancel_button = main_window.ToolbarButton(toolbar, text='Отмена') cancel_button.config(width=20) cancel_button.config(font=TOOLBAR_BUTTON_FONT, bg='#F55', fg='#000') cancel_button.config(command=cancel) cancel_button.pack(side=RIGHT, expand=NO, fill=X, padx=10, pady=10) def confirm(): return not (grid_viewer.selected_item is None) # and len(grid_viewer.selected_item['values']) > 0 confirm_button = main_window.ToolbarButton(toolbar, text='ОК') confirm_button.config(width=20) confirm_button.config(font=TOOLBAR_BUTTON_FONT, bg='#0F0', fg='#000') confirm_button.config(command=(lambda: confirm() and window.destroy())) confirm_button.pack(side=RIGHT, expand=NO, fill=Y, padx=10, pady=10) cancel_button_pressed = False window.protocol('WM_DELETE_WINDOW', lambda: cancel()) window.focus_set() window.grab_set() window.wait_window() if not cancel_button_pressed: return grid_viewer.selected_item['values'] return None
def ask_view_inserted_data(view_id, root, account): view_name = INTERFACE_VIEW_NAMES[view_id].upper() window = Toplevel() window.title('Вставка записи в представление ' + view_name + ' [' + account.get_rights() + ']') window.resizable(width=False, height=False) # window.state('zoomed') toolbar = Frame(window) toolbar.pack(side=BOTTOM, expand=NO, fill=X) view_name_label = Label(window) view_name_label.config(text='Заполните поля', font=TOOLBAR_BUTTON_FONT) view_name_label.pack(side=TOP, expand=NO, fill=Y) frame = Frame(window) frame.pack(side=TOP, expand=YES, fill=BOTH) # date_entry = DateEntry(toolbar, HORIZONTAL) # date_entry.pack() # result = [] widgets = [] vars = [] column_names = INTERFACE_VIEW_COLUMN_NAMES[view_id] column_types = VIEW_COLUMN_TYPES[view_id] for i, column_name in enumerate(column_names): label = Label(frame) label.config(text=column_name, font=ASK_INSERTED_DATA_LABEL_FONT) label.grid(row=i, column=0, sticky=E, padx=20, pady=10) # label.pack(side=LEFT, expand=YES, fill=BOTH) if column_types[i] == 'date': date_entry = DateEntry(frame, HORIZONTAL) date_entry.grid(row=i, column=1, sticky=NSEW, padx=20, pady=10) var = None widgets.append(date_entry) vars.append(var) elif column_types[i] in ENTRY_TABLE_COLUMN_TYPES_SET: entry = Entry(frame) entry.config(width=30, font=ASK_INSERTED_DATA_ENTRY_FONT) entry.config(show='', insertofftime=500, insertontime=500) # entry.pack(side=RIGHT, expand=YES, padx=10, pady=10) entry.grid(row=i, column=1, sticky=NSEW, padx=20, pady=10) entry.focus_set() if column_types[i] == 'float': var = DoubleVar() elif column_types[i] == 'bigint' or column_types[i] == 'int': var = IntVar() elif column_types[i] == 'nvarchar': var = StringVar() entry.config(textvariable=var) widgets.append(entry) vars.append(var) else: print('Unknown SQL type') def cancel(): nonlocal cancel_button_pressed, window cancel_button_pressed = True window.destroy() cancel_button = main_window.ToolbarButton(toolbar, text='Отмена') cancel_button.config(width=20) cancel_button.config(font=TOOLBAR_BUTTON_FONT, bg='#F55', fg='#000') cancel_button.config(command=cancel) cancel_button.pack(side=RIGHT, expand=NO, fill=X, padx=20, pady=10) def validate(): for i, column_type in enumerate(column_types): if column_type in ENTRY_TABLE_COLUMN_TYPES_SET: entry_value = vars[i].get() print(entry_value) elif column_type == 'date': # date date = widgets[i].get_value() if date == (None, None, None): return False return True # date = date_entry.get_value() # return not (date is None) confirm_button = main_window.ToolbarButton(toolbar, text='ОК') confirm_button.config(width=20) confirm_button.config(font=TOOLBAR_BUTTON_FONT, bg='#0F0', fg='#000') confirm_button.config(command=(lambda: validate() and window.destroy())) confirm_button.pack(side=RIGHT, expand=NO, fill=Y, padx=20, pady=10) cancel_button_pressed = False window.protocol('WM_DELETE_WINDOW', lambda: cancel()) window.focus_set() window.grab_set() window.wait_window() if cancel_button_pressed: return None result = [] for i, var in enumerate(vars): if column_types[i] == 'date': result.append(widgets[i].get_value()) elif column_types[i] in ENTRY_TABLE_COLUMN_TYPES_SET: result.append(var.get()) else: result.append(None) print('Unknown SQL type') return tuple(result)
def ask_date_period(): window = Toplevel() window.title('Выбор периода') window.resizable(width=False, height=False) toolbar = Frame(window) toolbar.pack(side=BOTTOM, expand=NO, fill=BOTH) begin_date_frame = Frame(window) begin_date_frame.pack(side=LEFT, expand=YES, fill=BOTH) end_date_frame = Frame(window) end_date_frame.pack(side=RIGHT, expand=YES, fill=BOTH) begin_date_label = Label(begin_date_frame, text='Начало', font=ASK_DATE_DIALOG_LABEL_FONT) begin_date_label.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=10, pady=5) end_date_label = Label(end_date_frame, text='Конец', font=ASK_DATE_DIALOG_LABEL_FONT) end_date_label.grid(row=0, column=0, columnspan=2, sticky=NSEW, padx=10, pady=5) begin_day_label = Label(begin_date_frame, text='День', font=ASK_DATE_DIALOG_LABEL_FONT) begin_month_label = Label(begin_date_frame, text='Месяц', font=ASK_DATE_DIALOG_LABEL_FONT) begin_year_label = Label(begin_date_frame, text='Год', font=ASK_DATE_DIALOG_LABEL_FONT) begin_day_label.grid(row=1, column=0, sticky=NSEW, padx=5, pady=10) begin_month_label.grid(row=2, column=0, sticky=NSEW, padx=5, pady=10) begin_year_label.grid(row=3, column=0, sticky=NSEW, padx=5, pady=10) end_day_label = Label(end_date_frame, text='День', font=ASK_DATE_DIALOG_LABEL_FONT) end_month_label = Label(end_date_frame, text='Месяц', font=ASK_DATE_DIALOG_LABEL_FONT) end_year_label = Label(end_date_frame, text='Год', font=ASK_DATE_DIALOG_LABEL_FONT) end_day_label.grid(row=2, column=0, sticky=NSEW, padx=5, pady=10) end_month_label.grid(row=2, column=1, sticky=NSEW, padx=5, pady=10) end_year_label.grid(row=2, column=2, sticky=NSEW, padx=5, pady=10) begin_day, begin_month, begin_year = IntVar(), IntVar(), IntVar() begin_day_control = tix.Control(begin_date_frame) begin_month_control = tix.Control(begin_date_frame) begin_year_control = tix.Control(begin_date_frame) begin_day_control.config(min=1, max=31, value=1, variable=begin_day) begin_month_control.config(min=1, max=12, value=1, variable=begin_month) begin_year_control.config(min=1999, max=2100, value=2010, variable=begin_year) begin_day_control.grid(row=1, column=1, sticky=NSEW, padx=5, pady=5) begin_month_control.grid(row=2, column=1, sticky=NSEW, padx=5, pady=5) begin_year_control.grid(row=3, column=1, sticky=NSEW, padx=5, pady=5) end_day, end_month, end_year = IntVar(), IntVar(), IntVar() end_day_control = tix.Control(end_date_frame) end_month_control = tix.Control(end_date_frame) end_year_control = tix.Control(end_date_frame) end_day_control.config(min=1, max=31, value=1, variable=end_day) end_month_control.config(min=1, max=12, value=1, variable=end_month) end_year_control.config(min=1999, max=2100, value=2010, variable=end_year) end_day_control.grid(row=3, column=0, sticky=NSEW, padx=5, pady=5) end_month_control.grid(row=3, column=1, sticky=NSEW, padx=5, pady=5) end_year_control.grid(row=3, column=2, sticky=NSEW, padx=5, pady=5) def validate(): nonlocal begin_day, begin_month, begin_year, end_day, end_month, end_year begin = (begin_day.get(), begin_month.get(), begin_year.get()) end = (end_day.get(), end_month.get(), end_year.get()) try: print('Good date :') print(datetime.date(*reversed(begin))) print(datetime.date(*reversed(end))) except ValueError: print('Date is bad. Begin : ', begin, 'End :', end) return False return datetime.date(*reversed(begin)) <= datetime.date(*reversed(end)) confirm_button = main_window.ToolbarButton(toolbar, text='ОК') confirm_button.config(width=15) confirm_button.config(font=TOOLBAR_BUTTON_FONT) confirm_button.config(command=(lambda: validate() and window.destroy())) confirm_button.pack(side=LEFT, expand=NO, fill=X, padx=20, pady=10) cancel_button_pressed = False def cancel(): nonlocal cancel_button_pressed, window cancel_button_pressed = True window.destroy() cancel_button = main_window.ToolbarButton(toolbar, text='Отмена') cancel_button.config(width=15) cancel_button.config(font=TOOLBAR_BUTTON_FONT) cancel_button.config(command=cancel) cancel_button.pack(side=LEFT, expand=NO, fill=X, padx=20, pady=10) window.protocol('WM_DELETE_WINDOW', lambda: None) window.focus_set() window.grab_set() window.wait_window() begin = end = None if not cancel_button_pressed: begin = (begin_day.get(), begin_month.get(), begin_year.get()) end = (end_day.get(), end_month.get(), end_year.get()) print('begin :', begin, 'end :', end) return begin, end