def create(): ''' Функция Получает: - Возвращает: - Автор: Демидов И.Д. ''' global df, parent, window m.mdf = df window = tk.Toplevel() window.geometry('700x400+400+300') frame_report = tk.Frame(window) frame_report.pack(side=tk.TOP, fill=tk.BOTH, expand=1) bd.Table(frame_report, a.mxls1, a.mxls2, a.mxls3) frame_btns = tk.Frame(window) frame_btns.pack(fill=tk.X, side=tk.TOP) btn_save_csv = ttk.Button(frame_btns, text='Сохранить CSV', command=save_csv) btn_save_csv.pack(side=tk.LEFT) btn_save_txt = ttk.Button(frame_btns, text='Сохранить TXT', command=save_txt) btn_save_txt.pack(side=tk.LEFT) window.grab_set() window.focus_set() self.destroy()
def change_df(): ''' Функция изменяет данные выбранного кортежа Получает: - Возвращает: - Автор: Демидов И.Д ''' global parent try: m.mdf.loc[int(entry_code.get()) - 1] = [ entry_code.get(), change_entry_firm.get(), change_entry_country.get(), change_entry_model.get(), change_combobox.get(), int(change_entry_storage.get()), float(change_entry_diagonal.get()), change_entry_cpu.get(), int(change_entry_ram.get()), int(change_entry_amount.get()) ] for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mdf) except (ValueError): mb.showerror( "Ошибка", "Должны быть введены числа в полях 'Память', 'Оперативная память' и 'Количество'" )
def Table_add(firm, country, model, storage, diagonal, cpu, ram, amount, os): ''' Функция добавляет новый кортеж в таблицу Получает: firm - название фирмы производителя, country - страна производителя, model - модель телефона, storage - объём памяти, diagonal - диагональ экрана, cpu - модель процессора, ram - объём оперативной памяти, amount - количество (штук), os - операционная система Возвращает: - Автор: Матвеев В.Е. ''' global count, parent try: counter = df.loc[len(df)-1]["Product Code"] except(KeyError): counter = 0 m.mdf = m.mdf[["Product Code", "Manufacturer", "Country", "Model", "OS", "Storage", "Diagonal", "CPU", "RAM", "Amount"]] m.mdf.loc[len(m.mdf)] = [len(m.mdf) + 1, firm, country, str(model), os, int(storage), float(diagonal), cpu, int(ram), int(amount)] for widget in parent.winfo_children(): widget.destroy() m.mxls1 = m.mdf[['Manufacturer', 'Country']] m.mxls1 = m.mxls1.drop_duplicates(subset='Manufacturer') m.mxls2 = m.mdf[["Product Code", "Storage", "CPU", "RAM", "Amount", "Model"]] m.mxls2 = m.mxls2.drop_duplicates(subset='Product Code') m.mxls3 = m.mdf[["Model", "Diagonal", "OS", "Manufacturer"]] m.mxls3 = m.mxls3.drop_duplicates(subset='Model') bd.Table(parent, m.mxls1, m.mxls2, m.mxls3)
def Table_add(firm, country, model, storage, diagonal, cpu, ram, amount, os): ''' Функция добавляет новый кортеж в таблицу Получает: firm - название фирмы производителя, country - страна производителя, model - модель телефона, storage - объём памяти, diagonal - диагональ экрана, cpu - модель процессора, ram - объём оперативной памяти, amount - количество (штук), os - операционная система Возвращает: - Автор: Матвеев В.Е. ''' global count, parent try: counter = m.mdf.loc[len(m.mdf) - 1]["Product Code"] except (KeyError): counter = 0 m.mdf.loc[len(m.mdf)] = [ int(counter) + 1, firm, country, str(model), os, int(storage), float(diagonal), cpu, int(ram), int(amount) ] for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mdf)
def change_of_code(): ''' Функция изменяет память, CPU, RAM и количество Получает: - Возвращает: - Автор: Демидов И.Д ''' global parent try: m.mxls2['Storage'][m.mxls2["Product Code"] == int( entry_code.get())] = int(change_entry_storage.get()) m.mxls2['CPU'][m.mxls2["Product Code"] == int( entry_code.get())] = change_entry_cpu.get() m.mxls2['RAM'][m.mxls2["Product Code"] == int( entry_code.get())] = int(change_entry_ram.get()) m.mxls2['Amount'][m.mxls2["Product Code"] == int( entry_code.get())] = int(change_entry_amount.get()) m.mxls2['Model'][m.mxls2["Product Code"] == int( entry_code.get())] = change_entry_model.get() for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mxls1, m.mxls2, m.mxls3) self.destroy() except (ValueError): mb.showerror("Ошибка", "Должны быть введены данные во все поля")
def filtr(): ''' Функция производит фильтрацию таблицы по заданным значениям Получает: - Возвращает: - Автор: Матвеев В.Е, Будин А.М. ''' global df, parent, xls1, xls2, xls3 df = m.mdf xls1 = m.mxls1 xls2 = m.mxls2 xls3 = m.mxls3 if (filtr_entry_ram.get() != '' and filtr_entry_ram_2.get() != ''): Sorttest_int('RAM', int(filtr_entry_ram.get()), int(filtr_entry_ram_2.get())) if (filtr_entry_storage.get() != '' and filtr_entry_storage_2.get() != ''): Sorttest_int('Storage', int(filtr_entry_storage.get()), int(filtr_entry_storage_2.get())) if (filtr_entry_diagonal.get() != '' and filtr_entry_diagonal_2.get() != ''): b = [] c = [] diagseries = xls3[ xls3['Diagonal'] <= float(filtr_entry_diagonal_2.get())] diagseries = diagseries[diagseries['Diagonal'] >= float( filtr_entry_diagonal.get())] b.append(diagseries['Model']) for item in b: for items in item: c.append(items) xls2 = xls2[xls2['Model'].isin(c)] if (filtr_combo_country.get() != ''): xls1 = xls1.loc[xls1['Country'] == filtr_combo_country.get()] xls3 = xls3[xls3['Manufacturer'].isin( xls1['Manufacturer'].tolist())] xls2 = xls2[xls2['Model'].isin(xls3['Model'].tolist())] if (filtr_combo_firm.get() != ''): xls3 = xls3.loc[xls3['Manufacturer'] == filtr_combo_firm.get()] xls2 = xls2[xls2['Model'].isin(xls3['Model'].tolist())] if (filtr_combo_model.get() != ''): xls2 = xls2[xls2['Model'] == filtr_combo_model.get()] if (filtr_combo_os.get() != ''): xls3 = xls3.loc[xls3['OS'] == filtr_combo_os.get()] xls2 = xls2[xls2['Model'].isin(xls3['Model'].tolist())] if (filtr_combo_cpu.get() != ''): xls2 = xls2[xls2['CPU'] == filtr_combo_cpu.get()] if (filtr_entry_amount.get() != '' and filtr_entry_amount_2.get() != ''): Sorttest_int('Amount', int(filtr_entry_amount.get()), int(filtr_entry_amount_2.get())) for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, xls1, xls2, xls3)
def filtr_cancel(): ''' Функция отменяет изменения произведенные с помощью применения фильтра Получает: - Возвращает: - Автор: Демидов И.Д. ''' global parent xls1 = m.mxls1 xls2 = m.mxls2 xls3 = m.mxls3 for widget in parent_.winfo_children(): widget.destroy() bd.Table(parent, xls1, xls2, xls3) self.destroy()
def filtr_save(): ''' Функция сохраняет изменения произведенные с помощью применения фильтра Получает: - Возвращает: - Автор: Демидов И.Д. ''' global df, parent, xls1, xls2, xls3 m.mdf = df m.mxls2 = xls2 m.mxls1 = xls1 m.mxls3 = xls3 for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mxls1, m.mxls2, m.mxls3) self.destroy()
def delete_code(): ''' Функция удаляет выбранный кортеж Получает: - Возвращает: - Автор: Демидов И.Д ''' global parent if(choice.get() == ''): mb.showerror("Ошибка", "Введите код продукта") elif (m.mdf.loc[len(m.mdf)-1]["Product Code"] < int(choice.get())): mb.showerror("Ошибка", "Нет такого продукта") else: m.mdf = m.mdf.drop(np.where(m.mdf['Product Code'] == int(choice.get()))[0]) for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mdf) self.destroy()
def delete_code(): ''' Функция удаляет выбранный кортеж Получает: - Возвращает: - Автор: Демидов И.Д ''' global parent if (choice.get() == ''): mb.showerror("Ошибка", "Введите код продукта") elif not any(m.mxls2['Product Code'] == int(choice.get())): mb.showerror("Ошибка", "Нет такого продукта") else: m.mxls2 = m.mxls2[m.mxls2['Product Code'] != int(choice.get())] for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mxls1, m.mxls2, m.mxls3) self.destroy()
def change_country(): ''' Функция изменяет страну производителя Получает: - Возвращает: - Автор: Демидов И.Д ''' global parent try: m.mxls1['Country'][ m.mxls1["Manufacturer"] == change_entry_firm.get()] = change_entry_country.get() for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mxls1, m.mxls2, m.mxls3) self.destroy() except (ValueError): mb.showerror("Ошибка", "Должны быть введены данные во все поля")
def change_of_model(): ''' Функция изменяет диагональ и ОС Получает: - Возвращает: - Автор: Демидов И.Д ''' global parent try: m.mxls3['Diagonal'][m.mxls3["Model"] == change_entry_model.get()] = float( change_entry_diagonal.get()) m.mxls3['OS'][m.mxls3["Model"] == change_entry_model.get( )] = change_combobox.get() m.mxls3['Manufacturer'][ m.mxls3["Model"] == change_entry_model.get()] = change_entry_firm.get() for widget in parent.winfo_children(): widget.destroy() bd.Table(parent, m.mxls1, m.mxls2, m.mxls3) self.destroy() except (ValueError): mb.showerror("Ошибка", "Должны быть введены данные во все поля")
def init_main(self): ''' Функция создает и размещает фреймы с виджетами (таблицу, кнопки) в главном окне программы, задает размер, цвета элементов Получает: - Возвращает: - Автор: Будин А.М., Демидов И.Д ''' global mdf, tree frame_toolbox = tk.Frame(bd=5, bg="#B0C7E4") frame_toolbox.pack(side='top', fill=tk.X) frame_table = tk.Frame(bd=5, bg="#B0C7E4") tree = frame_table # frame with controls frame_box2 = tk.Frame(frame_toolbox, bd=5, bg="#B0C7E4") frame_box2.pack(side='left', fill=tk.Y, expand=1) # photo for button #photo = tk.PhotoImage(file = r"../img.png") #photo = photo.subsample(25, 25) # elemests of toolbox button1_box1 = tk.Button(frame_box2, text=u'Добавить', command=self.open_dialog, bg="#5E46E0", fg="white", font="TimesNewRoman 16") button2_box1 = tk.Button(frame_box2, text=u'Правка', command=self.change, bg="#5E46E0", fg="white", font="TimesNewRoman 16") button3_box1 = tk.Button(frame_box2, text=u'Удалить', command=self.delete, bg="#5E46E0", fg="white", font="TimesNewRoman 16") button4_box1 = tk.Button(frame_box2, text=u'Экспорт', command=self.saved, bg="#5E46E0", fg="white", font="TimesNewRoman 16") button1_box2 = tk.Button(frame_box2, text=u'Анализ', command=self.analysis, bg="#5E46E0", fg="white", font="TimesNewRoman 16") button1_box3 = tk.Button(frame_box2, text=u'Фильтр', command=self.sort, bg="#5E46E0", fg="white", font="TimesNewRoman 16") button2_box3 = tk.Button(frame_box2, text=u'Отчет', command=self.report, bg="#5E46E0", fg="white", font="TimesNewRoman 16") #button2_box3 = tk.Button(frame_toolbox, bg="#B0C7E4", #image=photo, compound=tk.LEFT, relief="flat") # pack elemests of toolbox button1_box1.pack(side='left', padx=5, ipadx=8, ipady=8) button2_box1.pack(side='left', padx=5, ipadx=8, ipady=8) button3_box1.pack(side='left', padx=5, ipadx=8, ipady=8) button4_box1.pack(side='left', padx=5, ipadx=8, ipady=8) button1_box2.pack(side='left', padx=5, ipadx=8, ipady=8) button1_box3.pack(side='left', padx=5, ipadx=8, ipady=8) button2_box3.pack(side='left', padx=5, ipadx=8, ipady=8) #button2_box3.pack(side='right') try: xls = pd.read_pickle("../Data/smartphones.pkl") except (FileNotFoundError, EOFError): mb.showerror("Ошибка", "Файл smartphones.pkl не удалось открыть") xls = pd.DataFrame(columns=[ "Product Code", "Manufacturer", "Country", "Model", "OS", "Storage", "Diagonal", "CPU", "RAM", "Amount" ]) mdf = pd.DataFrame(xls) bd.Table(frame_table, mdf)