Загрузка данных
import sys
import mysql.connector
from PySide6.QtWidgets import (
QApplication, QWidget, QLabel, QLineEdit,
QPushButton, QVBoxLayout, QTableWidget,
QTableWidgetItem, QMessageBox, QMainWindow,
QHeaderView
)
from PySide6.QtCore import Qt
DB_CONFIG = {
'host': 'localhost',
'user': 'root',
'password': 'root',
'database': 'publishing_center',
'charset': 'utf8mb4'
}
def get_connection():
return mysql.connector.connect(**DB_CONFIG)
class LoginWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Издательский центр — Вход')
self.setFixedSize(320, 200)
self.setup_ui()
def setup_ui(self):
layout = QVBoxLayout()
layout.setSpacing(10)
layout.setContentsMargins(30, 30, 30, 30)
layout.addWidget(QLabel('Логин:'))
self.login_input = QLineEdit()
self.login_input.setPlaceholderText('Введите логин')
layout.addWidget(self.login_input)
layout.addWidget(QLabel('Пароль:'))
self.password_input = QLineEdit()
self.password_input.setEchoMode(QLineEdit.EchoMode.Password)
self.password_input.setPlaceholderText('Введите пароль')
layout.addWidget(self.password_input)
self.login_btn = QPushButton('Войти')
self.login_btn.clicked.connect(self.do_login)
self.password_input.returnPressed.connect(self.do_login)
layout.addWidget(self.login_btn)
self.setLayout(layout)
def do_login(self):
login = self.login_input.text().strip()
password = self.password_input.text().strip()
if not login or not password:
QMessageBox.warning(self, 'Ошибка', 'Введите логин и пароль.')
return
try:
conn = get_connection()
cursor = conn.cursor()
cursor.execute(
"select customer_id, name from customers"
" where login = %s and password = %s",
(login, password)
)
row = cursor.fetchone()
cursor.close()
conn.close()
if row:
customer_id, customer_name = row
self.orders_win = OrdersWindow(customer_id, customer_name)
self.orders_win.show()
self.close()
else:
QMessageBox.warning(self, 'Ошибка', 'Неверный логин или пароль.')
except mysql.connector.Error as e:
QMessageBox.critical(self, 'Ошибка подключения', str(e))
class OrdersWindow(QMainWindow):
def __init__(self, customer_id: int, customer_name: str):
super().__init__()
self.customer_id = customer_id
self.setWindowTitle(f'Мои заказы — {customer_name}')
self.setMinimumSize(750, 420)
self.setup_ui()
self.load_orders()
def setup_ui(self):
central = QWidget()
self.setCentralWidget(central)
layout = QVBoxLayout(central)
layout.setContentsMargins(10, 10, 10, 10)
self.table = QTableWidget()
self.table.setColumnCount(5)
self.table.setHorizontalHeaderLabels([
'Номер заказа',
'Книга',
'Дата поступления',
'Дата выполнения',
'Количество (экз.)'
])
self.table.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers)
self.table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
self.table.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
self.table.verticalHeader().setVisible(False)
layout.addWidget(self.table)
def load_orders(self):
try:
conn = get_connection()
cursor = conn.cursor()
cursor.execute(
"select o.order_id, b.title, o.order_date,"
" o.fulfillment_date, o.quantity"
" from orders o"
" join books b on o.book_id = b.book_id"
" where o.customer_id = %s"
" order by o.order_date desc",
(self.customer_id,)
)
rows = cursor.fetchall()
cursor.close()
conn.close()
self.table.setRowCount(len(rows))
for i, row in enumerate(rows):
for j, val in enumerate(row):
text = str(val) if val is not None else '—'
item = QTableWidgetItem(text)
item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
self.table.setItem(i, j, item)
except mysql.connector.Error as e:
QMessageBox.critical(self, 'Ошибка БД', str(e))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = LoginWindow()
window.show()
sys.exit(app.exec())