You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt中QfluentWidgets导航栏仅显示首个子界面的问题求助

解决QfluentWidgets导航栏仅显示首个子界面的问题

问题现象

使用MSFluentWindow添加多个子界面时,仅第一个添加的界面能正常显示,其余界面点击导航项无反应;但将任意界面移到第一个添加的位置,该界面就能正常显示。

根因分析

所有子界面的objectName默认都是UI文件中定义的Form,MSFluentWindow依赖objectName作为子界面的唯一路由标识,重复的objectName导致导航系统无法正确匹配切换目标界面。

解决方案

以下两种方法任选其一即可:

方法一:给每个Widget类设置唯一objectName

修改各Widget类的初始化方法,加载UI后设置专属的objectName:

class Widget1(QtWidgets.QWidget):
    def __init__(self):
        super(Widget1, self).__init__()
        uic.loadUi(get_resource_path("1.ui"), self)
        self.setObjectName("InterfaceT1")

class Widget2(QtWidgets.QWidget):
    def __init__(self):
        super(Widget2, self).__init__()
        uic.loadUi(get_resource_path("2.ui"), self)
        self.setObjectName("InterfaceT2")

class Widget3(QtWidgets.QWidget):
    def __init__(self):
        super(Widget3, self).__init__()
        uic.loadUi(get_resource_path("3.ui"), self)
        self.setObjectName("InterfaceT3")

class Widget4(QtWidgets.QWidget):
    def __init__(self):
        super(Widget4, self).__init__()
        uic.loadUi(get_resource_path("4.ui"), self)
        self.setObjectName("InterfaceT4")

方法二:调用addSubInterface时显式指定routeKey

在initNavigation方法中,给每个addSubInterface调用添加唯一的routeKey参数:

def initNavigation(self):
    self.addSubInterface(self.InterfaceT1, FIF.QUICK_NOTE, '#1', routeKey='InterfaceT1')
    self.addSubInterface(self.InterfaceT2, FIF.DEVELOPER_TOOLS, '#2', routeKey='InterfaceT2')
    self.addSubInterface(self.InterfaceT3, FIF.RINGER, '#3', routeKey='InterfaceT3')
    self.addSubInterface(
        self.InterfaceT4, FIF.BOOK_SHELF, '#4', FIF.LIBRARY_FILL,
        NavigationItemPosition.BOTTOM, routeKey='InterfaceT4'
    )
    # 其余导航项代码保持不变

注意事项

  • 必须确保所有子界面的路由标识(objectName或显式routeKey)唯一,不能重复。
  • 原代码中仅给InterfaceT2设置了objectName,这是不完整的,需给所有子界面配置唯一标识。

内容的提问来源于stack exchange,提问作者Tim Li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:59:54