Загрузка данных


import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,
                             QLabel, QLineEdit, QPushButton, QTabWidget,
                             QSplitter, QRadioButton, QCheckBox, QGroupBox,
                             QStackedWidget, QTextEdit, Qt)


class SetupWizard(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Настройка проекта")
        self.resize(560, 480)

        # Главный сплиттер: контент сверху, кнопки снизу
        self.splitter = QSplitter(Qt.Orientation.Vertical)

        # Стек из трёх страниц
        self.stack = QStackedWidget()
        self.stack.addWidget(self.page1())
        self.stack.addWidget(self.page2())
        self.stack.addWidget(self.page3())

        # Нижняя панель навигации
        nav = QWidget()
        nav_layout = QHBoxLayout(nav)
        nav_layout.setContentsMargins(10, 5, 10, 5)

        self.btn_back = QPushButton("← Назад")
        self.btn_next = QPushButton("Вперед →")

        self.btn_back.clicked.connect(self.go_back)
        self.btn_next.clicked.connect(self.go_next)

        nav_layout.addWidget(self.btn_back)
        nav_layout.addStretch()
        nav_layout.addWidget(self.btn_next)

        self.splitter.addWidget(self.stack)
        self.splitter.addWidget(nav)
        self.splitter.setSizes([400, 50])

        layout = QVBoxLayout(self)
        layout.addWidget(self.splitter)

        self.update_nav()

    def go_back(self):
        i = self.stack.currentIndex()
        if i > 0:
            self.stack.setCurrentIndex(i - 1)
            self.update_nav()

    def go_next(self):
        i = self.stack.currentIndex()
        if i < self.stack.count() - 1:
            self.stack.setCurrentIndex(i + 1)
            self.update_nav()

    def update_nav(self):
        i = self.stack.currentIndex()
        last = self.stack.count() - 1
        self.btn_back.setEnabled(i > 0)
        self.btn_next.setEnabled(i < last)
        self.btn_next.setText("Завершить" if i == last else "Вперед →")

    def page1(self):
        page = QWidget()
        layout = QVBoxLayout(page)
        layout.addWidget(QLabel("<b>Шаг 1: Основные настройки</b>"))

        inner_split = QSplitter(Qt.Orientation.Vertical)
        info = QTextEdit()
        info.setReadOnly(True)
        info.setText("Информация о проекте")
        inner_split.addWidget(info)
        inner_split.addWidget(QLineEdit("Веб-сайт компании"))
        inner_split.setSizes([200, 40])

        layout.addWidget(inner_split)
        layout.addWidget(QPushButton("Создать проект"))
        return page

    def page2(self):
        page = QWidget()
        layout = QVBoxLayout(page)
        layout.addWidget(QLabel("<b>Шаг 2: Методология проекта</b>"))

        tabs = QTabWidget()

        tab1 = QWidget()
        t1 = QVBoxLayout(tab1)
        box1 = QGroupBox("Выбор методологии")
        b1 = QVBoxLayout(box1)
        for name in ("Agile", "Waterfall", "Kanban"):
            b1.addWidget(QRadioButton(name))
        b1.addStretch()
        t1.addWidget(box1)

        tab2 = QWidget()
        t2 = QVBoxLayout(tab2)
        box2 = QGroupBox("Настройки отчетов")
        b2 = QVBoxLayout(box2)
        b2.addWidget(QCheckBox("Еженедельные отчеты"))
        b2.addWidget(QCheckBox("Ежедневные стендапы"))
        b2.addStretch()
        t2.addWidget(box2)

        tabs.addTab(tab1, "Методология")
        tabs.addTab(tab2, "Отчетность")
        layout.addWidget(tabs)
        return page

    def page3(self):
        page = QWidget()
        layout = QVBoxLayout(page)
        layout.addWidget(QLabel("<b>Шаг 3: Описание проекта</b>"))

        self.description = QTextEdit()
        self.description.setPlaceholderText("Введите описание проекта...")
        self.description.setText("Корпоративный сайт с интернет-магазином.")
        layout.addWidget(self.description)

        return page


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = SetupWizard()
    window.show()
    sys.exit(app.exec())