如何设置最后一列标题为固定大小并保持不变

1 投票
1 回答
2396 浏览
提问于 2025-04-18 16:17

下面的代码创建了一个 QTreeWidget,它有7(实际上是8)列。

我想把最后一列,也就是第7列,作为一个间隔使用。这样当对话框调整大小时,第6列和树形控件的右边缘之间总会保持一定的距离。默认情况下,最后一列及其标题会无限制地调整大小。相反,我希望最后一列及其标题保持固定大小,而第6列可以调整大小。最后一列的标题直接到达QTreeWidget的右边缘看起来很不好。如果保持最后一列的标题/列为固定大小不可行,我想知道有没有其他方法可以实现同样的效果:让最后一列及其标题与树形列表控件的右边缘保持一定的间隔。

这是默认的样子:

这里输入图片描述

这是我想要的Photoshop版本:

这里输入图片描述

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Tree(QtGui.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__() 
        names=['Zero','One','Two','Three','Four','Five','Six','Seven']
        self.setColumnCount(len(names))
        self.setHeaderLabels(names)
        item=QtGui.QTreeWidgetItem(names)
        self.addTopLevelItem(item)
        self.setColumnWidth(7, 32)
        self.resize(720,120)
        self.show()
tree=Tree()
sys.exit(app.exec_())

1 个回答

2

好的,我有解决办法。首先,禁用“拉伸最后一部分”,然后选择“调整列宽”。

myQTreeWidget = QtGui.QTreeWidget()
.
.
.
myQHeaderView = myQTreeWidget.header()
myQHeaderView.setStretchLastSection(False)
myQHeaderView.setResizeMode(6, QtGui.QHeaderView.Stretch)

QHeaderView.setResizeMode 方法参考 : http://pyqt.sourceforge.net/Docs/PyQt4/qheaderview.html#setResizeMode

QHeaderView.setResizeMode 枚举参考 : http://pyqt.sourceforge.net/Docs/PyQt4/qheaderview.html#ResizeMode-enum


实现你的代码;

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Tree(QtGui.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__() 
        names=['Zero','One','Two','Three','Four','Five','Six','Seven']
        self.setColumnCount(len(names))
        self.setHeaderLabels(names)
        item=QtGui.QTreeWidgetItem(names)
        self.addTopLevelItem(item)
        self.header().setStretchLastSection(False)
        self.header().setResizeMode(6, QtGui.QHeaderView.Stretch)
        self.resize(720,120)
        self.show()
tree=Tree()
sys.exit(app.exec_())

祝好,

撰写回答