Skip to content

feat(settings): add ExpandPosition enum for upward expansion#1096

Closed
NeoAegis wants to merge 2 commits intozhiyiYo:PyQt5from
NeoAegis:PyQt5
Closed

feat(settings): add ExpandPosition enum for upward expansion#1096
NeoAegis wants to merge 2 commits intozhiyiYo:PyQt5from
NeoAegis:PyQt5

Conversation

@NeoAegis
Copy link
Copy Markdown
Contributor

@NeoAegis NeoAegis commented Jan 3, 2026

ExpandPosition - 展开设置卡片向上展开

参照 WinUI3 Expander 控件,为 ExpandSettingCard 添加向上展开功能

演示


  • expand_setting_card.py: 新增 ExpandPosition 枚举和向上展开支持
    • 新增 ExpandPosition 枚举类:UP(0), DOWN(1)

API

ExpandPosition 枚举

from qfluentwidgets import ExpandPosition

ExpandPosition.DOWN  # 向下展开(默认)
ExpandPosition.UP    # 向上展开

ExpandSettingCard

def __init__(
    icon: Union[str, QIcon, FIF],
    title: str,
    content: str = None,
    parent=None,
    expandPosition: ExpandPosition = ExpandPosition.DOWN
)
  • expandPosition: 展开方向(DOWN/UP)

@zhiyiYo
Copy link
Copy Markdown
Owner

zhiyiYo commented Jan 11, 2026

编译 qrc 之后,动态添加分组的时候新的分组没有显示出来,并且顶部的边框没有贴合第一个分组的背景:

2026-01-11.21.55.45.mp4
# coding:utf-8
import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout

from qfluentwidgets import *


class ServerCard(ExpandGroupSettingCard):

    def __init__(self, parent=None):
        super().__init__(FluentIcon.SHARE, "服务器", "配置流媒体服务器", parent, ExpandPosition.UP)
        self.addButton = PrimaryPushButton(FluentIcon.ADD, "添加服务器")
        self.addWidget(self.addButton)
        self.addButton.clicked.connect(self.addServerCard)

    def addServerCard(self):
        item = ServerItem(self)
        item.removeButton.clicked.connect(lambda: self.removeServerCard(item))
        self.addGroupWidget(item)

    def removeServerCard(self, card):
        self.removeGroupWidget(card)
        card.hide()
        card.deleteLater()


class ServerItem(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.addButton = PrimaryToolButton(FluentIcon.EDIT, self)
        self.removeButton = ToolButton(FluentIcon.DELETE, self)

        self.hBoxLayout = QHBoxLayout(self)
        self.hBoxLayout.addWidget(BodyLabel("服务器"))
        self.hBoxLayout.addStretch(1)
        self.hBoxLayout.addWidget(self.addButton)
        self.hBoxLayout.addWidget(self.removeButton)

        self.hBoxLayout.setContentsMargins(20, 12, 20, 12)




class Demo(QWidget):

    def __init__(self):
        super().__init__()
        layout = QHBoxLayout(self)
        card = ServerCard(self)
        layout.addWidget(card)

        self.resize(500, 500)



if __name__ == '__main__':
    # enable dpi scale
    QApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)

    app = QApplication(sys.argv)
    w = Demo()
    w.show()
    app.exec_()

@NeoAegis
Copy link
Copy Markdown
Contributor Author

2026-01-1420-29-08-ezgif.com-gif-maker.mp4

已修复

@zhiyiYo
Copy link
Copy Markdown
Owner

zhiyiYo commented Jan 17, 2026

看起来还是有点问题,顶部的边框没有贴合背景。

PS:resource.py 和 PyQt5 分支有冲突

2026-01-17.13.12.43.mp4

@NeoAegis NeoAegis closed this May 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants