ChinaIceF / PyQt-SiliconUI

A powerful and artistic UI library based on PyQt5,基于 PyQt5 的UI框架,灵动、优雅而轻便
GNU General Public License v3.0
630 stars 67 forks source link

关于页面左边导航栏无法使用addpage函数动态添加切换菜单按钮(将按钮clicked连接到addpage) #129

Closed Linooos closed 2 months ago

Linooos commented 2 months ago

问题:

屏幕截图 2024-09-10 153739 settingpage是我按模板重写的一个页面,将此页面中的testbutton绑定到下方switchpagebutton,在点击button后出现

  1. 新页面按钮未出现
  2. 页面按钮向左偏移

屏幕截图 2024-09-10 153459

经研究定位到 page_view.py -> class PageNavigator -> addPageButton(),具体原因未知。 经修改后代码

`
self.sideList = [] # 添加到init

def addPageButton(self, svg_data, hint, func_when_active, side="top"):
    """
    添加页面按钮
    :param svg_data: 按钮的 svg 数据
    :param hint: 工具提示
    :param func_when_active: 当被激活时调用的函数
    :param side: 添加在哪一侧
    """
    new_page_button = PageButton(self)
    new_page_button.setIndex(self.maximumIndex())
    new_page_button.setStyleSheet("background-color: {};".format(self.colorGroup().fromToken(SiColor.INTERFACE_BG_F)))

    new_page_button.resize(40, 40)
    new_page_button.setHint(hint)
    new_page_button.attachment().setSvgSize(20, 20)
    new_page_button.attachment().load(svg_data)
    new_page_button.activated.connect(func_when_active)

    # 绑定索引切换信号,当页面切换时,会使按钮切换为 checked 状态
    self.indexChanged.connect(new_page_button.on_index_changed)
    self.buttons.append(new_page_button)
    self.sideList.append(side)

    # 新建垂直容器
    container = SiDenseVContainer(self)
    container.setSpacing(8)
    container.setAlignment(Qt.AlignCenter)

    # 重新将button加入布局
    for i in range(len(self.buttons)):
        self.buttons[i].setParent(None)
        container.addWidget(self.buttons[i], side=self.sideList[i])

    # 删除原布局
    self.container.deleteLater()

    # 添加新建布局
    self.container = container
    self.container.show()

    # 重新设置标签宽度以解决向左偏移问题
    self.container.resize(self.size())

    self.setMaximumIndex(self.maximumIndex() + 1)

` 以及是否有可能添加动态去除标签页的代码?

ChinaIceF commented 2 months ago

问题已复现

这个问题已经在这个push中修复,未来会继续完善动态修改界面的功能,感谢