46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
# coding: utf8
|
|
import sys
|
|
from PySide6 import __version__ as pyside6_version
|
|
from PySide6.QtCore import QAbstractListModel, QModelIndex, Qt, QObject
|
|
from PySide6.QtWidgets import QComboBox, QApplication, QWidget
|
|
|
|
|
|
class _StyleListModel(QAbstractListModel):
|
|
|
|
def __init__(self, parent: QObject = None):
|
|
super().__init__(parent)
|
|
if sys.platform == "win32":
|
|
self.styles = ["windowsvista", "Fusion", "Windows"]
|
|
ver = list(map(lambda s: int(s), pyside6_version.split(".")))
|
|
if ver >= [6, 7, 0]:
|
|
self.styles.insert(0, "windows11")
|
|
elif sys.platform == "darwin":
|
|
self.styles = ["macOS", "Fusion", "Windows"]
|
|
elif sys.platform == "linux":
|
|
self.styles = ["Fusion", "Windows"]
|
|
else:
|
|
self.styles = []
|
|
|
|
def rowCount(self, parent: QModelIndex = ...):
|
|
return len(self.styles)
|
|
|
|
def data(self, index: QModelIndex, role: int = ...):
|
|
row = index.row()
|
|
|
|
if role == Qt.ItemDataRole.DisplayRole:
|
|
return self.styles[row]
|
|
|
|
|
|
class StyleComboBox(QComboBox):
|
|
|
|
def __init__(self, parent: QWidget = None):
|
|
super().__init__(parent)
|
|
self.setModel(_StyleListModel(self))
|
|
self.currentIndexChanged.connect(self.on_self_current_index_changed)
|
|
|
|
def on_self_current_index_changed(self, index: int):
|
|
model = self.model()
|
|
idx = model.index(index, 0)
|
|
style = model.data(idx, Qt.ItemDataRole.DisplayRole)
|
|
QApplication.setStyle(style)
|