优化ui,正在优化gcode_viewer

This commit is contained in:
2026-05-16 23:21:20 +08:00
parent d80e8dd05d
commit 1c0fc59738
11 changed files with 1480 additions and 99 deletions

87
utils/modern_confirm.py Normal file
View File

@@ -0,0 +1,87 @@
from PyQt6.QtWidgets import QDialog, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QWidget
from PyQt6.QtCore import Qt, QSize
from PyQt6.QtGui import QPixmap
from .get_bootstrap_icon import get_colored_pixmap, get_colored_icon
class ModernConfirmDialog(QDialog):
"""符合项目深色圆角主题的现代确认对话框
用法dlg = ModernConfirmDialog(parent, title, message, icon_name)
if dlg.exec() == QDialog.DialogCode.Accepted: ...
"""
def __init__(self, parent: QWidget, title: str, message: str, icon_name: str = "question-circle.svg",
confirm_text: str = "确定", cancel_text: str = "取消"):
super().__init__(parent)
self.setWindowTitle(title)
self.setModal(True)
self.setWindowFlag(Qt.WindowType.WindowContextHelpButtonHint, False)
self.setFixedWidth(560)
# 样式
self.setStyleSheet(
"""
QDialog { background-color: #3f3f3f; border: 2px solid #646464; border-radius: 12px; }
QLabel#title { color: #f2f2f2; font-size: 22px; font-weight: 700; background-color: transparent;}
QLabel#message { color: #dcdcdc; font-size: 18px; background-color: transparent;}
QPushButton#confirm { min-width: 140px; min-height: 48px; font-size: 18px; font-weight: 700; color: #ffffff; background-color: #2f6f91; border: 2px solid #4a9fc8; border-radius: 10px; }
QPushButton#confirm:hover { background-color: #3a85b3; }
QPushButton#cancel { min-width: 120px; min-height: 48px; font-size: 18px; font-weight: 600; color: #f2f2f2; background-color: #555555; border: 2px solid #707070; border-radius: 10px; }
QPushButton#cancel:hover { background-color: #636363; }
"""
)
root = QVBoxLayout(self)
root.setContentsMargins(20, 20, 20, 20)
root.setSpacing(16)
top_row = QHBoxLayout()
top_row.setSpacing(16)
# 图标
icon_label = QLabel()
icon_label.setStyleSheet("background-color: transparent;")
icon_pix = get_colored_pixmap(icon_name, "#4a9fc8", 64, 64)
if isinstance(icon_pix, QPixmap):
icon_label.setPixmap(icon_pix.scaled(64, 64, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation))
icon_label.setFixedSize(72, 72)
top_row.addWidget(icon_label, alignment=Qt.AlignmentFlag.AlignTop)
# 文本列
text_col = QVBoxLayout()
title_lbl = QLabel(title)
title_lbl.setObjectName("title")
text_col.addWidget(title_lbl)
msg_lbl = QLabel(message)
msg_lbl.setObjectName("message")
msg_lbl.setWordWrap(True)
text_col.addWidget(msg_lbl)
top_row.addLayout(text_col)
root.addLayout(top_row)
# 按钮行
btn_row = QHBoxLayout()
btn_row.addStretch()
cancel_btn = QPushButton(cancel_text)
cancel_btn.setObjectName("cancel")
cancel_icon = get_colored_icon("x-circle.svg", "#f2f2f2", 20, 20)
if cancel_icon:
cancel_btn.setIcon(cancel_icon)
cancel_btn.setIconSize(QSize(18, 18))
cancel_btn.clicked.connect(self.reject)
btn_row.addWidget(cancel_btn)
confirm_btn = QPushButton(confirm_text)
confirm_btn.setObjectName("confirm")
confirm_icon = get_colored_icon("check-circle.svg", "#ffffff", 20, 20)
if confirm_icon:
confirm_btn.setIcon(confirm_icon)
confirm_btn.setIconSize(QSize(18, 18))
confirm_btn.clicked.connect(self.accept)
btn_row.addWidget(confirm_btn)
root.addLayout(btn_row)