如何在PyQt6中实现类似Excel单元格的QLineEdit文本截断与聚焦展开
固定尺寸QLineEdit实现Excel式焦点显示效果
可以实现,无需改用QTextEdit。以下是具体实现方案:
实现思路
- 保持控件固定尺寸,避免影响布局
- 重写焦点事件:失去焦点时光标回到文本开头;获得焦点时自动滚动到文本末尾,同时可选显示完整文本的工具提示
- 启用水平滚动支持,让用户可查看完整内容
完整代码
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)
功能说明
- 失去焦点时:文本截断显示,光标自动回到文本开头,与原有需求一致
- 获得焦点时:
- 光标自动跳至文本末尾,QLineEdit会滚动到该位置,直接显示原本截断的内容
- 若文本实际宽度超出控件宽度,会弹出工具提示展示完整文本
- 可通过水平滚动条或方向键查看全部内容,控件尺寸始终保持固定,不会影响周边控件位置
内容的提问来源于stack exchange,提问作者DigitalTemplar
相关产品推荐
相关产品推荐

