PySide6实时检测剪贴板(QClipboard)并更新文本
注意事项
- 代码已经在
Windows 10
工作站版与Linux Gnome
环境上做过测试 - 差异
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.dataChanged()