| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- import sys
- from PyQt6.QtWidgets import (
- QApplication, QWidget, QVBoxLayout, QHBoxLayout,
- QLineEdit, QPushButton, QTableWidget,
- QTableWidgetItem, QLabel
- )
- from bd import get_connection
- class SportApp(QWidget):
- def __init__(self):
- super().__init__()
- self.selected_id = None
- self.setWindowTitle("Спортивные организации города")
- self.setGeometry(200, 200, 900, 500)
- self.init_ui()
- self.load_data()
- def init_ui(self):
- layout = QVBoxLayout()
- # ===== Поля ввода =====
- self.name_input = QLineEdit()
- self.address_input = QLineEdit()
- self.sport_input = QLineEdit()
- self.phone_input = QLineEdit()
- layout.addWidget(QLabel("Название"))
- layout.addWidget(self.name_input)
- layout.addWidget(QLabel("Адрес"))
- layout.addWidget(self.address_input)
- layout.addWidget(QLabel("Вид спорта"))
- layout.addWidget(self.sport_input)
- layout.addWidget(QLabel("Телефон"))
- layout.addWidget(self.phone_input)
- # ===== Кнопки =====
- btn_layout = QHBoxLayout()
- self.add_btn = QPushButton("Добавить")
- self.update_btn = QPushButton("Изменить")
- self.delete_btn = QPushButton("Удалить выбранную")
- self.add_btn.clicked.connect(self.add_org)
- self.update_btn.clicked.connect(self.update_org)
- self.delete_btn.clicked.connect(self.delete_org)
- btn_layout.addWidget(self.add_btn)
- btn_layout.addWidget(self.update_btn)
- btn_layout.addWidget(self.delete_btn)
- layout.addLayout(btn_layout)
- # ===== Таблица =====
- self.table = QTableWidget()
- self.table.setColumnCount(5)
- self.table.setHorizontalHeaderLabels(
- ["ID", "Название", "Адрес", "Спорт", "Телефон"]
- )
- self.table.itemClicked.connect(self.row_selected)
- layout.addWidget(self.table)
- self.setLayout(layout)
- # ===== Загрузка данных =====
- def load_data(self):
- conn = get_connection()
- cur = conn.cursor()
- cur.execute("""
- SELECT id, name, address, sport_type, phone
- FROM sport_organizations
- ORDER BY id
- """)
- rows = cur.fetchall()
- cur.close()
- conn.close()
- self.table.setRowCount(len(rows))
- for i, row in enumerate(rows):
- for j, value in enumerate(row):
- self.table.setItem(i, j, QTableWidgetItem(str(value)))
- # ===== Выбор строки =====
- def row_selected(self):
- row = self.table.currentRow()
- self.selected_id = int(self.table.item(row, 0).text())
- self.name_input.setText(self.table.item(row, 1).text())
- self.address_input.setText(self.table.item(row, 2).text())
- self.sport_input.setText(self.table.item(row, 3).text())
- self.phone_input.setText(self.table.item(row, 4).text())
- # ===== Добавление =====
- def add_org(self):
- conn = get_connection()
- cur = conn.cursor()
- cur.execute("""
- INSERT INTO sport_organizations
- (name, address, sport_type, phone)
- VALUES (%s, %s, %s, %s)
- """, (
- self.name_input.text(),
- self.address_input.text(),
- self.sport_input.text(),
- self.phone_input.text()
- ))
- conn.commit()
- cur.close()
- conn.close()
- self.load_data()
- # ===== Обновление =====
- def update_org(self):
- if self.selected_id is None:
- return
- conn = get_connection()
- cur = conn.cursor()
- cur.execute("""
- UPDATE sport_organizations
- SET name=%s,
- address=%s,
- sport_type=%s,
- phone=%s
- WHERE id=%s
- """, (
- self.name_input.text(),
- self.address_input.text(),
- self.sport_input.text(),
- self.phone_input.text(),
- self.selected_id
- ))
- conn.commit()
- cur.close()
- conn.close()
- self.load_data()
- # ===== Удаление =====
- def delete_org(self):
- if self.selected_id is None:
- return
- conn = get_connection()
- cur = conn.cursor()
- cur.execute(
- "DELETE FROM sport_organizations WHERE id=%s",
- (self.selected_id,)
- )
- conn.commit()
- cur.close()
- conn.close()
- self.load_data()
- # ===== запуск =====
- if __name__ == "__main__":
- app = QApplication(sys.argv)
- window = SportApp()
- window.show()
- sys.exit(app.exec())
|