ПКС / ПКС. Лабораторная 3
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,
СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Кафедра информационных управляющих систем
Лабораторная работа № 03
по Б1.О.12 «ПРОГРАММИРОВАНИЕ КРИТИЧЕСКИХ СЕРВИСОВ»
Студент гр. ИСТ-111_____________________________ П.П. Иванов
(подпись)
Проверил ___________________________ А. В. Параничев
(оценка и подпись)
Санкт-Петербург
2023 год
Создание прототипа GUI сервиса на языке Python
[желтым - для подстановки своих значений; зеленым - прочитать комментарии и удалить перед отправкой; все выделение убрать перед отправкой; файл переименовать по шаблону]
Создание прототипа GUI сервиса [по своему индивидуальному заданию из 1й практической работы] «Авторизация пользователя в системе» выполнено на языке Python с помощью IDE PyCharm. [можно выполнять в online на https://replit.com/ , авторизуясь в Гугл аккаунте и выбирая Create Repl+ ]
1. Поменять все отображаемые цвета по своему усмотрению (источник: https://python-scripts.com/tkinter ):
2. Добавить 3-4 опции из предыдущих работ, разместив 8 (или более) компонентов адаптивно (см. grid в примере кода). Воспользоваться любыми 4 (или более) различными элементами из списка: Entry, Scrolledtext, Button, Checkbutton, Radiobutton, Menu, Spinbox, Frame. (объяснения и примеры:
https://pythonru.com/uroki/obuchenie-python-gui-uroki-po-tkinter#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B2%D0%B8%D0%B4%D0%B6%D0%B5%D1%82%D0%B0-Label )
3. Для обработки кода составить 3 или более функций с разными опциями return, что нужно для тестирования в 4й лабораторной работе (можно сразу запустить файл из 4й лабораторной для данного примера, чтобы понять, как работают юнит-тесты; переменная _flag_gui добавлена, чтобы можно было запускать тесты в 4й лабораторной работе, исключив ожидание действий пользователя).
После добавления нового модуля в среде PyCharm: File->New->Python file->Python file с именем gui_login, определен код на основе графической библиотеки tkinter: [привести свой рабочий код]
from tkinter import *
class gui_data_00:
_flag_gui = 1
#def __init__(self, flag_gui : 0):
# self._flag_gui = flag_gui
#global _username
def close(self):
login_window.quit()
def login(self):
# извлекаем данные из формы
uname=username.get()
pwd=password.get()
# проверяем заполненные данные
if uname == '':
message.set("Заполните пустое поле имени!!!")
return -1
elif pwd == '':
message.set("Заполните пустое поле пароля!!!")
return -2
else:
if uname == "abcd@mail.ru" and pwd == "123456":
message.set("Авторизация успешно выполнена!!")
return 0
else:
message.set("Неправильная пара логин-пароль!(")
return 1
# функция авторизации формы Tk() из библиотеки tkinter
def guest(self):
message.set("Получен гостевой доступ")
global login_window
login_window = Tk()
def set_name(self, name):
username.set(name)
def loginForm(self):
# установка заглавия страницы
login_window.title("Авторизация")
# установка ширины и высоты окна
login_window.geometry("600x400")
#login_window.columnconfigure(0, weight = 2) # вес 0го столбца
#login_window.columnconfigure(1, weight = 1) # вес 1го столбца
# объявление переменных для использования в других функциях
global message
global username
global password
username = StringVar()
password = StringVar()
message = StringVar()
# Размещение элементов на форме: Label, Entry,
lab_enter = Label(login_window,text="Введите логин и пароль для входа в систему", bg="green2",fg="orange4")
lab_uname = Label(login_window, text="Логин")
ent_uname = Entry(login_window, textvariable=username)
lab_passw = Label(login_window, text="Пароль")
ent_passw = Entry(login_window, textvariable=password, show="*")
lab_msg = Label(login_window, text="",textvariable=message)
btn_log = Button(login_window, text="Авторизоваться", width=20, height=1, bg="green2", command=self.login)
btn_guest = Button(login_window, text="Получить гостевой доступ",width=30, height=1, bg="green2", command=self.guest)
lab_enter.grid(column = 0, row = 0, columnspan = 2)
lab_uname.grid(column = 0, row = 1)
ent_uname.grid(column = 1, row = 1)
lab_passw.grid(column = 0, row = 2)
ent_passw.grid(column = 1, row = 2)
lab_msg.grid(column = 0, row = 3, columnspan = 2)
btn_log.grid(column = 0, row = 4, columnspan = 2)
btn_guest.grid(column = 0, row = 5, columnspan = 2)
if(self._flag_gui == 1):
login_window.mainloop()
# вызов функции формы
if __name__ == '__main__':
log_form = gui_data_00()
log_form.loginForm()
Скриншот запуска сервиса представлен на рис. 1, фрагмент работы модуля … показан на рис. 2.
Рис. 1. Скриншот запуска модуля … сервиса «Авторизация пользователя в системе» с помощью IDE PyCharm Free Community
Рис. 2. Фрагмент работы модуля … сервиса … в среде PyCharm Free Community
На рис. 1 и 2 графические элементы отображены с помощью следующих строк кода:
кнопка с текстом (Button) "Авторизоваться" создается с помощью следующих параметров::
размеры кнопки: …;
положение на экране;
окно редактирования (Entry) для ввода логина-пароля создается следующим образом:
размеры окна редактирования: ;
положение на экране:..;
…
Frame…
…
Menu…
Вывод: о том, какие коды можно присвоены соответствующим функциям для проведения автоматизированного модульного тестирования (юнит-тестирования): 5-6 строк. [можно запустить пример из 4й лабораторной работы, дополняющий данный код, чтобы понять, как обрабатываются коды возврата при переборах тестов]