Files
help_lab/main_window.py
T

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()