Загрузка данных
import sys
import psycopg2
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QLabel, QTableWidget, QTableWidgetItem,
QScrollArea, QPushButton, QHeaderView, QGroupBox)
from PyQt5.QtCore import Qt
DB_CONFIG = {
"dbname": "publishing_center",
"user": "postgres",
"password": "123456",
"host": "localhost",
"port": 5432,
"client_encoding": "UTF8"
}
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Издательский центр - Заказы")
self.setGeometry(100, 100, 1100, 600)
central_widget = QWidget()
self.setCentralWidget(central_widget)
main_layout = QVBoxLayout()
central_widget.setLayout(main_layout)
title = QLabel("ВСЕ ЗАКАЗЫ В СИСТЕМЕ")
title.setStyleSheet("font-size: 20px; font-weight: bold; padding: 10px; background-color: #2c3e50; color: white;")
title.setAlignment(Qt.AlignCenter)
main_layout.addWidget(title)
btn_layout = QHBoxLayout()
self.btn_refresh = QPushButton("Обновить")
self.btn_refresh.setStyleSheet("font-size: 14px; padding: 8px; background-color: #3498db; color: white;")
self.btn_refresh.clicked.connect(self.load_orders)
btn_layout.addWidget(self.btn_refresh)
btn_layout.addStretch()
main_layout.addLayout(btn_layout)
group = QGroupBox("Список заказов")
group.setStyleSheet("font-size: 14px; font-weight: bold;")
group_layout = QVBoxLayout()
group.setLayout(group_layout)
scroll = QScrollArea()
scroll.setWidgetResizable(True)
scroll.setStyleSheet("border: 1px solid #bdc3c7;")
self.table = QTableWidget()
self.table.setColumnCount(7)
self.table.setHorizontalHeaderLabels(["Номер заказа", "Заказчик", "Книга", "Количество", "Цена", "Дата заказа", "Выполнен"])
self.table.setAlternatingRowColors(True)
self.table.setStyleSheet("""
QTableWidget {
font-size: 13px;
gridline-color: #bdc3c7;
}
QTableWidget::item {
padding: 8px;
}
QHeaderView::section {
background-color: #34495e;
color: white;
font-weight: bold;
padding: 8px;
}
""")
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.table.verticalHeader().setVisible(False)
scroll.setWidget(self.table)
group_layout.addWidget(scroll)
main_layout.addWidget(group)
self.status_label = QLabel("Готово")
self.status_label.setStyleSheet("padding: 5px; color: #7f8c8d;")
main_layout.addWidget(self.status_label)
self.load_orders()
def load_orders(self):
try:
conn = psycopg2.connect(**DB_CONFIG)
cur = conn.cursor()
cur.execute("""
SELECT
o.order_id,
c.name as customer_name,
b.title as book_title,
o.quantity,
b.sale_price,
o.order_date,
o.execute_date
FROM orders o
JOIN book b ON o.book_code = b.book_code
JOIN customer c ON o.customer_id = c.customer_id
ORDER BY o.order_date DESC;
""")
rows = cur.fetchall()
cur.close()
conn.close()
self.table.setRowCount(len(rows))
for i, row in enumerate(rows):
order_id, customer, book, qty, price, order_date, execute_date = row
self.table.setItem(i, 0, QTableWidgetItem(str(order_id)))
self.table.setItem(i, 1, QTableWidgetItem(str(customer)))
self.table.setItem(i, 2, QTableWidgetItem(str(book)))
self.table.setItem(i, 3, QTableWidgetItem(str(qty)))
self.table.setItem(i, 4, QTableWidgetItem(str(float(price))))
self.table.setItem(i, 5, QTableWidgetItem(str(order_date)))
if execute_date:
self.table.setItem(i, 6, QTableWidgetItem(str(execute_date)))
else:
item = QTableWidgetItem("НЕ ВЫПОЛНЕН")
item.setBackground(Qt.red)
item.setForeground(Qt.white)
self.table.setItem(i, 6, item)
self.status_label.setText("Загружено " + str(len(rows)) + " заказов")
except Exception as e:
self.status_label.setText("Ошибка: " + str(e))
self.table.setRowCount(0)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())