from PySide6.QtCore import Qt, QSize from PySide6.QtGui import QFont from PySide6.QtWidgets import ( QDialog, QWidget, QLabel, QVBoxLayout, QHBoxLayout, QPushButton, QSpacerItem, QSizePolicy, ) class ConfirmDialog(QDialog): def __init__( self, title: str, message: str, confirm_text: str, ok_object_name: str | None = None, ): super().__init__() self.setObjectName("ConfirmDialog") self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) self.setWindowModality(Qt.ApplicationModal) self.setAttribute(Qt.WA_TranslucentBackground) self.setMinimumSize(QSize(1024, 600)) root = QVBoxLayout(self) root.setContentsMargins(24, 24, 24, 24) root.setSpacing(16) root.addItem(QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding)) card = QWidget() card.setObjectName("ConfirmCard") card_layout = QVBoxLayout(card) card_layout.setContentsMargins(18, 18, 18, 18) card_layout.setSpacing(12) title_lbl = QLabel(title) title_lbl.setObjectName("ConfirmTitle") title_lbl.setFont(QFont("", 20, 700)) msg_lbl = QLabel(message) msg_lbl.setObjectName("ConfirmMessage") msg_lbl.setFont(QFont("", 14, 500)) msg_lbl.setWordWrap(True) actions = QHBoxLayout() actions.setContentsMargins(0, 0, 0, 0) actions.setSpacing(12) cancel_btn = QPushButton("Отмена") cancel_btn.setObjectName("ConfirmCancel") cancel_btn.setMinimumHeight(50) cancel_btn.setFont(QFont("", 14, 700)) cancel_btn.clicked.connect(self.reject) ok_btn = QPushButton(confirm_text) ok_btn.setObjectName(ok_object_name or "ConfirmOk") ok_btn.setMinimumHeight(50) ok_btn.setFont(QFont("", 14, 700)) ok_btn.clicked.connect(self.accept) actions.addWidget(cancel_btn, 1) actions.addWidget(ok_btn, 1) card_layout.addWidget(title_lbl) card_layout.addWidget(msg_lbl) card_layout.addLayout(actions) root.addWidget(card) root.addItem(QSpacerItem(10, 10, QSizePolicy.Minimum, QSizePolicy.Expanding))