使每个选项卡的大小相同且可展开[关闭]

Posted

技术标签:

【中文标题】使每个选项卡的大小相同且可展开[关闭]【英文标题】:Make every tab the same size and expandable [closed] 【发布时间】:2019-12-30 21:30:38 【问题描述】:

我在看 2 年前提出的这个问题:Make every tab the same width and also expandable

解决方案正是我正在寻找的,只是它对我不起作用。我认为我的代码中缺少一些元素。

我使用 QtDesigner 来设计窗口。我导入创建的.py。此文件包含我想要调整大小并使用所有可用宽度的QTabWidget。它被插入到 HBoxLayout 中,旁边有一个 Frame。

然后我在controller_file.py中进行如下操作:

我覆盖了TabBar 类:

class tabBar(QTabBar):

       def __init__(self, parent=None):
           QTabBar.__init__(self, parent)

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

然后,我在controller_file.py的__init__中.setTabBar(tabBar())QTabWidget

class flex_ctrl(QObject):

    def __init__(self, model, view, parent=None):
        super().__init__(parent)
        self._model = model
        self._view = view
        self.is_save = True
        self.file_name = ''

        self._view.graph_tot_tab.setTabBar(tabBar())

        self._get_file_menu()
        self._connect_signals()
        self.view.installEventFilter(self)

问题是当我这样做时,栏消失了。我无法在标签之间切换:

变成这样:

你能帮帮我吗?

P.S:抱歉,如果不给出整个代码,我无法给出一个完全可重现的问题示例。我没有找到如何重现这个“错误”

【问题讨论】:

见***.com/questions/46007131/… 【参考方案1】:

它不起作用,因为 QTabBar 需要一个父级来正确构造自己(并确保 QTabWidget 可以正确初始化它)。

在初始化标签栏时只需将标签小部件添加为父小部件,但请记住,这必须添加任何标签之前完成:

setTabBar(QTabBar):

用标签栏 tb 替换对话框的 QTabBar 标题。 请注意 这必须在添加任何选项卡之前调用,或者行为 未定义。

只要不存在任何选项卡,以下内容就足够了:

self._view.graph_tot_tab.setTabBar(tabBar(self._view.graph_tot_tab))

如果您已经在 Designer 中添加了选项卡,这显然是个问题。

虽然可能的解决方案可能是使用 for 循环删除所有现有选项卡并再次添加它们(在删除过程之后),但我从未测试过它,我不太确定关于结果。最好的解决方案是继承 QTabWidget 并将 Designer 中的选项卡小部件提升到您的自定义类。

【讨论】:

以上是关于使每个选项卡的大小相同且可展开[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使 Emacs 选项卡的行为与 vim 完全相同

使 VS Code 编辑器 Ctrl+Tab 循环选项卡的顺序与它们在屏幕上显示的顺序相同吗?

每个浏览器选项卡的 MVC 持久模型

根据选项卡的数量自动调整选项卡标题的大小 (AvaloniaUI)

使用selenium VBA单击每个View Contact选项卡的VBA代码

删除所有选项卡的选项卡关闭时的 sessionStorage 属性