Чтение текстовых данных из буфера обмена в Python PySide 6
В примере ниже я покажу Вам, как можно сделать графическое приложение на PySide 6, которое читает данные из буфера обмена и выводит их в текстовую область. Программа читает только текстовые данные из буфера обмена. Но вполне возможно, что данные в буфере будут иметь и другой формат — в этом случае программа просто выведет заданный текст.
Вот непосредственно код:
#!/usr/bin/python
import sys
from PySide6 import QtCore
from PySide6.QtCore import Qt
from PySide6.QtGui import QCursor
from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QTextEdit
class MainWidget(QWidget):
def __init__(self):
super(MainWidget, self).__init__()
self.initUI()
def initUI(self):
self.sourceTextEdit = QTextEdit()
self.editBox = QHBoxLayout()
self.editBox.addWidget(self.sourceTextEdit)
self.convertButton = QPushButton("Буфер обмена")
self.convertButton.setStyleSheet("padding: 3px 5px")
self.convertButton.setCursor(QCursor(Qt.PointingHandCursor))
self.convertButton.clicked.connect(self.onConvertButtonClicked)
self.cancelButton = QPushButton("Очистить")
self.cancelButton.setCursor(QCursor(Qt.PointingHandCursor))
self.cancelButton.clicked.connect(self.onClearButtonClicked)
self.hbox = QHBoxLayout()
self.hbox.addStretch(1)
self.hbox.addWidget(self.convertButton)
self.hbox.addWidget(self.cancelButton)
self.vbox = QVBoxLayout()
self.vbox.addLayout(self.editBox)
self.vbox.addLayout(self.hbox)
self.setLayout(self.vbox)
self.setGeometry(300, 300, 800, 550)
self.setWindowTitle('Чтение данных из буфера обмена')
self.show()
# центрирует окно программы по центру рабочего стола
def center(self):
qrect = self.frameGeometry()
qpoint = self.screen().availableGeometry().center()
qrect.moveCenter(qpoint)
self.move(qrect.topLeft())
@QtCore.Slot()
def onConvertButtonClicked(self):
convertedText = self.pasted();
self.sourceTextEdit.setText(convertedText)
@QtCore.Slot()
def onClearButtonClicked(self):
self.sourceTextEdit.setText("")
def pasted(self):
# получаем ссылку на буфер обмена
clipboard = QApplication.clipboard()
# читаем данные из буфера
mimeData = clipboard.mimeData()
# если буфер обмена содержит текст
if mimeData.hasText():
# возвращаем его
return mimeData.text()
else:
return "В буфере обмена нет текстовых данных!"
def main():
app = QApplication(sys.argv)
mainWidget = MainWidget()
mainWidget.center()
sys.exit(app.exec())
if __name__ == '__main__':
main()