pyqt5中QTablewidget列宽自适应内容
时间: 2024-09-29 20:11:12 浏览: 66
PyQt5高级界面控件之QTableWidget的具体使用方法
在PyQt5的QTableWidget中,实现列宽度自动适应内容通常有两种方法:
1. **信号槽连接** (Slot Connections): 当单元格的内容发生变化时,你可以监听`currentCellChanged`信号,然后更新对应的列宽。以下是示例代码:
```python
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import pyqtSignal, Qt
class CustomTableWidgetItem(QTableWidgetItem):
cellContentChanged = pyqtSignal()
def textChanged(self, *args, **kwargs):
super().textChanged(*args, **kwargs)
self.cellContentChanged.emit()
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.table = QTableWidget()
self.table.cellContentChanged.connect(self.resize_column_to_content)
... # 初始化表格内容
def resize_column_to_content(self, row, column):
col_width = self.table.columnWidth(column) + self.table.verticalHeader().width()
self.table.setColumnWidth(column, col_width)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
```
这里,我们在`CustomTableWidgetItem`类中添加了一个文本更改信号,当单元格内容变化时会触发。`resize_column_to_content`方法会在接收到信号时,计算当前列加上表头宽度后的总宽度,并调整列宽。
2. **布局策略** (Layout Strategies): 使用`horizontalHeader().setSectionResizeMode()`,可以设定列的大小策略为`QHeaderView.ResizeToContents`,它会自动调整列宽以适应内容:
```python
self.table.setHorizontalHeaderSectionResizeMode(QHeaderView.ResizeToContents)
```
这会自动调整所有列的宽度,使其适应各自的单元格内容。
阅读全文