def search_call(root: tk.Tk, pane: ttk.Panedwindow, selector, option: str,
                search_data, save, create):
    if not glob.is_db_open():
        selector.current(0)
        return
    if not glob.is_saved():
        ans = err.yes_no("Сохранить изменения?")
        if ans:
            save()
    filter_option = ''
    if option == "Без фильтра":
        filter_option = 'all'
    elif option == "По названию":
        filter_option = 'Name'
    elif option == "По типу":
        filter_option = 'Type'
    elif option == "По стране":
        filter_option = 'Country'
    elif option == "По цунами":
        filter_option = 'TSU'
    elif option == "По землетрясению":
        filter_option = 'EQ'
    search_result = hand_base.searching(search_data, filter_option)
    # допилите сообщения)))
    if search_result.empty:
        err.warning('Ничего не найдено', True)
        return
    search_result.reset_index(inplace=True, drop=True)
    create()
    glob.work_list[glob.base_list.get(glob.base_list.size() -
                                      1)] = search_result
    open_base(root, pane, glob.base_list.size() - 1)
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()
Exemple #3
0
def choice_map(root: tk.Tk, pane: ttk.Panedwindow):
    global CHOSEN_VALUE_map

    if not glob.is_db_open():
        return "break"

    win = tk.Toplevel(root)
    win.title("Выбор")
    win.geometry("300x300+500+200")

    background = tk.Frame(win, bg="#F8F8FF")
    background.place(x=0, y=0, relwidth=1, relheight=1)

    choice = ("По высоте", "По смертности")

    make_map = tk.Label(background,
                        text='Это окно для построения карт',
                        bg="#F8F8FF")
    make_map.place(relx=0.1, rely=0.1)
    make_map.pack()
    CHOSEN_VALUE_map = tk.StringVar(value='Выберите тип карты')
    make_table_op = tk.OptionMenu(background, CHOSEN_VALUE_map, *choice)
    make_table_op.place(relx=0.25, rely=0.4)
    make_table_op.pack()

    button_statistics = tk.Button(background, text='Сохранить', bg="#AFEEEE")

    button_statistics.bind("<Button-1>", lambda *args: new_map(root, pane))
    button_statistics.place(relx=0.2, rely=0.5, relheight=0.1, relwidth=0.6)
    background.pack(side="top", fill="both", expand=True, padx=10, pady=5)
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 analysis_window_event(root: tk.Tk, pane: ttk.Panedwindow):
    if not glob.is_db_open():
        return "break"

    win = tk.Toplevel(root)
    win.title("Выбор")
    win.geometry("400x400+500+200")

    background = tk.Frame(win, bg=constants.style['bg'])
    background.place(x=0, y=0, relwidth=1, relheight=1)

    backgroundlabel = tk.Label(background, bg=constants.style['bg'])
    backgroundlabel.place(relx=0.025,
                          rely=0.025,
                          relwidth=0.95,
                          relheight=0.95)

    button_statistics = tk.Button(
        background,
        text='Сводная таблица',
        width=20,
        height=2,
        font=11,
        bg=constants.style['pivot_button'],
    )
    button_statistics.bind("<Button-1>",
                           lambda *args: tb.choice_table(root, pane))
    button_statistics.place(relx=0.25, rely=0.15, relheight=0.1, relwidth=0.5)

    button_map = tk.Button(background,
                           bg=constants.style['map_button'],
                           text='Построение карты',
                           font=11,
                           width=20,
                           height=2)
    button_map.bind("<Button-1>", lambda *args: mp.choice_map(root, pane))
    button_map.place(relx=0.25, rely=0.45, relheight=0.1, relwidth=0.5)

    button_graphics = tk.Button(background,
                                bg=constants.style['plotsndiagrams_button'],
                                text='Построение диаграмм\n и графиков',
                                font=11,
                                width=20,
                                height=2)
    button_graphics.bind("<Button-1>",
                         lambda *args: stat.graphics_choice(root, pane))
    button_graphics.place(relx=0.2, rely=0.75, relheight=0.2, relwidth=0.65)

    background.pack(side="top", fill="both", expand=True, padx=10, pady=5)
def save_event(*args):
    """
    Автор: Баканов Г. 
    Цель: Сохранение текущей базы в файл
    Вход: Нет
    Выход: Нет (файл)
    """
    # открыта ли база?
    if not glob.is_db_open():
        return "break"
    # сохранена ли база?
    if not glob.is_saved():
        glob.unmark_changes()
        glob.work_list[glob.current_base_name] = glob.current_base
        glob.update_list()
        # сохраняем в файл
        hand_base.save_base()
def save_event(*args):
    """
    Автор:  
    Цель:
    Вход:
    Выход:
    """
    # открыта ли база?
    if not glob.is_db_open():
        return "break"
    # сохранена ли база?
    if not glob.is_saved():
        glob.unmark_changes()
        glob.work_list[glob.current_base_name] = glob.current_base
        glob.update_list()
        # сохраняем в файл
        hand_base.save_base()
def select_columns_event(root: tk.Tk, pane: ttk.Panedwindow):
    """
    Автор:  
    Цель:   открывает окно для выбора столбцов, которые надо показать в программе
    Вход:   главное окно, растягивающийся виджет
    Выход:  нет
    """
    # открыта ли база?
    if not glob.is_db_open():
        return "break"
    win = tk.Toplevel(root)
    win.title("Выберите стобцы")
    glob.columns_selection = {
        k: v
        for k in constants.origin_columns for v in
        [tk.BooleanVar() for x in range(len(glob.constants.origin_columns))]
    }
    frame4check = tk.Frame(win)
    frame4button = tk.Frame(win)

    i = 0
    # раставляем checkbutton'ы и устанавливаем их в активное (отмеченное) положение по текущим показывающимся столбцам
    for text, value in glob.columns_selection.items():
        ttk.Checkbutton(frame4check,
                        style="Selection.TCheckbutton",
                        text=text,
                        variable=value,
                        onvalue=True,
                        offvalue=False).grid(row=i, column=1, sticky='NSEW')
        value.set(True) if text in glob.columns else value.set(False)
        i += 1
    apply_button = tk.Button(frame4button, text="Применить")
    uncheck_all_button = tk.Button(frame4button, text="Снять выбор")
    check_all_button = tk.Button(frame4button, text="Выбрать все")

    apply_button.bind("<Button-1>",
                      lambda *args: apply_column_selection(root, win, pane))
    uncheck_all_button.bind("<Button-1>", uncheck_all_event)
    check_all_button.bind("<Button-1>", check_all_event)

    uncheck_all_button.grid(row=0, column=0, sticky='NSE', padx=5, pady=2)
    check_all_button.grid(row=0, column=1, sticky='NSW', padx=5, pady=2)
    apply_button.grid(row=1, column=0, columnspan=2, sticky='NS', pady=2)
    frame4check.pack(side="top", fill="both", expand=True, padx=10, pady=5)
    frame4button.pack(side="top", fill="both", expand=True, padx=10, pady=5)
def stat_report_event(root: tk.Tk):
    if not glob.is_db_open():
        return "break"
    win = tk.Toplevel(root)
    win.title("Статический отчет")
    win.geometry('300x300')
    target = tk.StringVar()
    dropdown = ttk.Combobox(win,
                            values=constants.quality_columns,
                            state='readonly',
                            textvariable=target)
    dropdown.current(0)
    show_result = tk.Button(win, text="Показать")
    show_result.bind("<Button-1>",
                     lambda *args: show_stat_report(root, target.get()))
    tk.Label(win, text="Атрибут").pack(side="top")
    dropdown.pack(side="top")
    show_result.pack(side="top")
def choice_table(root: tk.Tk, pane: ttk.Panedwindow):
    """
    Автор: Баканов Г.
    Цель: Выбор фильтров для сводной таблицы
    Вход: Главное окно, растягивающий виджет
    Выход: Нет
    """

    global CHOSEN_VALUE

    if not glob.is_db_open():
        return "break"

    win = tk.Toplevel(root)
    win.title("Выбор")
    win.geometry("300x300+500+200")

    background = tk.Frame(win, bg="#F8F8FF")
    background.place(x=0, y=0, relwidth=1, relheight=1)

    choice = ("Выберите фильтры", "Страна - Средняя смертность",
              "Страна - Средняя высота вулкана",
              "Расположение - Средняя смертность",
              "Тип вулкана - Средняя смертность",
              "Тип вулкана - Количество пропавших",
              "Название вулкана - Количество раненных")

    # make_table = tk.Label(background)
    CHOSEN_VALUE = tk.StringVar(value='Выберите фильтры')
    make_table_op = tk.OptionMenu(background, CHOSEN_VALUE, *choice)
    make_table_op.place(relx=0.25, rely=0.25)
    make_table_op.pack()

    button_statistics = tk.Button(background,
                                  text='Посмотреть статистику',
                                  bg="#AFEEEE")

    button_statistics.bind("<Button-1>",
                           lambda *args: stat_table_window(root, pane))
    button_statistics.place(relx=0.25, rely=0.5, relheight=0.1, relwidth=0.6)
    background.pack(side="top", fill="both", expand=True, padx=10, pady=5)
def close_event(pane: ttk.Panedwindow, save):
    """
        Автор:  
        Цель:   закрывает открытую базу и показывает приглащение к открытию новой на правой стороне pane,
                save вызывается для сохранения базы, по решению пользователя
        Вход: pane - растягивающийся виджет, save - объект функции save_event из main
        Выход: нет
    """

    # открыта ли база?
    if not glob.is_db_open():
        return "break"
    # сохранена ли база?
    if not glob.is_saved():
        ans = err.yes_no("Сохранить изменения?")
        if ans:
            save()
    glob.delete_current_base()
    pane.forget(1)
    pls_select_frame = show_invitation(pane)
    pane.add(pls_select_frame, weight=9)
def search_call(root: tk.Tk, pane: ttk.Panedwindow, selector, option: str,
                search_data, save, create):

    """
    Автор: Подкопаева П.
    Цель: Поиск в базе данных по ключевому слову
    Вход: Ключевое слово типа строка
    Выход: dataframe
    """

    if not glob.is_db_open():
        selector.current(0)
        return
    if not glob.is_saved():
        ans = err.yes_no("Сохранить изменения?")
        if ans:
            save()
    filter_option = ''
    if option == "Без фильтра":
        filter_option = 'all'
    elif option == "По названию":
        filter_option = 'Name'
    elif option == "По типу":
        filter_option = 'Type'
    elif option == "По стране":
        filter_option = 'Country'
    elif option == "По цунами":
        filter_option = 'TSU'
    elif option == "По землетрясению":
        filter_option = 'EQ'
    search_result = hand_base.searching(search_data, filter_option)
    if search_result.empty:
        err.warning('Ничего не найдено', True)
        return
    search_result.reset_index(inplace=True, drop=True)
    create()
    glob.work_list[glob.base_list.get(glob.base_list.size() - 1)] = search_result
    open_base(root, pane, glob.base_list.size() - 1)
    glob.mark_changes()
    save()
def choice_map(root: tk.Tk, pane: ttk.Panedwindow):
    """
    Автор: Подкопаева П.
    Цель: Функция для выбора типа карты
    Вход: Главное окно, растягивающий виджет
    Выход: Нет
    """
    global CHOSEN_VALUE_MAP

    if not glob.is_db_open():
        return "break"

    win = tk.Toplevel(root)
    win.title("Выбор")
    win.geometry("300x300+500+200")

    background = tk.Frame(win, bg=constants.style['bg'])
    background.place(x=0, y=0, relwidth=1, relheight=1)

    choice = ("По высоте", "По смертности", "По ущербу")

    make_map = tk.Label(background,
                        text='Это окно для построения карт',
                        bg=constants.style['bg'])
    make_map.place(relx=0.1, rely=0.1)
    make_map.pack()
    CHOSEN_VALUE_MAP = tk.StringVar(value='Выберите тип карты')
    make_table_op = tk.OptionMenu(background, CHOSEN_VALUE_MAP, *choice)
    make_table_op.place(relx=0.25, rely=0.4)
    make_table_op.pack()

    button_statistics = tk.Button(background,
                                  text='Сохранить',
                                  bg=constants.style['plots_button'])

    button_statistics.bind("<Button-1>", lambda *args: new_map())
    button_statistics.place(relx=0.2, rely=0.5, relheight=0.1, relwidth=0.6)
    background.pack(side="top", fill="both", expand=True, padx=10, pady=5)
def show_form(root, pane, selector, form: str, save):
    """
            Автор:  
            Цель:
            Вход:
            Выход:  нет
    """
    if not glob.is_db_open():
        selector.current(0)
        return
    if not glob.is_saved():
        ans = err.yes_no("Сохранить изменения?")
        if ans:
            save()
    if form == "Общий вид":
        glob.columns = constants.origin_columns
    elif form == "Вид первый":
        glob.columns = constants.first_form
    elif form == "Вид второй":
        glob.columns = constants.second_form
    elif form == "Вид третий":
        glob.columns = constants.third_form

    open_base(root, pane, glob.current_base_list_id)
def graphics_choice(root: tk.Tk, pane: ttk.Panedwindow):
    """
    Автор: Подкопаева П.
    Цель: Выбор фильтров для построения графического отчёта
    Вход: главное окно, растягивающийся виджет
    Выход: нет
    """

    global CHOSEN_VALUE1, CHOSEN_VALUE2, CHOSEN_VALUE3, CHOSEN_VALUE4, CHOSEN_VALUE5, CHOSEN_VALUE6

    if not glob.is_db_open():
        return "break"

    win = tk.Toplevel(root)
    win.title("Выбор")
    win.geometry("700x500+500+200")

    background = tk.Frame(win, bg=constants.style['bg'])
    background.place(x=0, y=0, relwidth=1, relheight=1)

    choice_graph = ("Фильтры для линейного графика",
                    "Год - Средняя смертность")

    CHOSEN_VALUE1 = tk.StringVar(value='Фильтры для линейного графика')
    make_gr = tk.OptionMenu(background, CHOSEN_VALUE1, *choice_graph)
    make_gr.place(relx=0.1, rely=0.1)
    make_gr.pack()
    button_graph = tk.Button(background,
                             text='Построить график',
                             bg=constants.style['plots_button'])

    button_graph.bind("<Button-1>", lambda *args: draw_graph(root, pane))
    button_graph.place(relx=0.0, rely=0.5, relheight=0.1, relwidth=0.2)

    choice_diagram = ("Фильтры для столбчатой диаграммы",
                      "Страна - Средняя смертность",
                      "Страна - Средняя высота вулкана",
                      "Расположение - Средняя смертность",
                      "Тип вулкана - Средняя смертность",
                      "Тип вулкана - Количество пропавших")

    CHOSEN_VALUE2 = tk.StringVar(value='Фильтры для столбчатой диаграммы')
    make_dgrm = tk.OptionMenu(background, CHOSEN_VALUE2, *choice_diagram)
    make_dgrm.place(relx=0.3, rely=0.1)
    make_dgrm.pack()

    button_diagram = tk.Button(background,
                               text='Построить диаграмму',
                               bg=constants.style['plots_button'])

    button_diagram.bind("<Button-1>", lambda *args: draw_diagram(root, pane))
    button_diagram.place(relx=0.4, rely=0.5, relheight=0.1, relwidth=0.2)

    choice_pie = ("Фильтры для круговой диаграммы",
                  "Страна - Средняя смертность", "Тип - Средняя смертность",
                  "Тип - Ранения")

    CHOSEN_VALUE3 = tk.StringVar(value='Фильтры для круговой диаграммы')
    make_pie = tk.OptionMenu(background, CHOSEN_VALUE3, *choice_pie)
    make_pie.place(relx=0.5, rely=0.1)
    make_pie.pack()

    button_pie = tk.Button(background,
                           text='Построить "пирог"',
                           bg=constants.style['plots_button'])

    button_pie.bind("<Button-1>", lambda *args: draw_pie(root, pane))
    button_pie.place(relx=0.8, rely=0.5, relheight=0.1, relwidth=0.2)

    choice_viskers = ("Фильтры для диаграммы Бокса-Вискера", "Высота - Тип")

    CHOSEN_VALUE4 = tk.StringVar(value='Фильтры для диаграммы Бокса-Вискера')
    make_box = tk.OptionMenu(background, CHOSEN_VALUE4, *choice_viskers)
    make_box.place(relx=0.7, rely=0.1)
    make_box.pack()

    button_box = tk.Button(background,
                           text='Построить \n "Бокса-Вискера"',
                           bg=constants.style['plots_button'])

    button_box.bind("<Button-1>", lambda *args: draw_box(root, pane))
    button_box.place(relx=0.0, rely=0.7, relheight=0.1, relwidth=0.2)

    choice_scatter = ("Фильтры для диаграммы рассеяния",
                      "Высота - Смерти - Индекс взрывоопасности",
                      "Высота - Смерти - Тип")
    CHOSEN_VALUE5 = tk.StringVar(value='Фильтры для диаграммы рассеяния')
    make_scatter = tk.OptionMenu(background, CHOSEN_VALUE5, *choice_scatter)
    make_scatter.place(relx=0.7, rely=0.1)
    make_scatter.pack()

    button_scatter = tk.Button(background,
                               text='Построить \n диаграмму \n рассеяния',
                               bg=constants.style['plots_button'])

    button_scatter.bind("<Button-1>", lambda *args: draw_scatter(root, pane))
    button_scatter.place(relx=0.4, rely=0.7, relheight=0.1, relwidth=0.2)

    choice_hist = ("Фильтры для гистограммы", "Высота - Количество смертей",
                   "Высота - Ущерб")
    CHOSEN_VALUE6 = tk.StringVar(value='Фильтры для гистограммы')
    make_hist = tk.OptionMenu(background, CHOSEN_VALUE6, *choice_hist)
    make_hist.place(relx=0.8, rely=0.1)
    make_hist.pack()

    button_scatter = tk.Button(background,
                               text='Построить гистограмму',
                               bg=constants.style['plots_button'])

    button_scatter.bind("<Button-1>", lambda *args: draw_hist(root, pane))
    button_scatter.place(relx=0.8, rely=0.7, relheight=0.1, relwidth=0.2)

    background.pack(side="top", fill="both", expand=True, padx=2, pady=3)
def add_inf(win: tk.Tk, form: str, save):
    """
        Автор: 
        Цель: Добавление новых элементов в базу данных (окно)
        Вход: Нет
        Выход: Нет
    """

    if not glob.is_db_open():
        return "break"
    root = tk.Toplevel(win)
    root.title("Окно ввода данных")

    if form == "Общий вид":
        Year = tk.IntVar()
        Year_label = tk.Label(root, text="Год извержения:")
        Year_label.grid(row=0, column=0, sticky="w")
        Year_entry = tk.Entry(root, textvariable=Year)
        Year_entry.grid(row=0, column=1, padx=5, pady=5)

        cmb_month = ttk.Combobox(root)
        Month_label = tk.Label(root, text="Месяц извержения:")
        Month_label.grid(row=1, column=0, sticky="w", padx=5, pady=5)
        cmb_month['values'] = ('1', '2', '3', '4', '5', '6', '7', '8', '9',
                               '10', '11', '12')
        cmb_month.current(0)
        cmb_month.grid(column=1, row=1)

        Day = tk.IntVar()
        Day_label = tk.Label(root, text="День извержения:")
        Day_label.grid(row=2, column=0, sticky="w")
        Day_entry = tk.Entry(root, textvariable=Day)
        Day_entry.grid(row=2, column=1, padx=5, pady=5)

        name = tk.StringVar()
        name_label = tk.Label(root, text="Название вулкана:")
        name_label.grid(row=3, column=0, sticky="w")
        name_entry = tk.Entry(root, textvariable=name)
        name_entry.grid(row=3, column=1, padx=5, pady=5)

        Type = tk.StringVar()
        Type_label = tk.Label(root, text="Тип вулкана:")
        Type_label.grid(row=4, column=0, sticky="w")
        Type_entry = tk.Entry(root, textvariable=Type)
        Type_entry.grid(row=4, column=1, padx=5, pady=5)

        Height = tk.IntVar()
        Height_label = tk.Label(root, text="Высота вулкана (в метрах):")
        Height_label.grid(row=5, column=0, sticky="w")
        Height_entry = tk.Entry(root, textvariable=Height)
        Height_entry.grid(row=5, column=1, padx=5, pady=5)

        country = tk.StringVar()
        country_label = tk.Label(root, text="Страна:")
        country_label.grid(row=6, column=0, sticky="w")
        country_entry = tk.Entry(root, textvariable=country)
        country_entry.grid(row=6, column=1, padx=5, pady=5)

        location = tk.StringVar()
        location_label = tk.Label(root, text="Расположение вулкана:")
        location_label.grid(row=7, column=0, sticky="w")
        location_entry = tk.Entry(root, textvariable=location)
        location_entry.grid(row=7, column=1, padx=5, pady=5)

        Latitude = tk.IntVar()
        Latitude_label = tk.Label(root, text="Широта:")
        Latitude_label.grid(row=8, column=0, sticky="w")
        Latitude_entry = tk.Entry(root, textvariable=Latitude)
        Latitude_entry.grid(row=8, column=1, padx=5, pady=5)

        Longtitude = tk.IntVar()
        Longtitude_label = tk.Label(root, text="Долгота:")
        Longtitude_label.grid(row=9, column=0, sticky="w")
        Longtitude_entry = tk.Entry(root, textvariable=Longtitude)
        Longtitude_entry.grid(row=9, column=1, padx=5, pady=5)

        cmb_VEI = ttk.Combobox(root)
        VEI_label = tk.Label(root, text="Индекс взрывоопасности:")
        VEI_label.grid(row=10, column=0, sticky="w", padx=5, pady=5)
        cmb_VEI['values'] = ('0', '1', '2', '3', '4', '5', '6', '7', '8')
        cmb_VEI.current(0)
        cmb_VEI.grid(column=1, row=10)

        cmb_agent = ttk.Combobox(root)
        Agent_label = tk.Label(root, text="Причина извержения:")
        Agent_label.grid(row=10, column=3, sticky="w", padx=5, pady=5)
        cmb_agent['values'] = ('A', 'E', 'F', 'G', 'I', 'L', 'M', 'm', 'P',
                               'S', 'T', 'W')
        # inf_button = Button(root, text="Информация о причинах", command=mb.showinfo(
        # "Информация", "Здесь будет информация с расшифровкой причин").grid(row = 11, column = 5, padx=5, pady=5, sticky="e"))
        cmb_agent.current(0)
        cmb_agent.grid(column=4, row=10)

        Deaths = tk.IntVar()
        Deaths_label = tk.Label(root, text="Количество смертей:")
        Deaths_label.grid(row=13, column=0, sticky="w")
        Deaths_entry = tk.Entry(root, textvariable=Deaths)
        Deaths_entry.grid(row=13, column=1, padx=5, pady=5)

        Injured = tk.IntVar()
        Injured_label = tk.Label(root, text="Количество пострадавших:")
        Injured_label.grid(row=14, column=0, sticky="w")
        Injured_entry = tk.Entry(root, textvariable=Injured)
        Injured_entry.grid(row=14, column=1, padx=5, pady=5)

        Lost = tk.IntVar()
        Lost_label = tk.Label(root, text="Количество пропавших:")
        Lost_label.grid(row=15, column=0, sticky="w")
        Lost_entry = tk.Entry(root, textvariable=Lost)
        Lost_entry.grid(row=15, column=1, padx=5, pady=5)

        Damage = tk.IntVar()
        Damage_label = tk.Label(root, text="Ущерб в млн долларов:")
        Damage_label.grid(row=16, column=0, sticky="w")
        Damage_entry = tk.Entry(root, textvariable=Damage)
        Damage_entry.grid(row=16, column=1, padx=5, pady=5)

        TSU = tk.BooleanVar()
        TSU.set(False)
        TSU1 = ttk.Checkbutton(root, text="Было цунами?", var=TSU)
        TSU1.grid(column=0, row=17)

        EQ = tk.BooleanVar()
        EQ.set(False)
        EQ1 = ttk.Checkbutton(root, text="Было землетрясение?", var=EQ)
        EQ1.grid(column=2, row=17)

        list4values = {
            'Year': Year,
            'Month': cmb_month,
            'Day': Day,
            'Name': name,
            'Location': location,
            'Country': country,
            'Latitude': Latitude,
            'Longitude': Longtitude,
            'Elevation': Height,
            'Type': Type,
            'VEI': cmb_VEI,
            'Agent': cmb_agent,
            'DEATHS': Deaths,
            'INJURIES': Injured,
            'MISSING': Lost,
            'DAMAGE_MILLIONS_DOLLARS': Damage,
            'TSU': TSU,
            'EQ': EQ
        }
        message_button = tk.Button(
            root,
            text="Ввести",
            command=lambda *args: accept(root, list4values))
        message_button.grid(row=19, column=3, padx=5, pady=5, sticky="e")

    elif form == "Вид первый":

        name = tk.StringVar()
        name_label = tk.Label(root, text="Название вулкана:")
        name_label.grid(row=1, column=0, sticky="w")
        name_entry = tk.Entry(root, textvariable=name)
        name_entry.grid(row=1, column=1, padx=5, pady=5)

        Type = tk.StringVar()
        Type_label = tk.Label(root, text="Тип вулкана:")
        Type_label.grid(row=2, column=0, sticky="w")
        Type_entry = tk.Entry(root, textvariable=Type)
        Type_entry.grid(row=2, column=1, padx=5, pady=5)

        Height = tk.IntVar()
        Height_label = tk.Label(root, text="Высота вулкана (в метрах):")
        Height_label.grid(row=3, column=0, sticky="w")
        Height_entry = tk.Entry(root, textvariable=Height)
        Height_entry.grid(row=3, column=1, padx=5, pady=5)

        Latitude = tk.IntVar()
        Latitude_label = tk.Label(root, text="Широта:")
        Latitude_label.grid(row=4, column=0, sticky="w")
        Latitude_entry = tk.Entry(root, textvariable=Latitude)
        Latitude_entry.grid(row=4, column=1, padx=5, pady=5)

        Longtitude = tk.IntVar()
        Longtitude_label = tk.Label(root, text="Долгота:")
        Longtitude_label.grid(row=5, column=0, sticky="w")
        Longtitude_entry = tk.Entry(root, textvariable=Longtitude)
        Longtitude_entry.grid(row=5, column=1, padx=5, pady=5)

        list4values = {
            'Name': name,
            'Latitude': Latitude,
            'Longitude': Longtitude,
            'Elevation': Height,
            'Type': Type
        }
        message_button = tk.Button(
            root,
            text="Ввести",
            command=lambda *args: accept(root, list4values))
        message_button.grid(row=7, column=3, padx=5, pady=5, sticky="e")

    elif form == "Вид второй":

        country = tk.StringVar()
        country_label = tk.Label(root, text="Страна:")
        country_label.grid(row=1, column=0, sticky="w")
        country_entry = tk.Entry(root, textvariable=country)
        country_entry.grid(row=1, column=1, padx=5, pady=5)

        location = tk.StringVar()
        location_label = tk.Label(root, text="Расположение вулкана:")
        location_label.grid(row=2, column=0, sticky="w")
        location_entry = tk.Entry(root, textvariable=location)
        location_entry.grid(row=2, column=1, padx=5, pady=5)

        Latitude = tk.IntVar()
        Latitude_label = tk.Label(root, text="Широта:")
        Latitude_label.grid(row=3, column=0, sticky="w")
        Latitude_entry = tk.Entry(root, textvariable=Latitude)
        Latitude_entry.grid(row=3, column=1, padx=5, pady=5)

        Longtitude = tk.IntVar()
        Longtitude_label = tk.Label(root, text="Долгота:")
        Longtitude_label.grid(row=4, column=0, sticky="w")
        Longtitude_entry = tk.Entry(root, textvariable=Longtitude)
        Longtitude_entry.grid(row=4, column=1, padx=5, pady=5)

        list4values = {
            'Location': location,
            'Country': country,
            'Latitude': Latitude,
            'Longitude': Longtitude
        }
        message_button = tk.Button(
            root,
            text="Ввести",
            command=lambda *args: accept(root, list4values))
        message_button.grid(row=6, column=3, padx=5, pady=5, sticky="e")

    elif form == "Вид третий":

        Year = tk.IntVar()
        Year_label = tk.Label(root, text="Год извержения:")
        Year_label.grid(row=0, column=0, sticky="w")
        Year_entry = tk.Entry(root, textvariable=Year)
        Year_entry.grid(row=0, column=1, padx=5, pady=5)

        cmb_month = ttk.Combobox(root)
        Month_label = tk.Label(root, text="Месяц извержения:")
        Month_label.grid(row=1, column=0, sticky="w", padx=5, pady=5)
        cmb_month['values'] = ('1', '2', '3', '4', '5', '6', '7', '8', '9',
                               '10', '11', '12')
        cmb_month.current(0)
        cmb_month.grid(column=1, row=1)

        Day = tk.IntVar()
        Day_label = tk.Label(root, text="День извержения:")
        Day_label.grid(row=2, column=0, sticky="w")
        Day_entry = tk.Entry(root, textvariable=Day)
        Day_entry.grid(row=2, column=1, padx=5, pady=5)

        name = tk.StringVar()
        name_label = tk.Label(root, text="Название вулкана:")
        name_label.grid(row=3, column=0, sticky="w")
        name_entry = tk.Entry(root, textvariable=name)
        name_entry.grid(row=3, column=1, padx=5, pady=5)

        cmb_VEI = ttk.Combobox(root)
        VEI_label = tk.Label(root, text="Индекс взрывоопасности:")
        VEI_label.grid(row=4, column=0, sticky="w", padx=5, pady=5)
        cmb_VEI['values'] = ('0', '1', '2', '3', '4', '5', '6', '7', '8')
        cmb_VEI.current(0)
        cmb_VEI.grid(column=1, row=4)

        cmb_agent = ttk.Combobox(root)
        Agent_label = tk.Label(root, text="Причина извержения:")
        Agent_label.grid(row=4, column=3, sticky="w", padx=5, pady=5)
        cmb_agent['values'] = ('A', 'E', 'F', 'G', 'I', 'L', 'M', 'm', 'P',
                               'S', 'T', 'W')
        # inf_button = Button(root, text="Информация о причинах", command=mb.showinfo(
        # "Информация", "Здесь будет информация с расшифровкой причин").grid(row = 11, column = 5, padx=5, pady=5, sticky="e"))
        cmb_agent.current(0)
        cmb_agent.grid(column=4, row=4)

        Deaths = tk.IntVar()
        Deaths_label = tk.Label(root, text="Количество смертей:")
        Deaths_label.grid(row=5, column=0, sticky="w")
        Deaths_entry = tk.Entry(root, textvariable=Deaths)
        Deaths_entry.grid(row=5, column=1, padx=5, pady=5)

        Injured = tk.IntVar()
        Injured_label = tk.Label(root, text="Количество пострадавших:")
        Injured_label.grid(row=6, column=0, sticky="w")
        Injured_entry = tk.Entry(root, textvariable=Injured)
        Injured_entry.grid(row=6, column=1, padx=5, pady=5)

        Lost = tk.IntVar()
        Lost_label = tk.Label(root, text="Количество пропавших:")
        Lost_label.grid(row=7, column=0, sticky="w")
        Lost_entry = tk.Entry(root, textvariable=Lost)
        Lost_entry.grid(row=7, column=1, padx=5, pady=5)

        Damage = tk.IntVar()
        Damage_label = tk.Label(root, text="Ущерб в млн долларов:")
        Damage_label.grid(row=8, column=0, sticky="w")
        Damage_entry = tk.Entry(root, textvariable=Damage)
        Damage_entry.grid(row=8, column=1, padx=5, pady=5)

        TSU = tk.BooleanVar()
        TSU.set(False)
        TSU1 = ttk.Checkbutton(root, text="Было цунами?", var=TSU)
        TSU1.grid(column=0, row=9)

        EQ = tk.BooleanVar()
        EQ.set(False)
        EQ1 = ttk.Checkbutton(root, text="Было землетрясение?", var=EQ)
        EQ1.grid(column=2, row=9)

        list4values = {
            'Year': Year,
            'Month': cmb_month,
            'Day': Day,
            'Name': name,
            'VEI': cmb_VEI,
            'Agent': cmb_agent,
            'DEATHS': Deaths,
            'INJURIES': Injured,
            'MISSING': Lost,
            'DAMAGE_MILLIONS_DOLLARS': Damage,
            'TSU': TSU,
            'EQ': EQ
        }

        message_button = tk.Button(
            root,
            text="Ввести",
            command=lambda *args: accept(root, list4values))
        message_button.grid(row=11, column=3, padx=5, pady=5, sticky="e")
def select_statistics_event(root: tk.Tk, pane: ttk.Panedwindow):
    """
          Автор:   
          Цель:   открывает окно для выбора данных, для которых нужно показать общую статистику
          Вход:   главное окно, растягивающийся виджет
          Выход:  нет
    """
    # открыта ли база?
    if not glob.is_db_open():
        return "break"

    win = tk.Toplevel(root)
    win.title("Выбор")
    win.geometry(constants.style['popup_width'] + 'x' +
                 constants.style['popup_height'] + "+500+200")
    win.minsize(400, 600)
    background = tk.Frame(win, bg=constants.style['bg'])
    background.place(x=0, y=0, relwidth=1, relheight=1)

    lang = tk.StringVar()

    win.geometry("400x600+500+300")
    lbl = tk.Label(win)
    lbl.configure(bg=constants.style['bg'],
                  text="Выберите данные для общей статистики")
    lbl.place(relx=0.05, rely=0.02)

    Elevation_checkbutton = tk.Radiobutton(background,
                                           text="Высота",
                                           value="Elevation",
                                           bg=constants.style['bg'],
                                           variable=lang)
    Elevation_checkbutton.place(relx=0.25, rely=0.05)
    # Elevation_checkbutton.grid(row=1, column=0, sticky='W')
    # Elevation_checkbutton.pack()

    DEATHS_checkbutton = tk.Radiobutton(background,
                                        text="Количество смертей",
                                        value="DEATHS",
                                        variable=lang,
                                        bg=constants.style['bg'])
    DEATHS_checkbutton.place(relx=0.25, rely=0.1)
    # DEATHS_checkbutton.grid(row=2, column=0, sticky='W')
    # DEATHS_checkbutton.pack()

    DAMAGE_checkbutton = tk.Radiobutton(background,
                                        text="Ущерб в млн долларов",
                                        value="DAMAGE_MILLIONS_DOLLARS",
                                        variable=lang,
                                        bg=constants.style['bg'])
    DAMAGE_checkbutton.place(relx=0.25, rely=0.15)
    # DAMAGE_checkbutton.grid(row=3, column=0, sticky='W')
    # DAMAGE_checkbutton.pack()

    MISSING_checkbutton = tk.Radiobutton(background,
                                         text="Количество пропавших",
                                         value="MISSING",
                                         variable=lang,
                                         bg=constants.style['bg'])
    MISSING_checkbutton.place(relx=0.25, rely=0.2)
    # MISSING_checkbutton.grid(row=4, column=0, sticky='W')
    # MISSING_checkbutton.pack()

    INJURIES_checkbutton = tk.Radiobutton(background,
                                          text="Количество раненных",
                                          value="INJURIES",
                                          variable=lang,
                                          bg=constants.style['bg'])
    INJURIES_checkbutton.place(relx=0.25, rely=0.25)
    # INJURIES_checkbutton.grid(row=5, column=0, sticky='W')
    # INJURIES_checkbutton.pack()

    ttk.Separator(background, orient='horizontal').place(relx=0,
                                                         rely=0.29,
                                                         relheight=0,
                                                         relwidth=1)

    Name_checkbutton = tk.Radiobutton(background,
                                      text="Имя",
                                      value="Name",
                                      bg=constants.style['bg'],
                                      variable=lang)
    Name_checkbutton.place(relx=0.25, rely=0.3)

    Location_checkbutton = tk.Radiobutton(background,
                                          text="Расположение",
                                          value="Location",
                                          variable=lang,
                                          bg=constants.style['bg'])
    Location_checkbutton.place(relx=0.25, rely=0.35)

    Country_checkbutton = tk.Radiobutton(background,
                                         text="Страна",
                                         value="Country",
                                         variable=lang,
                                         bg=constants.style['bg'])
    Country_checkbutton.place(relx=0.25, rely=0.4)

    Latitude_checkbutton = tk.Radiobutton(background,
                                          text="Широта",
                                          value="Latitude",
                                          variable=lang,
                                          bg=constants.style['bg'])
    Latitude_checkbutton.place(relx=0.25, rely=0.45)

    Longitude_checkbutton = tk.Radiobutton(background,
                                           text="Долгота",
                                           value="Longitude",
                                           variable=lang,
                                           bg=constants.style['bg'])
    Longitude_checkbutton.place(relx=0.25, rely=0.5)

    Type_checkbutton = tk.Radiobutton(background,
                                      text="Тип",
                                      value="Type",
                                      bg=constants.style['bg'],
                                      variable=lang)
    Type_checkbutton.place(relx=0.25, rely=0.55)

    VEI_checkbutton = tk.Radiobutton(background,
                                     text="Индекс взрывоопасности",
                                     value="VEI",
                                     variable=lang,
                                     bg=constants.style['bg'])
    VEI_checkbutton.place(relx=0.25, rely=0.6)

    Agent_checkbutton = tk.Radiobutton(background,
                                       text="Причина",
                                       value="Agent",
                                       variable=lang,
                                       bg=constants.style['bg'])
    Agent_checkbutton.place(relx=0.25, rely=0.65)

    TSU_checkbutton = tk.Radiobutton(background,
                                     text="Было ли цунами?",
                                     value="TSU",
                                     variable=lang,
                                     bg=constants.style['bg'])
    TSU_checkbutton.place(relx=0.25, rely=0.7)

    EQ_checkbutton = tk.Radiobutton(background,
                                    text="Было ли землетрясение?",
                                    value="EQ",
                                    variable=lang,
                                    bg=constants.style['bg'])
    EQ_checkbutton.place(relx=0.25, rely=0.75)

    apply_button = tk.Button(background,
                             text="Выбрать",
                             font=3,
                             bg=constants.style['apply_button'])
    apply_button.bind(
        "<Button-1>",
        lambda *args: stat.statistics_base(root, pane, lang.get())
        if lang.get() in constants.quantity_columns else show_stat_report(
            root, lang.get()))
    apply_button.place(relx=0.5, rely=0.8, relheight=0.1, relwidth=0.25)
    background.pack(side="top", fill="both", expand=True, padx=10, pady=5)