几天来,我一直在为与标签相关的事情苦苦挣扎。我正在尝试使我的应用程序中的标签栏延伸到窗口大小的整个宽度。我正在使用 MacOS 和 Ubuntu,虽然两者的最终结果不同,但两者都不起作用。
到目前为止,我已经尝试了一些事情。首先,我创建了 QtWidgets.QTabBar 的子类并将其用作标签栏。我尝试将 expand 设置为 true (self.setExpand(True)),但从我所听到的一切来看,这不会让您覆盖操作系统默认值。
下一个想法是重写tabSizeHint,看起来这是正确的方法,但我一直无法弄清楚实现。这是我现在正在做的事情,对我来说,它似乎应该工作:
import sys
from PySide2 import QtCore, QtWidgets, QtGui
class TabBar(QtWidgets.QTabBar):
def __init__(self, parent=None):
super(TabBar, self).__init__(parent)
self.setExpanding(True)
def tabSizeHint(self, index):
size = QtWidgets.QTabBar.tabSizeHint(self, index)
width = self.parent().size().width()
size.setWidth( width / self.count() )
return size
class TabWindow(QtWidgets.QTabWidget):
def __init__(self, parent=None):
super(TabWindow, self).__init__(parent)
self.bar = TabBar()
self.setTabBar(self.bar)
self.initTabs()
def initTabs(self):
self.test1 = self.addTab(QtWidgets.QWidget(), "Test 1")
self.test2 = self.addTab(QtWidgets.QWidget(),"Test 2")
self.test3 = self.addTab(QtWidgets.QWidget(),"Test 3")
self.test4 = self.addTab(QtWidgets.QWidget(),"Test 4")
class MainApplication(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainApplication, self).__init__(parent)
self.mainWidget = TabWindow()
self.setCentralWidget(self.mainWidget)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main_app = MainApplication()
main_app.show()
sys.exit(app.exec_())
这在我最初启动程序时有效,但如果我扩展窗口,则不会扩展选项卡的大小。似乎 tabSizeHint 没有被调用。我采取的另一种(失败的)方法如下:
class TabBar(QtWidgets.QTabBar):
def __init__(self, parent=None):
super(TabBar, self).__init__(parent)
class TabWindow(QtWidgets.QTabWidget):
def __init__(self, parent=None):
super(TabWindow, self).__init__(parent)
self.bar = TabBar()
self.setTabBar(self.bar)
self.initTabs()
layout = QtWidgets.QHBoxLayout()
layout.addWidget(self.bar)
self.setLayout(layout)
def initTabs(self):
self.test1 = self.addTab(QtWidgets.QWidget(), "Test 1")
self.test2 = self.addTab(QtWidgets.QWidget(),"Test 2")
self.test3 = self.addTab(QtWidgets.QWidget(),"Test 3")
self.test4 = self.addTab(QtWidgets.QWidget(),"Test 4")
class MainApplication(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainApplication, self).__init__(parent)
self.mainWidget = TabWindow()
self.setCentralWidget(self.mainWidget)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main_app = MainApplication()
main_app.show()
sys.exit(app.exec_())
对于这个,每当我单击选项卡时,它会简要显示 4 个选项卡占据整个宽度(如我所愿),但在窗口中间而不是顶部。不久之后,它将消失并恢复到窗口顶部的默认大小的选项卡,就好像它被其他东西覆盖了一样。