Загрузка данных
import sys
from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QHBoxLayout, QLabel, QPushButton, QStackedWidget,
QSplitter, QTabWidget, QLineEdit, QTextEdit,
QRadioButton, QCheckBox, QGroupBox)
from PyQt6.QtGui import QFont
class Wizard(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Настройка проекта")
self.resize(600, 500)
# Центральный виджет
central = QWidget()
self.setCentralWidget(central)
layout = QVBoxLayout(central)
# Стек страниц
self.stack = QStackedWidget()
layout.addWidget(self.stack)
# ---------- Шаг 1: QSplitter ----------
page1 = QWidget()
p1_layout = QVBoxLayout(page1)
title1 = QLabel("Шаг 1: Основные настройки")
title1.setFont(QFont("Arial", 12, QFont.Weight.Bold))
p1_layout.addWidget(title1)
splitter = QSplitter()
splitter.addWidget(QLabel("Информация о проекте"))
splitter.addWidget(QLineEdit("Веб-сайт компании"))
splitter.setSizes([300, 300])
p1_layout.addWidget(splitter)
p1_layout.addWidget(QPushButton("Создать проект"))
p1_layout.addStretch()
# ---------- Шаг 2: QTabWidget ----------
page2 = QWidget()
p2_layout = QVBoxLayout(page2)
title2 = QLabel("Шаг 2: Методология проекта")
title2.setFont(QFont("Arial", 12, QFont.Weight.Bold))
p2_layout.addWidget(title2)
tabs2 = QTabWidget()
# Вкладка 1: Методология
tab_method = QWidget()
tm_layout = QVBoxLayout(tab_method)
box1 = QGroupBox("Выбор методологии")
b1_layout = QVBoxLayout(box1)
b1_layout.addWidget(QRadioButton("Agile"))
b1_layout.addWidget(QRadioButton("Waterfall"))
b1_layout.addWidget(QRadioButton("Kanban"))
tm_layout.addWidget(box1)
tabs2.addTab(tab_method, "Методология")
# Вкладка 2: Отчётность
tab_report = QWidget()
tr_layout = QVBoxLayout(tab_report)
box2 = QGroupBox("Настройки отчетов")
b2_layout = QVBoxLayout(box2)
b2_layout.addWidget(QCheckBox("Еженедельные отчеты"))
b2_layout.addWidget(QCheckBox("Ежедневные стендапы"))
tr_layout.addWidget(box2)
tabs2.addTab(tab_report, "Отчетность")
p2_layout.addWidget(tabs2)
p2_layout.addStretch()
# ---------- Шаг 3: QTabWidget (один таб) ----------
page3 = QWidget()
p3_layout = QVBoxLayout(page3)
title3 = QLabel("Шаг 3: Описание проекта")
title3.setFont(QFont("Arial", 12, QFont.Weight.Bold))
p3_layout.addWidget(title3)
tabs3 = QTabWidget()
tabs3.setTabBarAutoHide(True) # Скрываем панель вкладок
tab_desc = QWidget()
td_layout = QVBoxLayout(tab_desc)
td_layout.addWidget(QTextEdit("Корпоративный сайт с интернет-магазином."))
tabs3.addTab(tab_desc, "Описание")
p3_layout.addWidget(tabs3)
p3_layout.addStretch()
# Добавляем страницы в стек
self.stack.addWidget(page1)
self.stack.addWidget(page2)
self.stack.addWidget(page3)
# ---------- Кнопки навигации ----------
nav = QHBoxLayout()
self.btn_back = QPushButton("← Назад")
self.btn_next = QPushButton("Вперед →")
self.btn_finish = QPushButton("Завершить")
self.btn_back.setEnabled(False)
self.btn_finish.setVisible(False)
nav.addWidget(self.btn_back)
nav.addStretch()
nav.addWidget(self.btn_next)
nav.addWidget(self.btn_finish)
layout.addLayout(nav)
# Сигналы
self.btn_back.clicked.connect(self.go_back)
self.btn_next.clicked.connect(self.go_next)
self.btn_finish.clicked.connect(self.close)
def go_back(self):
i = self.stack.currentIndex()
if i > 0:
self.stack.setCurrentIndex(i - 1)
self.update_buttons()
def go_next(self):
i = self.stack.currentIndex()
if i < self.stack.count() - 1:
self.stack.setCurrentIndex(i + 1)
self.update_buttons()
def update_buttons(self):
i = self.stack.currentIndex()
self.btn_back.setEnabled(i > 0)
# На последнем шаге вместо "Вперед" показываем "Завершить"
last = (i == self.stack.count() - 1)
self.btn_next.setVisible(not last)
self.btn_finish.setVisible(last)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Wizard()
window.show()
sys.exit(app.exec())