PyQt5如何在QTableWidget单元格插入QTextEdit并解决组件重叠问题
解决方案
问题根源
你只设置了单元格内QTextEdit控件的最小高度,没有同步调整QTableWidget对应行的高度,单元格高度不足以容纳加高的QTextEdit,就会出现控件溢出、和下一行组件重叠的问题。
正确调整步骤
- 计算QTextEdit的适配高度时,在文档原始高度基础上增加少量偏移量,抵消控件自带的内边距,避免文字被边框截断
- 给QTextEdit设置最小高度的同时,同步调用
setRowHeight()方法设置对应行的高度,和QTextEdit高度匹配 - 如果需要支持用户编辑QTextEdit内容后自动适配高度,可以绑定QTextEdit的
textChanged信号,内容变更时重新计算高度更新控件和行高
修改后的核心代码
你可以把原有循环里的高度调整部分替换为以下代码:
docHeight = self.tableWidget_3.cellWidget(i, 0).document().size().height() # 加8px偏移量适配控件内边距,可根据实际显示效果调整数值 adjust_height = int(docHeight) + 8 self.tableWidget_3.cellWidget(i, 0).setMinimumHeight(adjust_height) # 同步设置对应行的高度 self.tableWidget_3.setRowHeight(i, adjust_height)
可选优化
如果需要用户编辑QTextEdit内容后自动适配行高,可以在创建QTextEdit时添加如下信号绑定:
def update_row_height(row, edit): h = int(edit.document().size().height()) + 8 edit.setMinimumHeight(h) self.tableWidget_3.setRowHeight(row, h) combo.textChanged.connect(lambda row=i, edit=combo: update_row_height(row, edit))
修改后就不会再出现组件重叠的问题,文本也不会被单元格边框截断。
内容的提问来源于stack exchange,提问作者Eliazar
相关产品推荐
相关产品推荐

