如何在PySide中创建功能区菜单

时间:2019-06-19 18:16:07

标签: python user-interface pyside

我正在尝试创建具有现代外观的用户界面的桌面应用程序,这意味着我要用功能区菜单替换传统的菜单栏和工具栏,例如MS Office套件中的菜单栏。

使用QTabWidget堆叠的QToolBar(带有QActions),我已经取得了一些进展,但是问题是,只有将其设置为CentralWidget时,它才能正确显示。后来,当我想实现表(QTableWidget)时,除了表以外,它什么都没有显示...

功能区的方法:

    def tab_menu(self):
        self.tabWidget = QTabWidget()
        self.tabWidget.setFixedHeight(120)
        self.setCentralWidget(self.tabWidget)

        self.tab1 = QFrame()
        layout = QGridLayout()

        addFile = QAction('Add entry', self)
        addFile.setIcon(icon1)
        removeFile = QAction('Remove entry', self)
        removeFile.setIcon(icon2)
        addFolder = QAction('New category', self)
        addFolder.setIcon(icon3)
        removeFolder = QAction('Remove category', self)
        removeFolder.setIcon(icon4)
        editFile = QAction('Change entry', self)
        editFile.setIcon(icon5)

        toolBar = QToolBar()
        toolBar.addAction(addFile)
        toolBar.addAction(removeFile)
        toolBar.addAction(editFile)
        toolBar.addSeparator()
        toolBar.addAction(addFolder)
        toolBar.addAction(removeFolder)

        icon_width = 60
        toolBar.setIconSize(QSize(icon_width, icon_width))

        layout.setAlignment(Qt.AlignLeft)
        layout.addWidget(toolBar, 0, 0)

        self.tab1.setLayout(layout)
        self.tabWidget.addTab(self.tab1, 'Edit')
        self.tabWidget.show()

我想知道如何“固定” QTabWidget到哪里,工具栏/菜单应该在哪里。我看到了https://doc.qt.io/qt-5/qmainwindow.html上显示的布局,但不确定如何使用它。

1 个答案:

答案 0 :(得分:0)

这是一个古老的问题,可惜没有得到回答。

如果您想要RibbonBar固定位置,只需将其插入QWidget容器中,使用QVBoxLayout分割表格,然后QWidget进入第一部分(即顶部)。

如果您真的想使用QDockWidgetArea,则必须使用QDockWidget作为父容器,然后将其放入TopDockWidgetArea,只有默认位置,用户才能移动它。也许也有一种使用Qt.TopToolBarArea的方法,但是我没有尝试过。

但是我想知道,是否可以自由使用Ribbonbar的想法。我看到了一些有关专利的讨论,这些专利阻止开发人员使用它。