PyQt6-sup 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. pyqt6_sup-1.0.0/MANIFEST.in +2 -0
  2. pyqt6_sup-1.0.0/PKG-INFO +74 -0
  3. pyqt6_sup-1.0.0/PyQt6_sup.egg-info/PKG-INFO +74 -0
  4. pyqt6_sup-1.0.0/PyQt6_sup.egg-info/SOURCES.txt +26 -0
  5. pyqt6_sup-1.0.0/PyQt6_sup.egg-info/dependency_links.txt +1 -0
  6. pyqt6_sup-1.0.0/PyQt6_sup.egg-info/top_level.txt +1 -0
  7. pyqt6_sup-1.0.0/README.md +67 -0
  8. pyqt6_sup-1.0.0/exam_projects/__init__.py +7 -0
  9. pyqt6_sup-1.0.0/exam_projects/default.png +0 -0
  10. pyqt6_sup-1.0.0/exam_projects/demo1.1/demo1.1/app.py +145 -0
  11. pyqt6_sup-1.0.0/exam_projects/demo1.1/demo1.1/db.py +32 -0
  12. pyqt6_sup-1.0.0/exam_projects/demo1.1/demo1.1/db.sql +111 -0
  13. pyqt6_sup-1.0.0/exam_projects/demo1.1/demo1.1/main.py +53 -0
  14. pyqt6_sup-1.0.0/exam_projects/demo1.1/demo1.1/product.py +87 -0
  15. pyqt6_sup-1.0.0/exam_projects/exam_lite/exam.py +586 -0
  16. pyqt6_sup-1.0.0/exam_projects/exam_lite/exam1.py +731 -0
  17. pyqt6_sup-1.0.0/exam_projects/exam_mysql/config.py +11 -0
  18. pyqt6_sup-1.0.0/exam_projects/exam_mysql/create_db.sql +73 -0
  19. pyqt6_sup-1.0.0/exam_projects/exam_mysql/exam_mysql.py +546 -0
  20. pyqt6_sup-1.0.0/exam_projects/exam_mysql/insert_data.sql +81 -0
  21. pyqt6_sup-1.0.0/exam_projects/exam_mysql/picture.png +0 -0
  22. pyqt6_sup-1.0.0/exam_projects/exam_mysql/product_images/prod_1781447171.358102.jpg +0 -0
  23. pyqt6_sup-1.0.0/exam_projects/exam_mysql/requirements.txt +3 -0
  24. pyqt6_sup-1.0.0/exam_projects/libr +11 -0
  25. pyqt6_sup-1.0.0/exam_projects/picture.png +0 -0
  26. pyqt6_sup-1.0.0/exam_projects/store.db +0 -0
  27. pyqt6_sup-1.0.0/pyproject.toml +16 -0
  28. pyqt6_sup-1.0.0/setup.cfg +4 -0
@@ -0,0 +1,2 @@
1
+ include README.md
2
+ recursive-include exam_projects *
@@ -0,0 +1,74 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyQt6-sup
3
+ Version: 1.0.0
4
+ Summary: Все шаблоны проектов для демо-экзамена 09.02.07
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+
8
+ # exam-mysql
9
+
10
+ Шаблон проекта для демонстрационного экзамена 09.02.07 «Информационные системы и программирование».
11
+
12
+ ## Состав
13
+
14
+ - `exam_mysql.py` — главное приложение (PyQt6 + MySQL)
15
+ - `config.py` — настройки подключения к БД
16
+ - `create_db.sql` — скрипт создания базы данных (3НФ)
17
+ - `insert_data.sql` — тестовые данные
18
+ - `picture.png` / `default.png` — заглушки для товаров без фото
19
+ - `product_images/` — папка с фото товаров
20
+ - `requirements.txt` — зависимости
21
+
22
+ ## Установка
23
+
24
+ ```bash
25
+ pip install exam-mysql
26
+ ```
27
+
28
+ ## Использование после установки
29
+
30
+ ```python
31
+ from exam_mysql import get_file, get_sql
32
+ from pathlib import Path
33
+ import shutil
34
+
35
+ # Получить путь к SQL-скрипту внутри установленного пакета
36
+ sql_path = get_sql("create_db.sql")
37
+
38
+ # Скопировать шаблон проекта на рабочий стол
39
+ desktop = Path.home() / "Desktop" / "exam_mysql_template"
40
+ desktop.mkdir(exist_ok=True)
41
+ shutil.copy(get_file("exam_mysql.py"), desktop)
42
+ shutil.copy(get_file("config.py"), desktop)
43
+ shutil.copy(get_file("create_db.sql"), desktop)
44
+ shutil.copy(get_file("insert_data.sql"), desktop)
45
+ shutil.copy(get_file("picture.png"), desktop)
46
+ ```
47
+
48
+ ## Запуск
49
+
50
+ ```bash
51
+ exam-mysql
52
+ ```
53
+
54
+ Или:
55
+
56
+ ```bash
57
+ python -m exam_mysql.exam_mysql
58
+ ```
59
+
60
+ ## Настройка БД
61
+
62
+ 1. Установи MySQL Server 8.0+
63
+ 2. Выполни скрипты:
64
+ ```bash
65
+ mysql -u root -p < create_db.sql
66
+ mysql -u root -p < insert_data.sql
67
+ ```
68
+ 3. Настрой `config.py` (логин/пароль MySQL)
69
+
70
+ ## Зависимости
71
+
72
+ - PyQt6
73
+ - PyMySQL
74
+ - MySQL Server 8.0+
@@ -0,0 +1,74 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyQt6-sup
3
+ Version: 1.0.0
4
+ Summary: Все шаблоны проектов для демо-экзамена 09.02.07
5
+ Requires-Python: >=3.10
6
+ Description-Content-Type: text/markdown
7
+
8
+ # exam-mysql
9
+
10
+ Шаблон проекта для демонстрационного экзамена 09.02.07 «Информационные системы и программирование».
11
+
12
+ ## Состав
13
+
14
+ - `exam_mysql.py` — главное приложение (PyQt6 + MySQL)
15
+ - `config.py` — настройки подключения к БД
16
+ - `create_db.sql` — скрипт создания базы данных (3НФ)
17
+ - `insert_data.sql` — тестовые данные
18
+ - `picture.png` / `default.png` — заглушки для товаров без фото
19
+ - `product_images/` — папка с фото товаров
20
+ - `requirements.txt` — зависимости
21
+
22
+ ## Установка
23
+
24
+ ```bash
25
+ pip install exam-mysql
26
+ ```
27
+
28
+ ## Использование после установки
29
+
30
+ ```python
31
+ from exam_mysql import get_file, get_sql
32
+ from pathlib import Path
33
+ import shutil
34
+
35
+ # Получить путь к SQL-скрипту внутри установленного пакета
36
+ sql_path = get_sql("create_db.sql")
37
+
38
+ # Скопировать шаблон проекта на рабочий стол
39
+ desktop = Path.home() / "Desktop" / "exam_mysql_template"
40
+ desktop.mkdir(exist_ok=True)
41
+ shutil.copy(get_file("exam_mysql.py"), desktop)
42
+ shutil.copy(get_file("config.py"), desktop)
43
+ shutil.copy(get_file("create_db.sql"), desktop)
44
+ shutil.copy(get_file("insert_data.sql"), desktop)
45
+ shutil.copy(get_file("picture.png"), desktop)
46
+ ```
47
+
48
+ ## Запуск
49
+
50
+ ```bash
51
+ exam-mysql
52
+ ```
53
+
54
+ Или:
55
+
56
+ ```bash
57
+ python -m exam_mysql.exam_mysql
58
+ ```
59
+
60
+ ## Настройка БД
61
+
62
+ 1. Установи MySQL Server 8.0+
63
+ 2. Выполни скрипты:
64
+ ```bash
65
+ mysql -u root -p < create_db.sql
66
+ mysql -u root -p < insert_data.sql
67
+ ```
68
+ 3. Настрой `config.py` (логин/пароль MySQL)
69
+
70
+ ## Зависимости
71
+
72
+ - PyQt6
73
+ - PyMySQL
74
+ - MySQL Server 8.0+
@@ -0,0 +1,26 @@
1
+ MANIFEST.in
2
+ README.md
3
+ pyproject.toml
4
+ PyQt6_sup.egg-info/PKG-INFO
5
+ PyQt6_sup.egg-info/SOURCES.txt
6
+ PyQt6_sup.egg-info/dependency_links.txt
7
+ PyQt6_sup.egg-info/top_level.txt
8
+ exam_projects/__init__.py
9
+ exam_projects/default.png
10
+ exam_projects/libr
11
+ exam_projects/picture.png
12
+ exam_projects/store.db
13
+ exam_projects/demo1.1/demo1.1/app.py
14
+ exam_projects/demo1.1/demo1.1/db.py
15
+ exam_projects/demo1.1/demo1.1/db.sql
16
+ exam_projects/demo1.1/demo1.1/main.py
17
+ exam_projects/demo1.1/demo1.1/product.py
18
+ exam_projects/exam_lite/exam.py
19
+ exam_projects/exam_lite/exam1.py
20
+ exam_projects/exam_mysql/config.py
21
+ exam_projects/exam_mysql/create_db.sql
22
+ exam_projects/exam_mysql/exam_mysql.py
23
+ exam_projects/exam_mysql/insert_data.sql
24
+ exam_projects/exam_mysql/picture.png
25
+ exam_projects/exam_mysql/requirements.txt
26
+ exam_projects/exam_mysql/product_images/prod_1781447171.358102.jpg
@@ -0,0 +1 @@
1
+ exam_projects
@@ -0,0 +1,67 @@
1
+ # exam-mysql
2
+
3
+ Шаблон проекта для демонстрационного экзамена 09.02.07 «Информационные системы и программирование».
4
+
5
+ ## Состав
6
+
7
+ - `exam_mysql.py` — главное приложение (PyQt6 + MySQL)
8
+ - `config.py` — настройки подключения к БД
9
+ - `create_db.sql` — скрипт создания базы данных (3НФ)
10
+ - `insert_data.sql` — тестовые данные
11
+ - `picture.png` / `default.png` — заглушки для товаров без фото
12
+ - `product_images/` — папка с фото товаров
13
+ - `requirements.txt` — зависимости
14
+
15
+ ## Установка
16
+
17
+ ```bash
18
+ pip install exam-mysql
19
+ ```
20
+
21
+ ## Использование после установки
22
+
23
+ ```python
24
+ from exam_mysql import get_file, get_sql
25
+ from pathlib import Path
26
+ import shutil
27
+
28
+ # Получить путь к SQL-скрипту внутри установленного пакета
29
+ sql_path = get_sql("create_db.sql")
30
+
31
+ # Скопировать шаблон проекта на рабочий стол
32
+ desktop = Path.home() / "Desktop" / "exam_mysql_template"
33
+ desktop.mkdir(exist_ok=True)
34
+ shutil.copy(get_file("exam_mysql.py"), desktop)
35
+ shutil.copy(get_file("config.py"), desktop)
36
+ shutil.copy(get_file("create_db.sql"), desktop)
37
+ shutil.copy(get_file("insert_data.sql"), desktop)
38
+ shutil.copy(get_file("picture.png"), desktop)
39
+ ```
40
+
41
+ ## Запуск
42
+
43
+ ```bash
44
+ exam-mysql
45
+ ```
46
+
47
+ Или:
48
+
49
+ ```bash
50
+ python -m exam_mysql.exam_mysql
51
+ ```
52
+
53
+ ## Настройка БД
54
+
55
+ 1. Установи MySQL Server 8.0+
56
+ 2. Выполни скрипты:
57
+ ```bash
58
+ mysql -u root -p < create_db.sql
59
+ mysql -u root -p < insert_data.sql
60
+ ```
61
+ 3. Настрой `config.py` (логин/пароль MySQL)
62
+
63
+ ## Зависимости
64
+
65
+ - PyQt6
66
+ - PyMySQL
67
+ - MySQL Server 8.0+
@@ -0,0 +1,7 @@
1
+ from pathlib import Path
2
+
3
+ PACKAGE_DIR = Path(__file__).parent
4
+
5
+ def get_path(filename):
6
+ """Возвращает путь к любому файлу в пакете."""
7
+ return PACKAGE_DIR / filename
@@ -0,0 +1,145 @@
1
+ import os
2
+ import sys
3
+ from product import *
4
+ from db import run_query
5
+ from PyQt6.QtWidgets import *
6
+ from PyQt6.QtCore import Qt
7
+
8
+ class AppWindow(QMainWindow):
9
+ def __init__(self, user):
10
+ super().__init__()
11
+ self.user = user
12
+ self.role = self.user['role_name']
13
+ self.sort_asc = True
14
+
15
+ self.setWindowTitle("Обувной магазин")
16
+ self.resize(800, 500)
17
+
18
+ self.tabs = QTabWidget()
19
+ self.setCentralWidget(self.tabs)
20
+ self.menu_tab = QWidget()
21
+ self.tabs.addTab(self.menu_tab, 'Меню')
22
+ self.setup_menu()
23
+
24
+ def logout(self):
25
+ os.execl(sys.executable, sys.executable, *sys.argv)
26
+
27
+ def add_btn(self, text, func, layout):
28
+ btn = QPushButton(text)
29
+ btn.clicked.connect(func)
30
+ btn.setStyleSheet("background-color: #7FFF00; font-family: Times New Roman;")
31
+ layout.addWidget(btn)
32
+ return btn
33
+
34
+ def setup_menu(self):
35
+ layout = QVBoxLayout(self.menu_tab)
36
+ admin_layout = QHBoxLayout()
37
+
38
+ exit_btn = self.menuBar().addAction('Выйти')
39
+ exit_btn.triggered.connect(self.logout)
40
+
41
+ if self.role == 'admin':
42
+ self.add_btn('Добавить', lambda: ProductManager.add_product(self), admin_layout)
43
+ self.add_btn('Удалить', lambda: ProductManager.delete_product(self), admin_layout)
44
+ self.add_btn('Изменить', lambda: ProductManager.change_product(self), admin_layout)
45
+ if self.role in ['admin', 'manager']:
46
+ self.add_btn('Управление заказами', self.manage_orders, admin_layout)
47
+
48
+ layout.addLayout(admin_layout)
49
+
50
+ if self.role in ['admin', 'manager']:
51
+ filt = QHBoxLayout()
52
+
53
+ self.search = QLineEdit()
54
+ self.search.setPlaceholderText("Поиск...")
55
+ self.search.textChanged.connect(self.load_product)
56
+
57
+ self.supplier_cb = QComboBox()
58
+ self.supplier_cb.addItem('Все поставщики', None)
59
+
60
+ for s in run_query("SELECT name, supplier_id FROM Suppliers", fetch='all'):
61
+ self.supplier_cb.addItem(s['name'], s['supplier_id'])
62
+
63
+ self.supplier_cb.currentIndexChanged.connect(self.load_product)
64
+
65
+ self.sort_btn = QPushButton("Склад: По возростанию")
66
+ self.sort_btn.clicked.connect(self.toggle_sort)
67
+
68
+ filt.addWidget(QLabel('Поиск:'))
69
+ filt.addWidget(self.search)
70
+ filt.addWidget(QLabel('Поставищики:'))
71
+ filt.addWidget(self.supplier_cb)
72
+ filt.addWidget(self.sort_btn)
73
+ layout.addLayout(filt)
74
+
75
+ scroll = QScrollArea(widgetResizable=True)
76
+ self.grid_w = QWidget()
77
+ self.grid = QGridLayout(self.grid_w)
78
+ scroll.setWidget(self.grid_w)
79
+ layout.addWidget(scroll)
80
+ self.load_product()
81
+
82
+ def toggle_sort(self):
83
+ self.sort_asc = not self.sort_asc
84
+ if self.sort_asc:
85
+ self.sort_btn.setText("Склад: По возрастанию")
86
+ else:
87
+ self.sort_btn.setText("Склад: По убыванию")
88
+ self.load_product()
89
+
90
+ def load_product(self):
91
+ for i in reversed(range(self.grid.count())):
92
+ self.grid.itemAt(i).widget().setParent(None)
93
+
94
+ search = ''
95
+ sup_id = None
96
+ product = run_query(PRODUCT_SQL, fetch='all') or []
97
+
98
+ if hasattr(self, 'search'):
99
+ search = self.search.text().strip().lower()
100
+
101
+ if hasattr(self, 'supplier_cb'):
102
+ sup_id = self.supplier_cb.currentData()
103
+
104
+ filtered = []
105
+ for p in product:
106
+ if sup_id and p.get('supplier_id') != sup_id:
107
+ continue
108
+ if search:
109
+ text = ' '.join(str(p.get(k) or ' ') for k in (
110
+ 'name', 'category', 'manufacture', 'supplier', 'unit'
111
+ )).lower()
112
+
113
+ if search not in text:
114
+ continue
115
+ filtered.append(p)
116
+
117
+ filtered.sort(
118
+ key=lambda x: int(x.get('quantity') or 0),
119
+ reverse=not self.sort_asc if hasattr(self, 'sort_asc') else False
120
+ )
121
+
122
+ for i, p in enumerate(filtered):
123
+ card = QFrame()
124
+ card.setFixedHeight(110)
125
+ card.setStyleSheet(card_style(p['quantity'], p['discount']))
126
+ h = QHBoxLayout(card)
127
+
128
+ img = QLabel()
129
+ img.setFixedSize(80, 80)
130
+ img.setPixmap(get_product_pixmap(p.get('image_path')))
131
+
132
+ info = QLabel(
133
+ f"<span style = 'front-size: 12px; font-family: Times New Roman;'><b>{p['name']}</b></span><br>"
134
+ f"Категория: {p.get('category') or '-'} | Бренд: {p.get('manufacture') or '-'}<br>"
135
+ f"Наличие: <b>{p['quantity']} {p['unit']}</b> | Скидка: {float(p.get('discount') or 0):.0f}%<br>"
136
+ f"Цена: {price_html(p['price'], p['discount'])}"
137
+ )
138
+ info.setFixedHeight(100)
139
+
140
+ h.addWidget(img)
141
+ h.addWidget(info)
142
+ self.grid.addWidget(card, i, 0)
143
+
144
+ def manage_orders(self):
145
+ pass
@@ -0,0 +1,32 @@
1
+ import pymysql
2
+
3
+ def get_connection():
4
+ return pymysql.connect(
5
+ host='localhost',
6
+ user='root',
7
+ password='marmag_0607',
8
+ database='shoes_store',
9
+ cursorclass=pymysql.cursors.DictCursor
10
+ )
11
+
12
+ def run_query(query, params=(), fetch=None):
13
+ conn = get_connection()
14
+
15
+ try:
16
+ with conn.cursor() as cursor:
17
+ cursor.execute(query, params)
18
+ if fetch == 'one': return cursor.fetchone()
19
+ if fetch == 'all': return cursor.fetchall()
20
+ conn.commit()
21
+ return cursor.lastrowid
22
+ finally:
23
+ conn.close()
24
+
25
+ def auth(login, password):
26
+ query = """
27
+ SELECT u.user_id, u.username, r.role_name
28
+ FROM Users u
29
+ JOIN Roles r ON r.role_id = u.role_id
30
+ WHERE u.username = %s AND u.passw = %s
31
+ """
32
+ return run_query(query, (login, password), fetch='one')
@@ -0,0 +1,111 @@
1
+ USE shoes_store;
2
+
3
+ CREATE TABLE IF NOT EXISTS Roles(
4
+ role_id INT PRIMARY KEY AUTO_INCREMENT,
5
+ role_name VARCHAR(100)
6
+ );
7
+
8
+ CREATE TABLE IF NOT EXISTS Users(
9
+ user_id INT PRIMARY KEY AUTO_INCREMENT,
10
+ username VARCHAR(100) NOT NULL,
11
+ passw VARCHAR(255) NOT NULL,
12
+ lastname VARCHAR(100),
13
+ firstname VARCHAR(100),
14
+ patronymic VARCHAR(100),
15
+ role_id INT,
16
+
17
+ FOREIGN KEY (role_id) REFERENCES Roles(role_id)
18
+ );
19
+
20
+ CREATE TABLE IF NOT EXISTS Categories(
21
+ category_id INT PRIMARY KEY AUTO_INCREMENT,
22
+ name VARCHAR(100)
23
+ );
24
+
25
+ CREATE TABLE IF NOT EXISTS Manufacturers(
26
+ manufacture_id INT PRIMARY KEY AUTO_INCREMENT,
27
+ name VARCHAR(100)
28
+ );
29
+
30
+ CREATE TABLE IF NOT EXISTS Suppliers(
31
+ supplier_id INT PRIMARY KEY AUTO_INCREMENT,
32
+ name VARCHAR(100)
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS Status(
36
+ status_id INT PRIMARY KEY AUTO_INCREMENT,
37
+ name VARCHAR(100)
38
+ );
39
+
40
+ CREATE TABLE IF NOT EXISTS Products(
41
+ product_id INT PRIMARY KEY AUTO_INCREMENT,
42
+ name VARCHAR(100),
43
+ category_id INT,
44
+ manufacture_id INT,
45
+ supplier_id INT,
46
+ price DECIMAL(10, 2),
47
+ quantity INT,
48
+ unit VARCHAR(10) DEFAULT "шт",
49
+ discount DECIMAL(5, 2) DEFAULT 0.00,
50
+ image_path VARCHAR(255),
51
+
52
+ FOREIGN KEY (category_id) REFERENCES Categories(category_id),
53
+ FOREIGN KEY (manufacture_id) REFERENCES Manufacturers(manufacture_id),
54
+ FOREIGN KEY (supplier_id) REFERENCES Suppliers(supplier_id)
55
+ );
56
+
57
+ CREATE TABLE IF NOT EXISTS Orders(
58
+ order_id INT PRIMARY KEY AUTO_INCREMENT,
59
+ user_id INT,
60
+ status_id INT,
61
+ address VARCHAR(100),
62
+ order_date DATE DEFAULT (CURRENT_DATE),
63
+
64
+ FOREIGN KEY (user_id) REFERENCES Users(user_id),
65
+ FOREIGN KEY (status_id) REFERENCES Status(status_id)
66
+ );
67
+
68
+ CREATE TABLE IF NOT EXISTS OrderItems(
69
+ item_id INT PRIMARY KEY AUTO_INCREMENT,
70
+ order_id INT,
71
+ product_id INT,
72
+ quantity INT,
73
+
74
+ FOREIGN KEY (order_id) REFERENCES Orders(order_id),
75
+ FOREIGN KEY (product_id) REFERENCES Products(product_id)
76
+ );
77
+
78
+ INSERT INTO Roles (role_name) VALUES
79
+ ('admin'),
80
+ ('manager'),
81
+ ('client');
82
+
83
+ INSERT INTO Users (username, passw, lastname, firstname, patronymic, role_id)
84
+ VALUES ('admin', 'admin', 'Абакаров', 'Магомед', 'Камильевич', 1),
85
+ ('manager', 'manager', 'Михаш', 'Михаил', 'Романович', 2),
86
+ ('client', 'client', 'Пучков', 'Максим', 'Ильич', 3);
87
+
88
+ INSERT INTO Categories (name) VALUES
89
+ ('Туфли'),
90
+ ('Кроссовки'),
91
+ ('Сапоги');
92
+
93
+ INSERT INTO Manufacturers (name) VALUES
94
+ ('Palermo'),
95
+ ('Adidas'),
96
+ ('ECCO');
97
+
98
+ INSERT INTO Suppliers (name) VALUES
99
+ ('Италия'),
100
+ ('Германия'),
101
+ ('США');
102
+
103
+ INSERT INTO Status (name) VALUES
104
+ ('Новый'),
105
+ ('В обработке'),
106
+ ('Готов');
107
+
108
+ INSERT INTO Products (name, category_id, manufacture_id, supplier_id, price, quantity, discount, image_path) VALUES
109
+ ('Palermo Brown', 1, 1, 1, 7600.00, 13, 5.00, 'images/palermo.jpg'),
110
+ ('Adidas Black Row', 2, 2, 2, 15500.00, 23, 45.00, 'images/black_row.jpg'),
111
+ ('ECCO Winter', 3, 3, 3, 9800.00, 5, 0.00, 'images/ecco.jpg');
@@ -0,0 +1,53 @@
1
+ import os
2
+ import sys
3
+ from db import auth
4
+ from app import AppWindow
5
+ from PyQt6.QtWidgets import *
6
+ from PyQt6.QtCore import Qt
7
+
8
+ class LoginWindow(QWidget):
9
+ def __init__(self):
10
+ super().__init__()
11
+ self.init_ui()
12
+
13
+ def init_ui(self):
14
+ layout = QVBoxLayout(self)
15
+ self.setWindowTitle("Авторизация")
16
+ self.resize(350, 200)
17
+ self.lbl = QLabel("<center>Авторизация</center>")
18
+ self.lbl.setAlignment(Qt.AlignmentFlag.AlignCenter)
19
+
20
+ self.login_line = QLineEdit()
21
+ self.login_line.setPlaceholderText("Логин")
22
+ self.pass_line = QLineEdit()
23
+ self.pass_line.setPlaceholderText("Пароль")
24
+
25
+ self.btn_login = QPushButton("Войти")
26
+ self.btn_guest = QPushButton("Гость")
27
+
28
+ for w in (self.lbl, self.login_line, self.pass_line, self.btn_login, self.btn_guest):
29
+ layout.addWidget(w)
30
+
31
+ self.btn_login.clicked.connect(self.try_login)
32
+ self.btn_guest.clicked.connect(lambda: self.main_win({'username': 'guest', 'role_name': 'client'}))
33
+
34
+ def try_login(self):
35
+ try:
36
+ user = auth(self.login_line.text(), self.pass_line.text())
37
+ if user:
38
+ QMessageBox.information(self, 'Успешно', 'Welcome')
39
+ self.main_win(user)
40
+ except Exception as e:
41
+ QMessageBox.warning(self, 'Ошибка', 'Упс, что-то не так')
42
+ print(e)
43
+
44
+ def main_win(self, user):
45
+ self.win = AppWindow(user)
46
+ self.win.show()
47
+ self.close()
48
+
49
+ if __name__ == "__main__":
50
+ app = QApplication(sys.argv)
51
+ window = LoginWindow()
52
+ window.show()
53
+ sys.exit(app.exec())