from PyQt5.QtWidgets import (QMainWindow, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QWidget, QFrame) from PyQt5.QtCore import Qt from PyQt5.QtGui import QFont from controller import Controller from experiment_design import ExperimentDesignWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Цифровой помощник биохимика - Главное меню") self.setGeometry(300, 200, 700, 500) self.setStyleSheet(""" QMainWindow { background-color: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #e8f4f8, stop:1 #f0f0f0); } QPushButton { background-color: #2196F3; color: white; border: none; padding: 15px; font-size: 16px; font-weight: bold; border-radius: 8px; font-family: 'Segoe UI', Arial; } QPushButton:hover { background-color: #1976D2; } QPushButton:pressed { background-color: #0D47A1; } QLabel { color: #333; font-size: 14px; font-family: 'Segoe UI', Arial; } """) self._init_ui() def _init_ui(self): central_widget = QWidget() self.setCentralWidget(central_widget) layout = QVBoxLayout(central_widget) layout.setSpacing(20) layout.setContentsMargins(50, 50, 50, 50) # Заголовок title_label = QLabel("Цифровой помощник биохимика") title_font = QFont() title_font.setPointSize(20) title_font.setBold(True) title_label.setFont(title_font) title_label.setAlignment(Qt.AlignCenter) title_label.setStyleSheet("color: #1565C0;") layout.addWidget(title_label) # Подзаголовок subtitle_label = QLabel("Биотехнологические инструменты для лаборатории") subtitle_font = QFont() subtitle_font.setPointSize(12) subtitle_label.setFont(subtitle_font) subtitle_label.setAlignment(Qt.AlignCenter) subtitle_label.setStyleSheet("color: #666;") layout.addWidget(subtitle_label) layout.addSpacing(20) # Кнопка 1: Калькулятор питательных сред btn_medium = QPushButton("Калькулятор питательных сред") btn_medium.setMinimumHeight(80) btn_medium.clicked.connect(self.open_medium_calculator) layout.addWidget(btn_medium) # Описание кнопки 1 desc1_label = QLabel("Расчёт состава питательной среды с учётом процентного содержания,\n" "разбавления реагентов и автоматическим расчётом растворителя") desc1_label.setAlignment(Qt.AlignCenter) desc1_label.setWordWrap(True) desc1_label.setStyleSheet("color: #555; font-size: 11px;") layout.addWidget(desc1_label) layout.addSpacing(15) # Кнопка 2: Планирование эксперимента btn_experiment = QPushButton("Планирование эксперимента (DoE)") btn_experiment.setMinimumHeight(80) btn_experiment.clicked.connect(self.open_experiment_designer) layout.addWidget(btn_experiment) # Описание кнопки 2 desc2_label = QLabel("Дизайн эксперимента, оптимизация процессов,\n" "многомерный анализ и визуализация") desc2_label.setAlignment(Qt.AlignCenter) desc2_label.setWordWrap(True) desc2_label.setStyleSheet("color: #555; font-size: 11px;") layout.addWidget(desc2_label) layout.addSpacing(15) # Линия-разделитель line = QFrame() line.setFrameShape(QFrame.HLine) line.setFrameShadow(QFrame.Sunken) layout.addWidget(line) # Нижняя панель bottom_layout = QHBoxLayout() # Информация о версии version_label = QLabel("Версия alpha 0.1.2 | © 2026 Цифровой помощник биохимика") version_label.setStyleSheet("color: #999; font-size: 10px;") bottom_layout.addWidget(version_label) bottom_layout.addStretch() # Кнопка выхода btn_exit = QPushButton("Выход") btn_exit.setMaximumWidth(150) btn_exit.setStyleSheet(""" QPushButton { background-color: #f44336; padding: 8px; font-size: 14px; } QPushButton:hover { background-color: #da190b; } """) btn_exit.clicked.connect(self.close) bottom_layout.addWidget(btn_exit) layout.addLayout(bottom_layout) def open_medium_calculator(self): """Открывает калькулятор питательной среды""" self.medium_calculator = Controller() self.medium_calculator.view.show() def open_experiment_designer(self): """Открывает окно планирования эксперимента""" self.experiment_window = ExperimentDesignWindow() self.experiment_window.show()