You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyQt6中实现类似Excel单元格的QLineEdit文本截断与聚焦展开

固定尺寸QLineEdit实现Excel式焦点显示效果

可以实现,无需改用QTextEdit。以下是具体实现方案:

实现思路

  1. 保持控件固定尺寸,避免影响布局
  2. 重写焦点事件:失去焦点时光标回到文本开头;获得焦点时自动滚动到文本末尾,同时可选显示完整文本的工具提示
  3. 启用水平滚动支持,让用户可查看完整内容

完整代码

from PyQt6.QtWidgets import QLineEdit
from PyQt6.QtCore import Qt

class CustomLineEdit(QLineEdit):
    def focusOutEvent(self, event):
        super().focusOutEvent(event)
        self.setCursorPosition(0)  # 失去焦点时光标回到文本开头
        self.setToolTip("")  # 隐藏工具提示

    def focusInEvent(self, event):
        super().focusInEvent(event)
        # 光标移至文本末尾,自动滚动显示截断内容
        self.setCursorPosition(len(self.text()))
        # 判断文本是否超出控件宽度,是则显示完整文本提示
        text_width = self.fontMetrics().boundingRect(self.text()).width()
        if text_width > self.width():
            self.setToolTip(self.text())
        else:
            self.setToolTip("")

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 按需启用水平滚动条,不影响控件尺寸
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
        # 设置固定尺寸(可根据需求调整数值)
        self.setFixedSize(150, 30)

功能说明

  • 失去焦点时:文本截断显示,光标自动回到文本开头,与原有需求一致
  • 获得焦点时:
    1. 光标自动跳至文本末尾,QLineEdit会滚动到该位置,直接显示原本截断的内容
    2. 若文本实际宽度超出控件宽度,会弹出工具提示展示完整文本
    3. 可通过水平滚动条或方向键查看全部内容,控件尺寸始终保持固定,不会影响周边控件位置

内容的提问来源于stack exchange,提问作者DigitalTemplar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:51:11