几天来,我一直在为一些与标签有关的事情而挣扎。我试图使我的应用程序中的选项卡栏扩展到整个窗口大小。我同时使用MacOS和Ubuntu,虽然两者的最终结果都不一样,但都不起作用。你知道吗
到目前为止,我已经尝试了一些事情。首先,我创建了QtWidgets.qtabar文件并将其用作选项卡栏。我试着把它变成真的(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个选项卡(如我所希望的那样),但是在窗口的中间而不是顶部。不久之后,它将消失并恢复到窗口顶部默认大小的选项卡,就好像被其他内容覆盖一样。你知道吗
QTabWidget
计算何时需要更改QTabBar
的大小,因此解决方案是强制具有与QTabWidget
相同的新宽度。你知道吗在前面的实现中,如果宽度很小,按钮就会出现(在Linux中,我没有在Mac OS中测试),避免这种情况的一种方法是实现
tabSizeHint()
方法:相关问题 更多 >
编程相关推荐