我有一个应用程序,我希望QTabBar与QTabWidget区域分开放置在一个单独的VBoxLayout中。它使用下面的代码的作品,但我有造型问题。在我将QTabBar从QTabWidget中分离出来之前,我没有遇到任何问题,但现在我无法弄清楚如何以我想要的方式来设计它。在QLayout中从QTabBar中删除填充/余量
#!/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的顶部齐平。有趣的是,每当窗口调整大小时,选项卡似乎都会快速地在顶部切换。
的东西,我已经看了:
- Qt Use QTabBar in a Different QLayout
- http://doc.qt.io/qt-5/stylesheet-examples.html
- https://wiki.qt.io/Adjust_Spacing_and_Margins_between_Widgets_in_Layout
更新:我可以通过设置QTabBar miminumSizeHint模仿我的期望行为()到(15,15)和设置QTabBar::tab { margin-right: -15px; }
,但这不让我实际点击标签。由于某种原因,标签下方(即右侧)存在空间,我不知道如何摆脱它。
第二次更新:我已经确定了我认为的主要问题。我的代码使用
self.tabWidget.setTabPosition(QtGui.QTabWidget.West)
移动的标签左侧,但QTabWidget假定有一个的TabBar在那里,因此额外的空间。如果我做
self.tabWidget.setTabPosition(QtGui.QTabWidget.East)
空白显示在右边。这么一件事我能做的就是直接设置tabShape上的TabBar:
self.tabBar.setShape(QtGui.QTabBar.RoundedWest)
然而,这留下了空白,在其中QTabWidget预计QTabBar是顶部。我可以在setShape
之前使用setTabPosition
将该空间向右移动,但这并不能解决实际摆脱它的问题。
这是在没有得到任何其他答案后我接受的答案,但我不能选择它作为我的答案另外16个小时,它说。我也可以删除这个问题,因为这只是我自言自语,但我认为其他人也可以从中得到一些东西。 – erp
您可以编辑这个来详细说明解决方法。 – Flexo
这可能是最灵活的方法,当然这是问题的有效答案。它确实需要更多的解释,尽管(或者只是一些简单的示例代码)。 – ekhumoro