Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПКС / ПКС. Лабораторная 3

.docx
Скачиваний:
1
Добавлен:
19.09.2023
Размер:
695.84 Кб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ,

СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Кафедра информационных управляющих систем

Лабораторная работа № 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й лабораторной работы, дополняющий данный код, чтобы понять, как обрабатываются коды возврата при переборах тестов]