Загрузка данных
import sys
from PyQt6.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,
QLabel, QLineEdit, QPushButton, QTabWidget,
QSplitter, QRadioButton, QCheckBox, QGroupBox,
QStackedWidget, QTextEdit)
from PyQt6.QtCore import 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()) # Шаг 1
self.stack.addWidget(self.page2()) # Шаг 2
self.stack.addWidget(self.page3()) # Шаг 3
# Нижняя панель навигации
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)
# На последнем шаге — «Завершить»
if i == last:
self.btn_next.setText("Завершить")
else:
self.btn_next.setText("Вперед →")
# ---------- Страницы ----------
def page1(self):
"""Шаг 1: Основные настройки"""
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):
"""Шаг 2: Методология (с вкладками)"""
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):
"""Шаг 3: Описание проекта"""
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)
SetupWizard().show()
sys.exit(app.exec())