目录
问题描述
最近在使用PyQT5做一个项目,用到最多的控件是QTableWidget,使用很方便,但是也存在很多问题,比如下面这种:

数据太长,使用QTableWidget默认的列宽分配会导致显示不全,数据以"XXX..."的形式呈现,很不利于用户阅读。一个可能的解决办法是采用用户可以手动调整的方式来显示数据。效果如下图:

使用的代码是这一句:
TableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive) # 列宽手动调整
可以看到,貌似问题解决了,可是界面已经完全变形了,实在让人觉得不愉悦,那么有什么更好的解决方案吗?

只见柯南君思考片刻后,抬了抬那光芒四射的眼镜,说道:

hahaha看到这,要是再不把代码贴上来可能会被打了,那就话不多说,show me the code!
自定义QTableWidget
# -*- coding: utf-8 -*-
"""
@author:daimashiren
@time:2020-04-15
"""
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import traceback
from functools import partial
# 自定义的QTableWidget,使用ToolTip提示用户当前单元格内的详细内容
class MyTableWidget(QTableWidget):
update_table_tooltip_signal = pyqtSignal(object)
def __init__(self, row, col):
super(MyTableWidget, self).__init__()
self.setRowCount(row)
self.setColumnCount(col)
self.ini_table()
def ini_table(self):
"""---------初始化表格的常用选项(按需修改)------------"""
QTableWidget.resizeColumnsToContents(self)
QTableWidget.resizeRowsToContents(self)
self.setSelectionMode(QAbstractItemView.NoSelection)
self.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch) # 列宽自动分配
self.verticalHeader().setSectionResizeMode(QHeaderView.Stretch) # 行高自动分配
# self.verticalHeader().stretchLastSection() #自动拓展最后一行适应表格高度
self.horizontalHeader().setVisible(False)
self.verticalHeader().setVisible(False)
self.setEditTriggers(QAbstractItemView.NoEditTriggers)
"""------------关键代码--------------"""
self.vertical_scrollbar = QScrollBar()
self.horizon_scrollbar = QScrollBar()
self.vertical_scrollbar.valueChanged.connect(partial(self.scollbar_change_slot, "vertical"))
self.horizon_scrollbar.valueChanged.connect(partial(self.scollbar_change_slot, "horizon"))
self.setVerticalScrollBar(self.vertical_scrollbar)
self.setHorizontalScrollBar(self.horizon_scrollbar)
self.init_row = 0
self.init_col = 0
self.tool_tip = ""
self.update_table_tooltip_signal.connect(self.update_table_tooltip_slot)
self.title_row_height = 0
# 设置表格列标题
def set_horizon_title(self, title_list):
self.horizontalHeader().setDefaultAlignment(Qt.AlignLeft)
self.horizontalHeader().setVisible(True)
col = 0
for item in title_list:

本文介绍如何在PyQT5中自定义QTableWidget,通过安装事件过滤器和利用QToolTip显示完整单元格内容,解决长数据无法完全显示的问题。
最低0.47元/天 解锁文章

1591





