使每个标签的宽度相同,也可展开AB

2024-10-01 15:36:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从浏览器中实现类似标签的功能。所有标签必须有相同的宽度,也可以扩展,所以当有很多标签时,它们需要调整大小并适应窗口(就像Chrome或Firefox那样)。在


问题:

如果一个选项卡的文本比其他选项卡多,则该选项卡将更大。是这样的:

enter image description here

如果我产生很多标签,它总是比其他标签大。在

enter image description here


我的尝试:

我尝试添加一个样式表来更改宽度,但是如果我将宽度更改为特定的数字,则选项卡将是静态的,不会根据选项卡的数量调整大小以适应窗口。我还试图调整最小/最大宽度,弄乱了QSizePolicy,但没有机会。在

<>我已经看过了C++的QT5文档和Google,但是没有地方谈论这个或任何选项。在

也许我需要在python中进行一些计算,并将其作为参数添加到样式表中,但不确定如何进行。也许我错过了一个简单的选择。在


我的代码:(这是完整的代码,如果需要,可以复制粘贴并测试)

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTabWidget,\
    QVBoxLayout, QHBoxLayout, QSizePolicy


class Container(QWidget):
    def __init__(self, text):
        super(Container, self).__init__()

        self.hbox = QHBoxLayout()
        self.hbox.setSpacing(0)
        self.hbox.setContentsMargins(0, 0, 0, 0)
        self.setLayout(self.hbox)

        self.button = QPushButton(text)
        self.hbox.addWidget(self.button)


class CustomWidget (QWidget):
    def __init__(self, parent=None):
        super(CustomWidget, self).__init__(parent)

        self.button = QPushButton("Add tab")
        self.button.clicked.connect(self.buttonClicked)

        self.tabs = QTabWidget()
        self.tabs.setTabsClosable(True)
        self.tabs.setMovable(True)
        self.tabs.setDocumentMode(True)
        self.tabs.setElideMode(Qt.ElideRight)
        self.tabs.setUsesScrollButtons(True)
        self.tabs.tabCloseRequested.connect(self.closeTab)

        self.tabs.addTab(Container("Very big titleeeeeeeeee"),
                         "Very big titleeeeeeeeeeee")
        self.tabs.addTab(Container("smalltext"), "smalltext")
        self.tabs.addTab(Container("smalltext2"), "smalltext2")

        vbox = QVBoxLayout()
        vbox.addWidget(self.button)
        vbox.addWidget(self.tabs)
        self.setLayout(vbox)

        self.resize(600, 600)

    def closeTab(self, index):
        tab = self.tabs.widget(index)
        tab.deleteLater()
        self.tabs.removeTab(index)

    def buttonClicked(self):
        self.tabs.addTab(Container("smalltext2"), "smalltext2")


app = QApplication([])

app.setStyleSheet("""
    QTabBar::tab {
        background: lightgray;
        color: black;
        border: 0;
        /* min-width: 100px; */
        max-width: 200px;
        /* width: 150px; */
        height: 20px;
        padding: 5px;
    }

    QTabBar::tab:selected {
        background: gray;
        color: white;
    }
""")

widget = CustomWidget()
widget.show()

sys.exit(app.exec_())

其他信息:

操作系统:Windows 10
Python版本:3.6.2
Qt版本:PY9.1


Tags: selftrue宽度initcontainerdefbutton标签
1条回答
网友
1楼 · 发布于 2024-10-01 15:36:52

要设置所有制表符的宽度,必须重写^{}方法,在本例中,我们为所有制表符返回相同的宽度。在

class TabBar(QTabBar):
    def tabSizeHint(self, index):
        size = QTabBar.tabSizeHint(self, index)
        w = int(self.width()/self.count())
        return QSize(w, size.height())

在分配了这个自定义选项卡栏之后,我们使用^{}^{}方法。在

^{pr2}$

输出:

enter image description here

可以在下面的link中找到该示例

相关问题 更多 >

    热门问题