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()
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)