1

我正在尝试将新选项卡添加到 QTabBar 中,但没有成功。

我想要实现的是,当您单击“添加”图标时,将有 3 个菜单项。根据选择的项目,它将在“添加”图标之外创建一个新选项卡。

例如,如果我选择了选项 - food,则 gui 将显示如下内容:

| + | food |

在我的set_new_tab()中,虽然它似乎打印出了我选择的选项,但addTab似乎没有做任何事情。

想知道我是否遗漏了什么,或者是否QTabBar应该将 a 与 结合使用QTabWidget

这是我的代码:

class MyWin(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyWin, self).__init__()

        self.tab_bar = QtGui.QTabBar()
        self.add_button = QtGui.QToolButton(self)
        self.add_button.setIcon(QtGui.QIcon('add.png'))
        self.add_button.setMenu(self.set_menu())
        self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)

        self.tab_bar.setTabButton(
            0,
            QtGui.QTabBar.ButtonPosition.RightSide,
            self.add_button
        )

    def set_menu(self):
        menu_options = ['food', 'drinks', 'snacks']
        qmenu = QtGui.QMenu(self.add_button)

        for opt in menu_options:
            qmenu.addAction(opt, partial(self.set_new_tab, opt))
        qmenu.addAction
        return qmenu

    def set_new_tab(self, opt):
        print ">>> opt clicked on : ", opt
        self.tab_bar.addTab(opt) # This does not seems to creating new tabs..

感谢任何建议。

4

1 回答 1

1

问题不是在选项卡中创建,而是选项卡的大小很小并且位于按钮后面,因此解决方案是使用布局正确放置小部件。

from functools import partial
from PyQt4 import QtGui

class MyWin(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyWin, self).__init__()
        central_widget = QtGui.QWidget()
        self.setCentralWidget(central_widget)
        vlay = QtGui.QVBoxLayout(central_widget)
        hlay = QtGui.QHBoxLayout()
        vlay.addLayout(hlay)
        vlay.addStretch()

        self.add_button = QtGui.QToolButton()
        self.tab_bar = QtGui.QTabBar(self)
        self.add_button.setIcon(QtGui.QIcon('add.png'))
        self.add_button.setMenu(self.set_menu())
        self.add_button.setPopupMode(QtGui.QToolButton.InstantPopup)

        self.tab_bar.setTabButton(
            0,
            QtGui.QTabBar.ButtonPosition.RightSide,
            self.add_button
        )
        hlay.addWidget(self.add_button)
        hlay.addWidget(self.tab_bar)

    def set_menu(self):
        menu_options = ['food', 'drinks', 'snacks']
        qmenu = QtGui.QMenu(self.add_button)
        for opt in menu_options:
            qmenu.addAction(opt, partial(self.set_new_tab, opt))
        qmenu.addAction
        return qmenu

    def set_new_tab(self, opt):
        print(">>> opt clicked on : ", opt)
        self.tab_bar.addTab(opt)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = MyWin()
    w.show()
    sys.exit(app.exec_())
于 2018-12-20T23:31:53.880 回答