PySide6实时检测剪贴板(QClipboard)并更新文本

PySide6实时检测剪贴板(QClipboard)并更新文本

注意事项

  1. 代码已经在Windows 10 工作站版与Linux Gnome环境上做过测试
  2. 差异Windows10工作站版运行代码无法读取上一次剪贴板内容(程序运行以后,可以获取)

代码示例

单行文本框 QLineEdit实现
py 复制代码
# coding = utf-8

from PySide6.QtWidgets import QMainWindow,QLineEdit,QApplication
from PySide6.QtGui import QGuiApplication
import sys

class TestCliboard(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi()

    def setupUi(self):
        self.setWindowTitle("实时检测并更新文本")
        self.resize(400,300)

        # 实例化 剪贴板对象
        self.clipboard = QGuiApplication.clipboard()
        
        # 嵌入单行文本
        self.lineText =  QLineEdit()
        self.setCentralWidget(self.lineText)

        # 触发剪贴板数据改变信号时更新文本
        self.clipboard.dataChanged.connect(self.updateText)

    
    def updateText(self):
        clipboardText = self.clipboard.text()
        if clipboardText:
            self.lineText.setText(clipboardText)
        else:
            self.lineText.setText("剪贴板内没有文本!")




if __name__ == "__main__":
    app = QApplication(sys.argv)
    testCliboard = TestCliboard()
    testCliboard.show()
    sys.exit(app.exec())
标签QLabel实现
py 复制代码
# coding = utf-8
# coding = utf-8
from PySide6.QtWidgets import QWidget,QLabel,QVBoxLayout,QApplication
from PySide6.QtGui import QGuiApplication
import sys

class BoardText(QWidget):

    def __init__(self):
        super().__init__()
        self.setupUi()

    def setupUi(self):
        self.setWindowTitle("更新与显示剪贴板内容")
        self.resize(400,100)

        vbox = QVBoxLayout(self)
        self.textLable =  QLabel(self)
        vbox.addWidget(self.textLable)
        
        self.clipboard_ = QGuiApplication.clipboard()
        self.clipboard_.dataChanged.connect(self.updateLabelText)
        
    def updateLabelText(self):
        mimeData_ = self.clipboard_.mimeData()
        hasText = mimeData_.hasText()
        clipboardText = mimeData_.text()

        if hasText:
            self.textLable.setText(clipboardText)
        else:
            self.textLable.setText("剪贴板内没有文本!")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    boardText = BoardText()
    boardText.show()
    sys.exit(app.exec())

效果演示




参考

剪贴板类(QtGui.QClipboard)

剪切板数据改变检测信号(QtGui.QClipboard.dataChanged()

主窗口设置中心控件(QMainWindow.setCentralWidget()

基础窗口布局设置

相关推荐
孟健1 天前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
码路飞1 天前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
曲幽1 天前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers
敏编程1 天前
一天一个Python库:jsonschema - JSON 数据验证利器
python
前端付豪1 天前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain
databook1 天前
ManimCE v0.20.1 发布:LaTeX 渲染修复与动画稳定性提升
python·动效
花酒锄作田2 天前
使用 pkgutil 实现动态插件系统
python
前端付豪2 天前
LangChain链 写一篇完美推文?用SequencialChain链接不同的组件
人工智能·python·langchain
曲幽2 天前
FastAPI实战:打造本地文生图接口,ollama+diffusers让AI绘画更听话
python·fastapi·web·cors·diffusers·lcm·ollama·dreamshaper8·txt2img
老赵全栈实战2 天前
Pydantic配置管理最佳实践(一)
python