1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
#!/usr/bin/env python3
"""
SPDX-FileCopyrightText: 2025 David Edmundson <davidedmundson@kde.org>
SPDX-FileCopyrightText: 2026 Fushan Wen <qydwhotmail@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
"""
import sys
from KGuiAddons import KSystemClipboard
from PySide6.QtCore import QMimeData, Slot
from PySide6.QtGui import QClipboard
from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QPushButton, QSizePolicy, QTextEdit, QVBoxLayout, QWidget)
class KSystemClipboardExample(QWidget):
def __init__(self) -> None:
super().__init__()
self.setWindowTitle("KSystemClipboard")
self.__setup_ui()
def __setup_ui(self) -> None:
self.system_clipboard_view = QTextEdit()
self.system_text_edit = QTextEdit()
self.__setup_system_clipboard()
self.resize(600, 500)
def __setup_system_clipboard(self) -> None:
clipboard = KSystemClipboard.instance()
layout = QVBoxLayout(self)
title_label = QLabel("System Clipboard (KSystemClipboard)")
layout.addWidget(title_label)
self.system_clipboard_view.setReadOnly(True)
self.system_clipboard_view.setMinimumHeight(200)
self.system_clipboard_view.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
clipboard.changed.connect(self.on_system_clipboard_changed)
self.system_clipboard_view.setText(clipboard.text(QClipboard.Mode.Clipboard))
layout.addWidget(self.system_clipboard_view)
self.system_text_edit.setPlaceholderText("Enter clipboard content hereā¦")
self.system_text_edit.setMinimumHeight(120)
self.system_text_edit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
layout.addWidget(self.system_text_edit)
btn_row = QHBoxLayout()
btn_row.addStretch()
submit_btn = QPushButton("Submit")
submit_btn.clicked.connect(self.submit_system_clipboard)
btn_row.addWidget(submit_btn)
layout.addLayout(btn_row)
@Slot(QClipboard.Mode)
def on_system_clipboard_changed(self, mode) -> None:
if mode != QClipboard.Mode.Clipboard:
return
clipboard = KSystemClipboard.instance()
self.system_clipboard_view.setText(clipboard.text(mode))
@Slot()
def submit_system_clipboard(self) -> None:
clipboard = KSystemClipboard.instance()
mime_data = QMimeData()
mime_data.setText(self.system_text_edit.toPlainText())
clipboard.setMimeData(mime_data, QClipboard.Mode.Clipboard)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = KSystemClipboardExample()
window.show()
sys.exit(app.exec())
|