Розробка графічного інтерфейсу користувача засобами пакету tkinter

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Кібербезпека
Кафедра:
Захист інформації

Інформація про роботу

Рік:
2020
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування скриптовими мовами
Варіант:
23 24

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА
кафедра ЗІ
З В І Т до лабораторної роботи 10 з курсу: «Програмування скриптовими мовами» на тему: «Розробка графічного інтерфейсу користувача засобами пакету tkinter»
Варіант 23
Львів – 2020 МЕТА РОБОТИ Ознайомитись з з особливостями створення графічного інтерфейсу користувача засобами пакету tkinter мови Python, зокрема навчитися працювати з типовими елементами інтерфейсу (віджетами), вивчити їх основні властивості і методи, вміти розміщувати віджети у вікні та обробляти події.. ЗАВДАННЯ Домашня підготовка до роботи Вивчити теоретичний матеріал. Виконати в лабораторії Написати
програму,
яка
використовуючи
класи
з
лабор.
роботи
9 створює
додаток
на
базі
бібліотеки
tkinter,
що
дозволяє
виконувати
такі операції:
a. Вивести весь список.
b. Додавати елементи до списку.
c. Відсортувати список за заданим атрибутом.
d. Видаляти елементи за заданим атрибутом.
e. Видаляти елемент за заданим індексом.
f. Виводити всі елементи за заданим атрибутом.
Варіант Об’єкт Атрибути 3 (23) Пасажирський літак Виробник, модель, рік випуску, кількість пасажирів, макс. швидкість РЕЗУЛЬТАТ ВИКОНАННЯ РОБОТИ 1. Лістинг програми. from tkinter import *from tkinter import messagebox as mbimport copy
root = Tk()width_of_window = 850height_of_window = 500screen_width = root.winfo_screenwidth()screen_height = root.winfo_screenheight()
x = (screen_width / 2) - (width_of_window / 2)y = (screen_height / 2) - (height_of_window / 2)root.geometry("%dx%d+%d+%d" % (width_of_window, height_of_window, x, y))
content_text = Text(root, wrap='word')
scrollbar = Scrollbar(content_text)content_text.configure(yscrollcommand=scrollbar.set)content_text.pack(side=LEFT, expand='yes', fill='both')scrollbar.config(command=content_text.yview)scrollbar.pack(side=RIGHT, fill=Y)
class Aircraft():
def __init__(self, mf, model, year, np, speed):
self.mf = mf
self.model = model
self.year = year
self.np = np
self.speed = speed
def set_var(self, mf, model, year, np, speed):
self.mf = mf
self.model = model
self.year = year
self.np = np
self.speed = speed
def get_var(self):
return [self.mf, self.model, self.year, self.np, self.speed]
class DB_Countries(Aircraft):
def __init__(self, mf, model, year, np, speed):
Aircraft.set_var(self, mf, model, year, np, speed)
def print_aircraft(countries):
content_text.insert(END, "{:<20} {:<20} {:<20} {:<20} {:<20}".format('Manufacture', 'Model',
"Year", "Number of passangers",
"Highest speed"))
for k in countries:
mf, model, year, np, speed = k
content_text.insert(END,
"n{:<20} {:<20} {:<20} {:<20} {:<20}".format(mf, model, year, np, speed))
content_text.insert(END,
"------------------------------------------------------------------------------------------------------n")
content_text.see(END)
classmethod
def print(self):
DB_Countries.print_aircraft(countries)
def enter_attribute():
enter_box = Toplevel(root)
enter_box.title("Add elemet in list")
enter_box.geometry('300x200+600+300')
Label(enter_box, text="manufacture:").grid(row=0, column=0, sticky="w")
Label(enter_box, text="model:").grid(row=1, column=0, sticky="w")
Label(enter_box, text="year:").grid(row=2, column=0, sticky="w")
Label(enter_box, text="np:").grid(row=3, column=0, sticky="w")
Label(enter_box, text="speed:").grid(row=4, column=0, sticky="w")
Entry(enter_box, textvariable=mf).grid(row=0, column=1, padx=5, pady=5)
Entry(enter_box, textvariable=model).grid(row=1, column=1, padx=5, pady=5)
Entry(enter_box, textvariable=year).grid(row=2, column=1, padx=5, pady=5)
Entry(enter_box, textvariable=np).grid(row=3, column=1, padx=5, pady=5)
Entry(enter_box, textvariable=speed).grid(row=4, column=1, padx=5, pady=5)
Button(enter_box, text="Add element", command=DB_Countries.new_element).grid(row=5, column=1, padx=5, pady=5,
sticky="e")
def new_element():
_mf = mf.get()
_model = model.get()
iserror = False
try:
_year = year.get()
except:
mb.showerror("Atribute entered incorect", "Enter an integer value")
iserror = True
try:
_np = np.get()
except:
mb.showerror("Atribute entered incorect", "Enter an integer value")
iserror = True
_speed = speed.get()
if iserror == True:
return
countries.append([_mf, _model, _year, _np, _speed])
DB_Countries.print_aircraft(countries)
def sort_by_param():
DB_Countries.print_aircraft(sorted(countries, key=lambda parametr: parametr[sort_atr.get() - 1]))
def sort():
sort_box = Toplevel(root)
sort_box.title("Sort list by attribute")
sort_box.geometry('300x200+600+300')
Label(sort_box, text="Enter attribute for sorting:").grid(row=0, column=0, sticky="w")
Radiobutton(sort_box, text="mf", variable=sort_atr, value=1).grid(row=1, sticky="w")
Radiobutton(sort_box, text="model", variable=sort_atr, value=2).grid(row=2, sticky="w")
Radiobutton(sort_box, text="year", variable=sort_atr, value=3).grid(row=3, sticky="w")
Radiobutton(sort_box, text="np", variable=sort_atr, value=4).grid(row=4, sticky="w")
Radiobutton(sort_box, text="speed", variable=sort_atr, value=5).grid(row=5, sticky="w")
Button(sort_box, text="Sort list", command=DB_Countries.sort_by_param).grid(row=6, column=1, padx=5, pady=5,
sticky="e")
def search():
display_box = Toplevel(root)
display_box.title("Search element by atribute")
display_box.geometry('300x200+600+300')
Label(display_box, text="Enter artibute for seacrh:").grid(row=0, column=0, sticky="w")
Entry(display_box, textvariable=display_elm).grid(row=1, padx=5, pady=5)
Button(display_box, text="Find element", command=DB_Countries.display_elem_by_atr).grid(row=2, sticky="n")
def del_atr():
del_box = Toplevel(root)
del_box.title("Delete element by attribute")
del_box.geometry('300x200+600+300')
Label(del_box, text="Enter attribute for remove:").grid(row=0, column=0, sticky="w")
Entry(del_box, textvariable=del_atr).grid(row=1, padx=5, pady=5)
Button(del_box, text="Delete element", command=DB_Countries.del_elem_by_value).grid(row=2, sticky="n")
def del_elem_by_value():
for item in copy.deepcopy(countries):
if del_atr.get() in map(str, item):
countries.remove(item)
DB_Countries.print_aircraft(countries)
def del_elem_by_index():
if len(countries) == 0:
mb.showerror("Index entered incorect", "Countries list is empty")
else:
try:
countries.pop(del_ind.get())
except:
mb.showerror("Index entered incorect", "Enter index for {} to {}".format(0, len(countries) - 1))
DB_Countries.print_aircraft(countries)
def del_ind():
del_ind_box = Toplevel(root)
del_ind_box.title("Delete element by index")
del_ind_box.geometry('300x200+600+300')
Label(del_ind_box, text="Enter index for remove:").grid(row=0, column=0, sticky="w")
Entry(del_ind_box, textvariable=del_ind).grid(row=1, padx=5, pady=5)
Button(del_ind_box, text="Delete element", command=DB_Countries.del_elem_by_index).grid(row=2, sticky="n")
def display_elem_by_atr():
content_text.insert(END, "{:<20} {:<20} {:<20} {:<20} {:<20}".format('***Manufacture***', '***Model***',
"***Year***", "***Number of passangers***",
"***Highest speed***"))
for item in countries:
if display_elm.get() in map(str, item):
mf, model, year, np, speed = item
content_text.insert(END, "n{:<20} {:<20} {:<20} {:<20} {:<20}".format(mf, model, year, np, speed))
content_text.insert(END,
"------------------------------------------------------------------------------------------------------n")
content_text.see(END)
def clear():
content_text.delete('1.0', END)
def mainbar():
root.title("Menu")
mainmenu = Menu(root)
root.config(menu=mainmenu)
output = Menu(mainmenu, tearoff=0)
output.add_command(label="Print all list", command=DB_Countries.print)
add = Menu(mainmenu, tearoff=0)
add.add_command(label="Add element", command=DB_Countries.enter_attribute)
delete = Menu(mainmenu, tearoff=0)
delete.add_command(label="Delete by atribute", command=DB_Countries.del_atr)
delete.add_command(label="Delete by index", command=DB_Countries.del_ind)
sort = Menu(mainmenu, tearoff=0)
sort.add_command(label="Sort by atribute", command=DB_Countries.sort)
search = Menu(mainmenu, tearoff=0)
search.add_command(label="Search by atritube", command=DB_Countries.search)
clear = Menu(mainmenu, tearoff=0)
clear.add_command(label="Clear output", command=DB_Countries.clear)
mainmenu.add_cascade(label="Print", menu=output)
mainmenu.add_cascade(label="Add", menu=add)
mainmenu.add_cascade(label="Delete", menu=delete)
mainmenu.add_cascade(label="Sort", menu=sort)
mainmenu.add_cascade(label="Search", menu=search)
mainmenu.add_cascade(label="Clear", menu=clear)
scrollbar.config(command=content_text.yview)
aircraft = DB_Countries('Boeing','747',1969,452, '892 km/h')boeing = aircraft.get_var()aircraft.set_var('Airbus','A-320',1988,180, '840 km/h')airbus = aircraft.get_var()aircraft.set_var('Embraer','Embraer 190',2000, 106, '871 km/h')embraer = aircraft.get_var()aircraft.set_var('Саратовавіазавод','ЯК-40', 1966, 40, '546 km/h')yak = aircraft.get_var()aircraft.set_var('ДП Антонов','АН-148',2009, 85, '870 km/h')an = aircraft.get_var()countries = [boeing, airbus, embraer, yak, an]
mf = StringVar()model = StringVar()year = IntVar()np = IntVar()speed = StringVar()
sort_atr = IntVar()del_atr = StringVar()del_ind = IntVar()display_elm = StringVar()
DB_Countries.mainbar()root.mainloop()
2. Результат роботи програми. / / / / / / / / / / /
ВИСНОВОК В процесі виконання лабораторної роботи я ознайомилась з особливостями створення графічного інтерфейсу користувача засобами пакету tkinter мови Python, навчилась працювати з типовими елементами інтерфейсу (віджетами), вивчила їх основні властивості і методи та навчилась розміщувати віджети у вікні та обробляти події з реалізацією об’єктно-орієнтованого підходу в Python.
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Новини