pyqt QTreeWidget setColumnWidth不起作用[关闭]
Posted
技术标签:
【中文标题】pyqt QTreeWidget setColumnWidth不起作用[关闭]【英文标题】:pyqt QTreeWidget setColumnWidth not working [closed] 【发布时间】:2012-04-20 17:14:01 【问题描述】:所以我看到了一些关于此的类似问题,但也许我不够聪明,无法将其应用于我的情况。在以下示例中,似乎受 setColumnWidth 影响的唯一列是第 0 列。
''' A custom widget to set up the tree column widths '''
from PyQt4 import QtGui
class PCLTreeWidget(QtGui.QTreeWidget):
def __init__(self,parent):
QtGui.QTreeWidget.__init__(self,parent)
## set the sizes
self.setColumnWidth(0,250)
print self.columnWidth(0)
self.setColumnWidth(1,250)
print self.columnWidth(1)
self.setColumnWidth(2,100)
print self.columnWidth(2)
self.setColumnWidth(3,1)
print self.columnWidth(3)
self.setColumnWidth(4,1)
print self.columnWidth(4)
self.setColumnWidth(5,3)
print self.columnWidth(5)
self.setColumnWidth(6,1)
print self.columnWidth(6)
self.setColumnWidth(7,1)
print self.columnWidth(7)
self.setColumnWidth(8,1)
print self.columnWidth(8)
self.setColumnWidth(9,1)
print self.columnWidth(9)
输出: 250 0 0 0 0 0 0 0 0 0
我错过了什么?
更新:看起来我需要在 resizeEvent 函数中执行此操作,因为列已在 init 函数中设置:
''' A custom widget to set up the tree column widths '''
2
3 from PyQt4 import QtGui
4
5 class PCLTreeWidget(QtGui.QTreeWidget):
6 def __init__(self,parent):
7 QtGui.QTreeWidget.__init__(self,parent)
8
9
10 def resizeEvent(self, resizeEvent):
11 ## handle resize
12 self.setColumnWidth(0,250)
13 self.setColumnWidth(1,250)
14 self.setColumnWidth(2,30)
15 self.setColumnWidth(3,60)
16 self.setColumnWidth(4,50)
17 self.setColumnWidth(5,250)
18 self.setColumnWidth(6,35)
19 self.setColumnWidth(7,45)
20 self.setColumnWidth(8,60)
21 self.setColumnWidth(9,35)
22 self.header().setResizeMode(0,QtGui.QHeaderView.Stretch | QtGui.QHeaderView.Interactive)
23 self.header().setResizeMode(1,QtGui.QHeaderView.Stretch)
24 self.header().setResizeMode(2,QtGui.QHeaderView.Fixed)
25 self.header().setResizeMode(3,QtGui.QHeaderView.Fixed)
26 self.header().setResizeMode(4,QtGui.QHeaderView.Fixed)
27 self.header().setResizeMode(5,QtGui.QHeaderView.Stretch)
28 self.header().setResizeMode(6,QtGui.QHeaderView.Fixed)
29 self.header().setResizeMode(7,QtGui.QHeaderView.Fixed)
30 self.header().setResizeMode(8,QtGui.QHeaderView.Fixed)
31 self.header().setResizeMode(9,QtGui.QHeaderView.Fixed)
【问题讨论】:
没关系,我认为这是因为我在创建列之前调整大小,所以我现在在 resizeEvent 函数中这样做,这似乎有效 您真的希望每次 resizeEvent 都发生这种情况吗?当您随着时间的推移积极调整大小时,这将触发。也许您希望在showEvent
期间运行一次?
【参考方案1】:
在您更新的示例中,每次触发 resizeEvent 时都会执行这一系列列调整,这可能会随着小部件随着时间的推移而调整大小而非常频繁。这真的是你想要的吗?这也意味着如果用户调整列大小,然后调整树的父级大小,所有内容都会再次弹回这个大小。
您可能希望将列选项移动到showEvent
,以便它们仅在显示小部件时执行一次。或者,不是设置显式大小,也许您可以使用标题的最小大小设置。 http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qheaderview.html#setMinimumSectionSize。这实际上可能会强制执行您的最小尺寸,但仍允许它们随着调整大小而扩展。
【讨论】:
以上是关于pyqt QTreeWidget setColumnWidth不起作用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何对 PyQt4 QTreeWidget 中的点击做出反应
Python(PyQT):如何在没有最后一个孩子的 QTreeWidget 中插入 XML 文件