PyQt5 在每个选项卡旁边添加添加和删除小部件按钮

Posted

技术标签:

【中文标题】PyQt5 在每个选项卡旁边添加添加和删除小部件按钮【英文标题】:PyQt5 adding add and remove widget buttons beside every tab 【发布时间】:2019-10-05 17:49:13 【问题描述】:

我想在 QTabWidget 的选项卡中添加按钮。

我的第一直觉是尝试获取每个选项卡的位置,然后在选项卡顶部添加按钮,但我不知道如何获取选项卡的位置!只有整个选项卡小部件。

我环顾四周,现在我认为我应该做的是创建一个自定义 TabBar 类,我可以在每个选项卡上放置按钮,就像标准 Qt 关闭按钮一样。

这里有谁能把我送到正确的方向吗?

【问题讨论】:

见***.com/questions/51114563/… 您可以在您的问题中放置一张图片,只是系统会将其保留为链接,因为您没有足够的声誉,并且任何其他有足够声誉的用户(例如我)可以显示它.因此,我邀请您放置图像以更好地了解您。 这就是我的意思:imgur.com/a/xMcwkxt 【参考方案1】:

好的,所以我发现了如何让它像我想要的那样工作。这实际上很简单,我制作了一个具有水平布局和两个按钮的 QWidget 类,并将其传递给 setTabButton 函数。有兴趣的朋友请看下面的代码。

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow


class TabExample(QMainWindow):
    def __init__(self):
        super(TabExample, self).__init__()
        self.setWindowTitle("Tab example")

        # Create widgets
        self.tab_widget = QtWidgets.QTabWidget()
        self.setCentralWidget(self.tab_widget)

        # Label's to fill widget
        self.label1 = QtWidgets.QLabel("Tab 1")
        self.label2 = QtWidgets.QLabel("Tab 2")

        # Adding tab's
        self.tab_widget.addTab(self.label1, "Tab 1")
        self.tab_widget.addTab(self.label2, "Tab 2")

        # Tab button's
        self.right = self.tab_widget.tabBar().RightSide
        self.tab_widget.tabBar().setTabButton(0, self.right, TabButtonWidget())
        self.tab_widget.tabBar().setTabButton(1, self.right, TabButtonWidget())

        # Tab settings
        self.tab_widget.tabBar().setMovable(True)

        self.show()


class TabButtonWidget(QtWidgets.QWidget):
    def __init__(self):
        super(TabButtonWidget, self).__init__()
        # Create button's
        self.button_add = QtWidgets.QPushButton("+")
        self.button_remove = QtWidgets.QPushButton("-")

        # Set button size
        self.button_add.setFixedSize(16, 16)
        self.button_remove.setFixedSize(16, 16)

        # Create layout
        self.layout = QtWidgets.QVBoxLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)

        # Add button's to layout
        self.layout.addWidget(self.button_add)
        self.layout.addWidget(self.button_remove)

        # Use layout in widget
        self.setLayout(self.layout)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    gui = TabExample()
    sys.exit(app.exec_())

【讨论】:

以上是关于PyQt5 在每个选项卡旁边添加添加和删除小部件按钮的主要内容,如果未能解决你的问题,请参考以下文章

从多个类组成 PyQt5 UI

PyQt 中的动态小部件添加

通过 pyqt5 动态添加和删除小部件

PyQt5 - 如何在“按钮”小部件中添加图像? | (不是图标)

在滚动区域小部件的 PyQt5 中添加 n 列

PyQt5-Qt Designer工具箱(QToolBox)控件的使用