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
相关产品推荐
相关产品推荐

