Source code for autokey.scripting.clipboard_qt

"""
QtClipboard Functions
"""

import threading

from PyQt5.QtGui import QClipboard, QImage
from PyQt5.QtWidgets import QApplication

from pathlib import Path


[docs]class QtClipboard: """ Read/write access to the X selection and clipboard - QT version """ def __init__(self, app): """ Initialize the Qt version of the clipboard Usage: Called when QtClipboard is imported. @param app: refers to the application instance """ self.clipBoard = QApplication.clipboard() """ Refers to the Qt clipboard object """ self.app = app """ Refers to the application instance """ self.text = None """ Used to temporarily store the value of the selection or clipboard """ self.sem = None """ Qt semaphore object used for asynchronous method execution """
[docs] def fill_selection(self, contents): """ Copy text into the selection Usage: C{clipboard.fill_selection(contents)} @param contents: string to be placed in the selection """ self.__execAsync(self.__fillSelection, contents)
def __fillSelection(self, string): """ Backend for the C{fill_selection} method Sets the selection text to the C{string} value @param string: Value to change the selection to """ self.clipBoard.setText(string, QClipboard.Selection) self.sem.release()
[docs] def get_selection(self): """ Read text from the selection Usage: C{clipboard.get_selection()} @return: text contents of the selection @rtype: C{str} """ self.__execAsync(self.__getSelection) return str(self.text)
def __getSelection(self): self.text = self.clipBoard.text(QClipboard.Selection) self.sem.release()
[docs] def fill_clipboard(self, contents): """ Copy text onto the clipboard Usage: C{clipboard.fill_clipboard(contents)} @param contents: string to be placed onto the clipboard """ self.__execAsync(self.__fillClipboard, contents)
[docs] def set_clipboard_image(self, path): """ Set clipboard to image Usage: C{clipboard.set_clipboard_image(path)} @param path: Path to image file @raise OSError: If path does not exist """ self.__execAsync(self.__set_clipboard_image, path)
def __set_clipboard_image(self, path): image_path = Path(path).expanduser() if image_path.exists(): copied_image = QImage() copied_image.load(str(image_path)) self.clipBoard.setImage(copied_image) else: raise OSError def __fillClipboard(self, string): self.clipBoard.setText(string, QClipboard.Clipboard) self.sem.release()
[docs] def get_clipboard(self): """ Read text from the clipboard Usage: C{clipboard.get_clipboard()} @return: text contents of the clipboard @rtype: C{str} """ self.__execAsync(self.__getClipboard) return str(self.text)
def __getClipboard(self): """ Backend for the C{get_clipboard} method Stores the value of the clipboard into the C{self.text} variable """ self.text = self.clipBoard.text(QClipboard.Clipboard) self.sem.release() def __execAsync(self, callback, *args): """ Backend to execute methods asynchronously in Qt """ self.sem = threading.Semaphore(0) self.app.exec_in_main(callback, *args) self.sem.acquire()