146 lines
5.7 KiB
Python
146 lines
5.7 KiB
Python
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()
|