Add profile module.

This commit is contained in:
wei
2026-07-14 22:22:58 +08:00
parent e15bd758f3
commit e3f761a995
9 changed files with 629 additions and 15 deletions
+60 -3
View File
@@ -1,6 +1,8 @@
from pathlib import Path
from PySide6.QtCore import QCoreApplication, QThread, QSize, Qt
from PySide6.QtGui import QScreen, QPixmap, QPainter, QPalette, QIcon
from PySide6.QtWidgets import QMainWindow, QApplication
from PySide6.QtGui import QScreen, QPixmap, QPainter, QPalette, QIcon, QColor
from PySide6.QtWidgets import QMainWindow, QApplication, QWidget
def move_window_to_center(window: QMainWindow):
@@ -14,6 +16,7 @@ def is_main_thread() -> bool:
app = QCoreApplication.instance()
return app is not None and QThread.currentThread() == app.thread()
# ======================== AI generated ========================
def recolor_standard_icon(widget, standard_pixmap, size=24):
source_icon = widget.style().standardIcon(standard_pixmap)
source = source_icon.pixmap(QSize(size, size))
@@ -32,4 +35,58 @@ def recolor_standard_icon(widget, standard_pixmap, size=24):
)
painter.end()
return QIcon(result)
return QIcon(result)
def recolor_pixmap(
path: str | Path,
color: QColor | None = None,
) -> QPixmap:
source = QPixmap(str(path))
if source.isNull():
raise FileNotFoundError(f"Unable to load image: {path}")
if color is None:
color = QApplication.palette().color(
QPalette.ColorRole.ButtonText
)
result = QPixmap(source.size())
result.setDevicePixelRatio(source.devicePixelRatio())
result.fill(Qt.GlobalColor.transparent)
painter = QPainter(result)
painter.drawPixmap(0, 0, source)
painter.setCompositionMode(
QPainter.CompositionMode.CompositionMode_SourceIn
)
painter.fillRect(result.rect(), color)
painter.end()
return result
def recolor_icon(
path: str | Path,
color: QColor | None = None,
) -> QIcon:
return QIcon(recolor_pixmap(path, color))
def is_light_theme(widget=None) -> bool:
palette = (
widget.palette()
if widget is not None
else QApplication.palette()
)
color = palette.color(QPalette.ColorRole.Window)
luminance = (
0.2126 * color.redF()
+ 0.7152 * color.greenF()
+ 0.0722 * color.blueF()
)
return luminance >= 0.5
# ======================== AI generated END ========================