PythonQTableWidget:当点击标题中的排序时如何捕捉信号

2024-09-27 00:13:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在用一些文本填充tableWidget时,我对每一行都使用了self.ui.tableWidget.resizeRowToContents。 在这之后:self.ui.tableWidget.setSortingEnabled(1),排序按预期工作,但行不再根据内容调整大小,实际上它们保留了以前的高度。在

name                              name v                 name v
---------                         ---------              ---------
text2                             text1line1             text1line1
---------  after sort is clicked: ---------   expected:  text1line2
text1line1                                               text1line3
text1line2                        text2                  ---------
text1line3                                               text2
---------                         ---------              ---------

我的想法是在单击标题中的排序时捕捉信号,并再次使用self.ui.tableWidget.resizeRowToContents遍历所有行。 如何捕捉信号?


Tags: name文本selfui内容高度信号排序
2条回答

头对象上有可以连接到的信号:http://doc.qt.nokia.com/4.7-snapshot/qheaderview.html

header = self.ui.tableWidget.horizontalHeader()
header.sortIndicatorChanged.connect(self.fixRowSizes)

也可以尝试在填充时为行设置大小调整模式:

^{pr2}$

这种方法的缺点是,当设置为ResizeToContents时,用户对大小的控制被禁用。只要用户不打算/不需要手动调整大小-这是一个很好的方法。在

不需要为添加的每一行调用resizeRowToContents。在

相反,在表被填充之后,调用^{}槽,它将一次调整所有行的大小。在

然后,可以将同一个插槽连接到^{}信号,这样每当对列排序时,都会调整行的大小:

# ... fill table, then:
self.ui.tableWidget.setSortingEnabled(True)
self.ui.tableWidget.resizeRowsToContents()
self.ui.tableWidget.horizontalHeader().sortIndicatorChanged.connect(
    self.ui.tableWidget.resizeRowsToContents)

相关问题 更多 >

    热门问题