56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
"""Icono de bandeja del sistema."""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from PySide6.QtCore import Qt
|
|
from PySide6.QtGui import QColor, QIcon, QPainter, QPixmap
|
|
|
|
_ASSETS_DIR = Path(__file__).resolve().parent.parent.parent / "packaging" / "assets"
|
|
|
|
|
|
def _generated_tray_icon() -> QIcon:
|
|
"""Icono simple en memoria si no hay archivo empaquetado."""
|
|
size = 32
|
|
pixmap = QPixmap(size, size)
|
|
pixmap.fill(Qt.GlobalColor.transparent)
|
|
painter = QPainter(pixmap)
|
|
painter.setRenderHint(QPainter.RenderHint.Antialiasing)
|
|
painter.setBrush(QColor(0, 120, 215))
|
|
painter.setPen(Qt.PenStyle.NoPen)
|
|
painter.drawRoundedRect(2, 2, size - 4, size - 4, 6, 6)
|
|
painter.setPen(QColor(255, 255, 255))
|
|
font = painter.font()
|
|
font.setBold(True)
|
|
font.setPointSize(14)
|
|
painter.setFont(font)
|
|
painter.drawText(pixmap.rect(), Qt.AlignmentFlag.AlignCenter, "C")
|
|
painter.end()
|
|
return QIcon(pixmap)
|
|
|
|
|
|
def load_tray_icon() -> QIcon:
|
|
"""Carga icono de bandeja desde assets empaquetados o genera uno por defecto."""
|
|
candidates: list[Path] = []
|
|
meipass = getattr(sys, "_MEIPASS", None)
|
|
if meipass:
|
|
base = Path(meipass)
|
|
candidates.extend(
|
|
[
|
|
base / "packaging" / "assets" / "tray-icon.png",
|
|
base / "packaging" / "assets" / "tray-icon.ico",
|
|
]
|
|
)
|
|
candidates.extend(
|
|
[
|
|
_ASSETS_DIR / "tray-icon.png",
|
|
_ASSETS_DIR / "tray-icon.ico",
|
|
]
|
|
)
|
|
for path in candidates:
|
|
if path.is_file():
|
|
icon = QIcon(str(path))
|
|
if not icon.isNull():
|
|
return icon
|
|
return _generated_tray_icon()
|