import sys
import psycopg2
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtCore import Qt
# ПОДСТАВЬ СВОИ ДАННЫЕ
DB_CONFIG = {
"dbname": "publishing_center",
"user": "postgres",
"password": "123456",
"host": "localhost",
"port": 5432
}
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Заказы")
self.setGeometry(100, 100, 800, 600)
# Центральный виджет
central_widget = QWidget()
self.setCentralWidget(central_widget)
# Вертикальный layout
layout = QVBoxLayout()
central_widget.setLayout(layout)
# Кнопка обновить
self.btn_refresh = QPushButton("Обновить заказы")
self.btn_refresh.clicked.connect(self.load_orders)
layout.addWidget(self.btn_refresh)
# QLabel для вывода заказов (тупо текст)
self.label_orders = QLabel("Нажмите 'Обновить заказы'")
self.label_orders.setAlignment(Qt.AlignTop | Qt.AlignLeft)
self.label_orders.setWordWrap(True)
self.label_orders.setStyleSheet("font-family: monospace; font-size: 12px; padding: 10px;")
layout.addWidget(self.label_orders)
# Автоматически загрузить при старте
self.load_orders()
def load_orders(self):
"""Загрузить все заказы и вывести в QLabel"""
try:
conn = psycopg2.connect(**DB_CONFIG)
cur = conn.cursor()
cur.execute("""
SELECT
o.order_id,
o.order_date,
o.execute_date,
o.quantity,
b.title,
b.sale_price,
c.name
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()
if not rows:
self.label_orders.setText("ЗАКАЗОВ НЕТ")
return
# Формируем текст для QLabel
text = "=" * 60 + "\n"
text += "ВСЕ ЗАКАЗЫ\n"
text += "=" * 60 + "\n\n"
for order in rows:
order_id, order_date, execute_date, qty, title, price, customer = order
text += f"ЗАКАЗ №{order_id}\n"
text += f" Заказчик: {customer}\n"
text += f" Книга: {title}\n"
text += f" Кол-во: {qty} шт.\n"
text += f" Цена: {price:.2f} руб.\n"
text += f" Дата заказа: {order_date}\n"
text += f" Выполнен: {execute_date if execute_date else 'НЕТ'}\n"
text += "-" * 60 + "\n"
self.label_orders.setText(text)
except Exception as e:
self.label_orders.setText(f"ОШИБКА ПОДКЛЮЧЕНИЯ К БД:\n{str(e)}\n\nПроверь пароль и настройки!")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())