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 workspace_onclick_event(root, event, mode: str): """ Автор: Цель: обработчик события нажатия на рабочее пространство таблицы данных Вход: объект главного окна, информация события, вид нажатия (одинарное, двойное) Выход: нет """ glob.sort = not glob.sort tree = glob.table4base # одиночное нажатие по заголовку - сортировка if mode == "Single": if tree.identify_region(event.x, event.y) == "heading": column = tree.identify_column(event.x) index4column = int(column[1:]) glob.current_base = glob.current_base.sort_values( by=glob.columns[index4column - 1], axis=0, ascending=glob.sort, ignore_index=True) glob.current_base = glob.correct_base_values(glob.current_base) glob.update_workspace() # двойное нажатие по полю - редактирование elif mode == "Double": edit_event(root)
def create_base(path: str) -> str: """ Автор: Подкопаева П. Цель: создает новую чистую базу Вход: путь Выход: новая база """ if ".csv" in path: base_name = path[path.rfind('/') + 1:path.rfind('.')] else: base_name = path[path.rfind('/') + 1:] path += ".csv" new_base = pd.DataFrame(columns=constants.origin_columns) new_base = glob.correct_base_values(new_base) glob.work_list[base_name] = new_base new_base.to_csv(path, index=False) return base_name
def create_base(path: str) -> str: """ Автор: Цель: создает новую чистую базу Вход: путь Выход: новая база """ # на всякий случай добавил проверку на наличие расширения в пути if ".csv" in path: base_name = path[path.rfind('/') + 1:path.rfind('.')] else: base_name = path[path.rfind('/') + 1:] path += ".csv" new_base = pd.DataFrame(columns=constants.origin_columns) new_base = glob.correct_base_values(new_base) glob.work_list[base_name] = new_base new_base.to_csv(path, index=False) return base_name
def make_changes_event(win: tk.Toplevel, index: int, new_values: dict): """ Автор: Цель: обработчик события кнопки сохранения в окне редактирования поля таблицы Вход: объект окна редактирования tkinter для его закрытия после нажатия кнопки сохранить, текущий индекс выбранного поля таблицы, новые значения для записи в поле таблицы. Выход: нет """ # приводим все числа к числовому типу glob.current_base.iloc[index, :] = [x.get() for x in new_values.values()] # заменяем пустые строчки на nan и приводим тип всех столбцов таблицы к нужному типу glob.current_base = glob.correct_base_values(glob.current_base) glob.work_list[glob.current_base_name] = glob.current_base item = glob.table4base.selection() for key, value in new_values.items(): glob.table4base.set(item, column=key, value=value.get()) glob.mark_changes() glob.update_list() glob.update_workspace() win.destroy()
def read_base(path: str) -> str: """ Автор: Ковязин В. Цель: загружает базу из файла Вход: путь Выход: новая база """ # если при создании базы возникло исключение, то перебрасываем исключение дальше try: # в прочитанной базе может не оказаться всех нужных нам столбцов base = pd.read_csv(path, header=0)[constants.origin_columns] except Exception: raise base_name = path[path.rfind('\\') + 1:path.rfind('.')] i = 0 # если база уже загружена в программу, то в программу добавляется ее копию с постфиксом if base_name in glob.work_list.keys(): while base_name + "(" + str(i) + ")" in glob.work_list.keys(): i += 1 base_name += "(" + str(i) + ")" base = glob.correct_base_values(base) glob.work_list[base_name] = base return base_name
Цель: Модуль для обработки базы данных """ import pandas as pd from Scripts import constants from Scripts import globalvars as glob # ['Year', 'Month', 'Day', 'Name', 'Location', 'Country', 'Latitude', # 'Longitude', 'Elevation', 'Type', 'VEI', 'Agent', # 'DEATHS', 'INJURIES', 'MISSING', 'DAMAGE_MILLIONS_DOLLARS', 'TSU', 'EQ'] bd = pd.read_csv('../Data/volcano.csv', header=0)[[ 'Year', 'Month', 'Day', 'Name', 'Location', 'Country', 'Latitude', 'Longitude', 'Elevation', 'Type', 'VEI', 'Agent', 'DEATHS', 'INJURIES', 'MISSING', 'DAMAGE_MILLIONS_DOLLARS', 'TSU', 'EQ' ]] glob.work_list['Volcano Eruption'] = glob.correct_base_values(bd) def read_base(path: str) -> str: """ Автор: Ковязин В. Цель: загружает базу из файла Вход: путь Выход: новая база """ # если при создании базы возникло исключение, то перебрасываем исключение дальше try: # в прочитанной базе может не оказаться всех нужных нам столбцов base = pd.read_csv(path, header=0)[constants.origin_columns] except Exception: raise