Я делаю проект, это будет что-то вроде сборника программ (состоит из 3) написанный на PyQT Python, дизайн надо будет в отдельном файле из QtDesigner, надо будет реализовать структуру чистый и организованный код, чтобы все было по максимуму по критериям, далее сам функционал этого сборника (он будет по игре Genshin Impact):
1. Калькулятор критической массы артефактов персонажей (Уже реализовано)
2. Сбор пачек из имеющихся персов (Уже реализовано, немного криво но пойдет)
3. Высчитывание шанса выпадения нужного артефакта, есть выбор какой артефакт (эпик 4*, лега 5*), далее ты вводишь в случае с 4* либо 2 стата изначально у артефакта может быть либо 3, если же на 4 уровне, то там +1 стат то есть 3 или 4, в случае с легой то либо 3 либо 4 на 0 уровне, на 4 уровне +1 стат либо прокачивается один из 4 в случае если 4 стата изначально, на всех последующих каждые 4 уровня качается один и статов рандомный, у 4* артефакта 16 уровень максимальный, у 5* 20 уровень макс, также бы вают разне виды артефактов (цветок, перо, часы, кубок, корона), нужно высчитать вероятность потенциально полезного артефакта и показать потенциальные статы, в случае, если проки улетят в статы которые для человека в приоритете.
У меня есть код главной страницы, тебе нужно сюда подключить 3 программу:
# main.py

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from critmass_calculator.calculator_window import CalculatorWindow
from team_builder.team_builder_window import TeamBuilderWindow  # Import TeamBuilderWindow
from main_menu_ui import Ui_MainMenuWindow


class MainMenu(QMainWindow, Ui_MainMenuWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.calculatorButton.clicked.connect(self.open_calculator)
        self.teamBuilderButton.clicked.connect(self.open_team_builder)
        self.dropCalculatorButton.clicked.connect(self.open_drop_calculator)
        # TODO: Connect artefact analyzer when implemented

    def open_calculator(self):
        self.calculator = CalculatorWindow()
        self.calculator.show()

    def open_team_builder(self):
        self.team_builder = TeamBuilderWindow()
        self.team_builder.show()

    def open_drop_calculator(self):
        # Placeholder for Artifact Drop Calculator Window
        # self.drop_calculator = DropCalculatorWindow()
        # self.drop_calculator.show()
        QMessageBox.information(self, "Coming Soon", "Artifact Drop Calculator module is not yet implemented.")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_menu = MainMenu()
    main_menu.show()
    sys.exit(app.exec_())

Дизайн ui стилистически вот такой:
# main_menu_ui.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainMenuWindow(object):
    def setupUi(self, MainMenuWindow):
        MainMenuWindow.setObjectName("MainMenuWindow")
        MainMenuWindow.resize(500, 400)
        MainMenuWindow.setFixedSize(500, 400)  # Fixed window size
        MainMenuWindow.setWindowIcon(QtGui.QIcon("resources/icons/main_icon.png"))

        # Central Widget
        self.centralwidget = QtWidgets.QWidget(MainMenuWindow)
        self.centralwidget.setObjectName("centralwidget")

        # Title Label
        self.titleLabel = QtWidgets.QLabel(self.centralwidget)
        self.titleLabel.setGeometry(QtCore.QRect(100, 30, 300, 50))
        font = QtGui.QFont()
        font.setPointSize(18)
        font.setBold(True)
        self.titleLabel.setFont(font)
        self.titleLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.titleLabel.setObjectName("titleLabel")

        # Critical Mass Button
        self.calculatorButton = QtWidgets.QPushButton(self.centralwidget)
        self.calculatorButton.setGeometry(QtCore.QRect(150, 100, 200, 60))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.calculatorButton.setFont(font)
        self.calculatorButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.calculatorButton.setObjectName("calculatorButton")

        # Team Builder Button
        self.teamBuilderButton = QtWidgets.QPushButton(self.centralwidget)
        self.teamBuilderButton.setGeometry(QtCore.QRect(150, 180, 200, 60))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.teamBuilderButton.setFont(font)
        self.teamBuilderButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.teamBuilderButton.setObjectName("teamBuilderButton")

        # Artifact Drop Calculator Button
        self.dropCalculatorButton = QtWidgets.QPushButton(self.centralwidget)
        self.dropCalculatorButton.setGeometry(QtCore.QRect(150, 260, 200, 60))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.dropCalculatorButton.setFont(font)
        self.dropCalculatorButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.dropCalculatorButton.setObjectName("dropCalculatorButton")

        # Icons :D
        self.calculatorButton.setIcon(QtGui.QIcon("resources/icons/calculator_icon.png"))
        self.calculatorButton.setIconSize(QtCore.QSize(32, 32))
        self.teamBuilderButton.setIcon(QtGui.QIcon("resources/icons/team_builder_icon.png"))
        self.teamBuilderButton.setIconSize(QtCore.QSize(32, 32))
        self.dropCalculatorButton.setIcon(QtGui.QIcon("resources/icons/drop_calculator_icon.png"))
        self.dropCalculatorButton.setIconSize(QtCore.QSize(32, 32))

        MainMenuWindow.setCentralWidget(self.centralwidget)

        # Apply Stylesheet
        self.applyStyles()

        self.retranslateUi(MainMenuWindow)
        QtCore.QMetaObject.connectSlotsByName(MainMenuWindow)

    def retranslateUi(self, MainMenuWindow):
        _translate = QtCore.QCoreApplication.translate
        MainMenuWindow.setWindowTitle(_translate("MainMenuWindow", "ArteFactor - Main Menu"))
        self.titleLabel.setText(_translate("MainMenuWindow", "ArteFactor Toolkit"))
        self.calculatorButton.setText(_translate("MainMenuWindow", "Critical Mass Calculator"))
        self.teamBuilderButton.setText(_translate("MainMenuWindow", "Team Builder"))
        self.dropCalculatorButton.setText(_translate("MainMenuWindow", "Artifact Drop Calculator"))

    def applyStyles(self):
        style = """
        QWidget {
            background-color: #3B4252;
            color: #ECEFF4;
        }
        QLabel {
            color: #ECEFF4;
        }
        QPushButton {
            background-color: #5E81AC;
            border: none;
            border-radius: 10px;
            color: #ECEFF4;
        }
        QPushButton:hover {
            background-color: #81A1C1;
        }
        """
        self.centralwidget.setStyleSheet(style)