0

我在看 2 年前提出的这个问题:使每个选项卡的宽度相同并且可以扩展

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

我使用 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())

然后,我.setTabBar(tabBar())QTabWidget__init__ 的controller_file.py

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)

问题是当我这样做时,酒吧消失了。我无法在选项卡之间切换:

原始标签

变成这样:

修改选项卡

你可以帮帮我吗?

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

4

1 回答 1

1

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

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

setTabBar(QTabBar):

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

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

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

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

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

于 2019-12-30T22:06:57.210 回答