gpt4 book ai didi

python - 从 QLayout 中的 QTabBar 中删除填充/边距

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:59 25 4
gpt4 key购买 nike

我有一个应用程序,我希望 QTabBar 位于与 QTabWidget 区域不同的 VBoxLayout 中。它可以使用下面的代码工作,但我遇到了样式问题。在我将 QTabBar 与 QTabWidget 分开之前,我没有遇到任何问题,但现在我不知道如何按照我想要的方式设置它的样式。

#!/usr/bin/env python2

from PyQt4 import QtGui, QtCore
from peaks import *

class mainWindow(QtGui.QWidget):

def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowFlags(QtCore.Qt.Dialog)

self.tabWidget = QtGui.QTabWidget()
self.tabBar = QtGui.QTabBar()
self.tabBar.setContentsMargins(0,0,0,0)
self.tabWidget.setTabBar(self.tabBar)
self.tabWidget.setTabPosition(QtGui.QTabWidget.West)
self.tabWidget.setIconSize(QtCore.QSize(35, 35))

self.tab1 = QtGui.QWidget()
self.tab2 = QtGui.QWidget()

tabLayoutBox = QtGui.QVBoxLayout()
tabLayoutBox.setContentsMargins(0,0,0,0)
tabLayoutBox.addWidget(self.tabBar)

mainHBox = QtGui.QHBoxLayout()
mainHBox.setContentsMargins(0,0,0,0)
mainHBox.setSpacing(0)
mainHBox.setMargin(0)
mainHBox.addLayout(tabLayoutBox)
mainHBox.addWidget(self.tabWidget)

mainVBox = QtGui.QVBoxLayout()
mainVBox.addWidget(QtGui.QWidget())
mainVBox.addLayout(mainHBox)
self.setLayout(mainVBox)


self.tabWidget.addTab(self.tab1, 'tab1')
self.tabWidget.addTab(self.tab2, 'tab2')

if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
app.setStyleSheet(
"QTabBar { alignment: right; }"
"QTabBar::tear { width:0; border: none; }"
"QTabBar::scroller { width:0; border: none; }"
)


main = mainWindow()
main.show()
sys.exit(app.exec_())

但是有一些我想要但不知道该怎么做的事情:

  • 我想消除 QTabWidget 和 QTabBar 之间的差距。我一直在尝试各种方法,例如 setContentsMargins(0,0,0,0) 和设置样式表,但我尝试过的都没有效果。

  • 我希望 QTabBar 与 QTabWidget 的顶部齐平。有趣的是,无论何时调整窗口大小时,选项卡似乎都会在顶部之间快速来回切换。

我看过的东西:

更新:我可以通过将 QTabBar miminumSizeHint() 设置为 (15,15) 并设置 QTabBar::tab { margin-right: -15px; 来模拟我想要的行为} 但这并不能让我实际点击标签。出于某种原因,选项卡下方(即右侧)有一个空间,我不知道如何摆脱它。

第二次更新:我已经确定了我认为的主要问题。我的代码使用

        self.tabWidget.setTabPosition(QtGui.QTabWidget.West)

将选项卡移动到左侧,但 QTabWidget 假定那里有一个 tabBar,因此会有额外的空间。如果我这样做

        self.tabWidget.setTabPosition(QtGui.QTabWidget.East)

那个空白出现在右边。所以我能做的一件事是直接在 tabBar 上设置 tabShape:

self.tabBar.setShape(QtGui.QTabBar.RoundedWest)

然而,这会在 QTabWidget 期望 QTabBar 所在的顶部留下一个空白区域。我可以在 setShape 之前使用 setTabPosition 将该空间向右移动,但这并不能解决实际摆脱它的问题。

最佳答案

我无法弄清楚如何隐藏空白区域,所以我只是使用了一个非常容易实现的 QTabBar + QStackedWidget。为了使一个像 QTabWidget 一样,您需要做的就是将 QTabBar.currentChanged 连接到 QStackedWidget.setCurrentIndex:

    self.stacked = QtGui.QStackedWidget()
self.tabBar = QtGui.QTabBar()
self.tabBar.currentChanged.connect(self.stacked.setCurrentIndex)
self.tabBar.setShape(QtGui.QTabBar.RoundedWest)
self.tabBar.updateGeometry()
self.tabBar.setContentsMargins(0,0,0,0)

我还编写了一个模拟 QTabWidget.addTab 的便捷函数:

def addTab(self, widget, name):
self.stacked.addWidget(widget)
self.tabBar.addTab(name)

关于python - 从 QLayout 中的 QTabBar 中删除填充/边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com