PyQt5 使用自定义ToolTip解决QTableWidget数据显示不全问题

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

目录

问题描述

自定义QTableWidget

代码解释

实例演示代码

实现效果

总结

参考资料

补充更新



问题描述

最近在使用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:
  
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daimashiren

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值