PyQt5 QTextEdit粘贴Edge浏览器URL仅获富文本 如何提取原始链接
问题原理
Edge浏览器复制URL时,会在系统剪切板中同时存储两种格式的内容:
- 纯文本格式:原始URL字符串,比如
https://www.youtube.com/watch?v=-2uyzAqefyE&t=225s - HTML富文本格式:带
<a>标签的页面标题,实际展示为带下划线的标题文本
QTextEdit默认优先粘贴富文本内容,因此会出现粘贴后仅显示页面标题、看不到原始URL的情况。
解决方案
下面提供三种适配方案,可根据实际需求选择:
方案1:禁用QTextEdit富文本接收能力(最简便)
如果你的输入框仅需要输入纯文本内容,直接关闭QTextEdit的富文本接收功能即可。
在setupUi方法中找到txtFile初始化的代码段,添加一行配置:
self.txtFile.setAcceptRichText(False)
配置后QTextEdit会自动忽略剪切板中的富文本内容,直接粘贴纯文本格式的原始URL。
方案2:自定义QTextEdit重写粘贴逻辑(需保留富文本能力时使用)
如果后续还需要用到QTextEdit的富文本编辑功能,可以自定义QTextEdit子类,改写粘贴逻辑,优先读取剪切板的纯文本内容:
- 先定义自定义组件类:
class PlainTextPriorityTextEdit(QtWidgets.QTextEdit): def insertFromMimeData(self, mime_data: QtCore.QMimeData) -> None: # 优先插入纯文本,无纯文本时再走默认富文本逻辑 if mime_data.hasText(): self.insertPlainText(mime_data.text()) return super().insertFromMimeData(mime_data)
- 替换原有txtFile的初始化代码:
将原来的
self.txtFile = QtWidgets.QTextEdit(self.centralwidget)
替换为
self.txtFile = PlainTextPriorityTextEdit(self.centralwidget)
方案3:绑定粘贴按钮直接读取剪切板
你现有的Paste按钮可以直接绑定逻辑,读取系统剪切板的纯文本插入到输入框,无需修改QTextEdit本身的逻辑:
- 在
setupUi方法中添加按钮点击绑定:
self.btnPaste.clicked.connect(self.paste_raw_url)
- 新增粘贴方法:
def paste_raw_url(self): clipboard = QtWidgets.QApplication.clipboard() if clipboard.mimeData().hasText(): # 直接插入纯文本URL self.txtFile.insertPlainText(clipboard.mimeData().text())
内容的提问来源于stack exchange,提问作者Karl S
相关产品推荐
相关产品推荐

