def remove_inf(): """ Автор: \nЦель: удаляет строку из таблицы \nВход: корневое окно tkinter для создания окна редактирования, список активных столбцов таблицы \nВыход: нет """ # открыта ли база? if not glob.is_db_open(): return "break" # пуста ли база? if glob.current_base.empty: err.error("База пуста") return "break" ans = err.yes_no( "Вы точно хотите удалить данные?\n Это повлечёт полное удаление данных по выбранному вулкану." ) if ans: # todo: можно ли оптимизировать? index = glob.table4base.index(glob.table4base.selection()) glob.table4base.delete(list(glob.current_base.index)[-1]) glob.current_base = glob.current_base.drop(index=index) glob.current_base.reset_index(inplace=True, drop=True) glob.mark_changes() glob.update_workspace() glob.update_list()
def accept(root, list4values): """ Автор: Баканов Г., Подкопаева П. Цель: Проверка правильности введённых данных в окно Вход: Значение переменной любого типа Выход: нет """ flag = True if (list4values['Day'].get() > 29) and (list4values['Month'].get() == 2): flag = False elif list4values['Day'].get() > 31 or list4values['Day'].get() < 1: flag = False if list4values['Elevation'].get() > 6887: flag = False if (list4values['Latitude'].get() > 180) or (list4values['Latitude'].get() < -180): flag = False if (list4values['Longitude'].get() > 180) or (list4values['Longitude'].get() < -180): flag = False if flag: glob.current_base = glob.current_base.append({k: v.get() for k, v in list4values.items()}, ignore_index=True) glob.current_base = glob.correct_base_values(glob.current_base) glob.work_list[glob.current_base_name] = glob.current_base new_item = glob.table4base.insert('', 'end', iid=len(glob.current_base.index) - 1) for i in glob.columns: glob.table4base.set(new_item, column=i, value=list4values[i].get()) mb.showinfo("Сообщение", "Занесено в базу") glob.mark_changes() glob.update_list() root.destroy() else: err.error("Данные введены некорректно, повторите попытку")
def edit_event(root: tk.Tk): """ Автор: Цель: обработчик события кнопки изменения поля таблицы, открывает окно для изменения данных Вход: корневое окно tkinter для создания окна редактирования Выход: нет """ # открыта ли база? if not glob.is_db_open(): return "break" # пуста ли база? if glob.current_base.empty: err.error("База пуста") return "break" # получаем изменяемую строчку index = glob.table4base.index(glob.table4base.selection()) curr_item = glob.current_base.iloc[index, :] # создаем дочернее окно edit_win = tk.Toplevel(root) edit_win.resizable(0, 0) edit_win.title("Изменения данных поля таблицы") # распологаем все необходимые элементы в этих фреймах frame4check4labels = tk.Frame(edit_win) frame4check4entries = tk.Frame(edit_win) frame4check4button = tk.Frame(edit_win) list4changes = {} for i in constants.origin_columns: # все значения будут строкой text = tk.StringVar() # если атрибут nan или 0, то вместо него отображаем пустую строчку if pd.isna(curr_item[i]) or (i in ['Year', 'Month', 'Day'] and curr_item[i] == 0): text.set("") else: text.set(curr_item[i]) list4changes[i] = text label = tk.Label(frame4check4labels, text=i + ":", anchor="e") entry = tk.Entry(frame4check4entries, textvariable=text) if i not in glob.columns: label.configure(state=tk.DISABLED) entry.configure(state='readonly') entry.pack(side="top", fill="x", expand=True, pady=5) label.pack(side="top", fill="x", expand=True, pady=5) save_changes_button = tk.Button(frame4check4button, text="Сохранить") save_changes_button.pack(expand=False) save_changes_button.bind( "<Button-1>", lambda *args: make_changes_event(edit_win, index, list4changes)) edit_win.rowconfigure(0, pad=5) edit_win.rowconfigure(1, pad=5) edit_win.columnconfigure(0, pad=5) edit_win.columnconfigure(1, pad=5) frame4check4labels.grid(row=0, column=0, sticky="NSW") frame4check4entries.grid(row=0, column=1, sticky="NSW") frame4check4button.grid(row=1, column=0, columnspan=2, sticky="NSEW")
def is_db_open() -> bool: """ Автор: Цель: проверка, окрыта ли база Вход: Нет Выход: true, false """ if current_base is None: err.error("База не выбранна!") return False return True
def apply_column_selection(root: tk.Tk, win: tk.Toplevel, pane: ttk.Panedwindow): """ Автор: Баканов Г. Цель: применяет к программме выбор столбцов (изменяет рабочее пространство) Вход: главное окно, побочное окно выбора столбцов, растягивающийся виджет Выход: нет """ if any(glob.columns_selection.values()): glob.columns = [x for x in glob.columns_selection.keys() if glob.columns_selection[x].get() == 1] open_base(root, pane, glob.current_base_list_id) win.destroy() else: err.error("Не выбран ни один столбец") return "break"
def load_event(*args): """ Автор: Баканов Г. Цель: обработка события загрузки новой базы инструментами OS Вход: Нет Выход: нет """ path = filedialog.askopenfilename(initialdir="../Data/", filetypes=(("Database files", "*.csv"), ("All files", "*.*"))) path = path.replace('/', "\\") try: base_name = hand_base.read_base(path) glob.base_list.insert(tk.END, base_name) except FileNotFoundError: pass except Exception as error: message = str(error) err.error(message[message.find('['):message.find(']') + 1] + " нет в Базе Данных") return "break"