**[EXAM (в процессе доработки)](https://github.com/kolei/OAP/blob/master/articles/exam.md)** *** **Python** *** Filter *** ``` import tkinter as tk from tkinter import ttk from tkinter import * from PIL import Image, ImageTk # Создание окна root = tk.Tk() root.title("Иванов Валера И-21") root.geometry("1280x720") root.resizable(height=False, width=False) # вставка логотипа img = PhotoImage(file="logo.png") b = Label(image = img) b.img = "logo.png" b.pack() image_originals = Image.open("logo.png") image_tk = ImageTk.PhotoImage(image_originals) # Создаем поле ввода для фильтрации filter_entry = ttk.Combobox(root) filter_entry["values"] = ['Toyota Trueno AE86','Toyota Supra A80', 'Nissal Skyline R34', 'Nissan Silvia S15'] filter_entry.current(0) filter_entry.pack() price_filter_entry = ttk.Combobox(root) price_filter_entry["values"] = [15000,20000, 25000, 30000] price_filter_entry.current(0) price_filter_entry.pack() price_filter_entry.pack() year_filter_entry = ttk.Combobox(root) year_filter_entry["values"] = [1995,1996, 1999] year_filter_entry.current(0) year_filter_entry.pack() year_filter_entry.pack() # Функция для фильтрации данных def filter_data(event): # Получаем значение из поля ввода filter_value = filter_entry.get().lower() # Очищаем таблицу for item in tree.get_children(): tree.delete(item) # Добавляем отфильтрованные элементы обратно в таблицу for person in cars: if person[0].lower().find(filter_value) != -1: tree.insert('', END, values=person) # Привязываем функцию фильтрации к событию изменения текста в поле ввода filter_entry.bind('', filter_data) # Функция для фильтрации данных по цене def filter_by_price(event): # Получаем значение из поля ввода filter_value = price_filter_entry.get() # Очищаем таблицу for item in tree.get_children(): tree.delete(item) # Добавляем отфильтрованные элементы обратно в таблицу for person in cars: if filter_value == "" or int(person[1]) == int(filter_value): tree.insert('', END, values=person) # Привязываем функцию фильтрации к событию изменения текста в поле ввода price_filter_entry.bind('', filter_by_price) # Функция для фильтрации данных по году выпуска def filter_by_year(event): # Получаем значение из поля ввода filter_value = year_filter_entry.get() # Очищаем таблицу for item in tree.get_children(): tree.delete(item) # Добавляем отфильтрованные элементы обратно в таблицу for person in cars: if filter_value == "" or int(person[2]) == int(filter_value): tree.insert('', END, values=person) # Привязываем функцию фильтрации к событию изменения текста в поле ввода year_filter_entry.bind('', filter_by_year) cars = [('Toyota Trueno AE86', 15000, 1996), ('Toyota Supra A80', 30000, 1996), ('Nissal Skyline R34', 25000, 1995), ('Nissan Silvia S15', 20000, 1999)] columns = ('title', 'price', 'year') tree = ttk.Treeview(columns=columns, show='headings') tree.pack(fill=BOTH, expand=1) # сортировка данных в таблице def sort(col, reverse): # получаем все значения столбцов в виде отдельного списка l = [(tree.set(k, col), k) for k in tree.get_children("")] # сортируем список l.sort(reverse=reverse) # переупорядочиваем значения в отсортированном порядке for index, (_, k) in enumerate(l): tree.move(k, "", index) # в следующий раз выполняем сортировку в обратном порядке tree.heading(col, command=lambda: sort(col, not reverse)) tree.heading('title', text='Название',anchor=W, command=lambda: sort(0, False)) tree.heading('price', text='Цена в день',anchor=W, command=lambda: sort(1, False)) tree.heading('year', text='Год выпуска',anchor=W, command=lambda: sort(2, False)) tree.column("#1", stretch=NO, width=70) tree.column("#2", stretch=NO, width=60) tree.column("#3", stretch=NO, width=100) for person in cars: tree.insert('', END,values=person) # Создание 10 записей entries = [] for i in range(10): entry = tk.Entry(root) entry.pack() entries.append(entry) # Создание кнопки "Отправить" button = tk.Button(root, text="Отправить") button.pack() # Обработчик события нажатия на кнопку "Отправить" def send_entries(): for entry in entries: print(entry.get()) button.config(command=send_entries) # Запуск цикла событий root.mainloop() ``` *** **Вот что получилось:** *** ![](./img/name.png) *** ![](./img/price.png) *** ![](./img/year.png) ***