initial fluent-widgets ui
This commit is contained in:
86
qfluentwidgets/components/settings/options_setting_card.py
Normal file
86
qfluentwidgets/components/settings/options_setting_card.py
Normal file
@ -0,0 +1,86 @@
|
||||
# coding:utf-8
|
||||
from typing import Union
|
||||
from PySide6.QtCore import Signal
|
||||
from PySide6.QtGui import QIcon
|
||||
from PySide6.QtWidgets import QButtonGroup, QLabel
|
||||
|
||||
from ...common.config import OptionsConfigItem, qconfig
|
||||
from ...common.icon import FluentIconBase
|
||||
from ..widgets.button import RadioButton
|
||||
from .expand_setting_card import ExpandSettingCard
|
||||
|
||||
|
||||
class OptionsSettingCard(ExpandSettingCard):
|
||||
""" setting card with a group of options """
|
||||
|
||||
optionChanged = Signal(OptionsConfigItem)
|
||||
|
||||
def __init__(self, configItem, icon: Union[str, QIcon, FluentIconBase], title, content=None, texts=None, parent=None):
|
||||
"""
|
||||
Parameters
|
||||
----------
|
||||
configItem: OptionsConfigItem
|
||||
options config item
|
||||
|
||||
icon: str | QIcon | FluentIconBase
|
||||
the icon to be drawn
|
||||
|
||||
title: str
|
||||
the title of setting card
|
||||
|
||||
content: str
|
||||
the content of setting card
|
||||
|
||||
texts: List[str]
|
||||
the texts of radio buttons
|
||||
|
||||
parent: QWidget
|
||||
parent window
|
||||
"""
|
||||
super().__init__(icon, title, content, parent)
|
||||
self.texts = texts or []
|
||||
self.configItem = configItem
|
||||
self.configName = configItem.name
|
||||
self.choiceLabel = QLabel(self)
|
||||
self.buttonGroup = QButtonGroup(self)
|
||||
|
||||
self.choiceLabel.setObjectName("titleLabel")
|
||||
self.addWidget(self.choiceLabel)
|
||||
|
||||
# create buttons
|
||||
self.viewLayout.setSpacing(19)
|
||||
self.viewLayout.setContentsMargins(48, 18, 0, 18)
|
||||
for text, option in zip(texts, configItem.options):
|
||||
button = RadioButton(text, self.view)
|
||||
self.buttonGroup.addButton(button)
|
||||
self.viewLayout.addWidget(button)
|
||||
button.setProperty(self.configName, option)
|
||||
|
||||
self._adjustViewSize()
|
||||
self.setValue(qconfig.get(self.configItem))
|
||||
configItem.valueChanged.connect(self.setValue)
|
||||
self.buttonGroup.buttonClicked.connect(self.__onButtonClicked)
|
||||
|
||||
def __onButtonClicked(self, button: RadioButton):
|
||||
""" button clicked slot """
|
||||
if button.text() == self.choiceLabel.text():
|
||||
return
|
||||
|
||||
value = button.property(self.configName)
|
||||
qconfig.set(self.configItem, value)
|
||||
|
||||
self.choiceLabel.setText(button.text())
|
||||
self.choiceLabel.adjustSize()
|
||||
self.optionChanged.emit(self.configItem)
|
||||
|
||||
def setValue(self, value):
|
||||
""" select button according to the value """
|
||||
qconfig.set(self.configItem, value)
|
||||
|
||||
for button in self.buttonGroup.buttons():
|
||||
isChecked = button.property(self.configName) == value
|
||||
button.setChecked(isChecked)
|
||||
|
||||
if isChecked:
|
||||
self.choiceLabel.setText(button.text())
|
||||
self.choiceLabel.adjustSize()
|
||||
Reference in New Issue
Block a user