Объект Clipboard содержит общие данные между двумя процессами или двумя виджетами одного и того же приложения. Gtk.Clipboard — это интерфейс высокого уровня для класса gtk.SelectionData.
Ниже приведен прототип конструктора gtk.Clipboard —
gtk.Clipboard(display,selction)
Здесь параметр отображения соответствует объекту gtk.gdk.Display, для которого должен быть создан или получен буфер обмена. По умолчанию это стандартное устройство вывода. Параметр выбора по умолчанию — CLIPBOARD, объект, представляющий интернированную строку.
PyGTK предоставляет удобную функцию для создания объекта буфера обмена со значениями по умолчанию.
gtk.clipboard.get()
Класс gtk.Clipboard имеет следующие методы —
-
Clipboard.store () — хранит где-то текущие данные буфера обмена, чтобы они оставались без изменений даже после выхода из приложения.
-
Clipboard.clear () — удаляет содержимое буфера обмена.
-
Clipboard.set_text (text) — устанавливает содержимое буфера обмена в строку.
-
Clipboard.request_text () — запрашивает содержимое буфера обмена как текст. Когда текст будет получен позже, будет вызван обратный вызов с данными, указанными в user_data . Подпись обратного вызова :
-
def callback (буфер обмена, текст, данные) — текст будет содержать текст, извлеченный из буфера обмена.
-
Clipboard.store () — хранит где-то текущие данные буфера обмена, чтобы они оставались без изменений даже после выхода из приложения.
Clipboard.clear () — удаляет содержимое буфера обмена.
Clipboard.set_text (text) — устанавливает содержимое буфера обмена в строку.
Clipboard.request_text () — запрашивает содержимое буфера обмена как текст. Когда текст будет получен позже, будет вызван обратный вызов с данными, указанными в user_data . Подпись обратного вызова :
def callback (буфер обмена, текст, данные) — текст будет содержать текст, извлеченный из буфера обмена.
В качестве демонстрации буфера обмена следующий код использует два TextViews и две кнопки на верхнем уровне gtk.Window. Кнопка «Установить» вызывает функцию on_set (), которая помещает текст из первого textView в буфер обмена.
buf = self.tv1.get_buffer() text = buf.get_text(buf.get_start_iter(), buf.get_end_iter()) self.clipboard = gtk.clipboard_get() self.clipboard.set_text(text) self.clipboard.store()
При нажатии второй кнопки («извлечено») данные из буфера обмена извлекаются методом request_text () —
self.clipboard.request_text(self.readclipboard, user_data = None)
Содержимое user_data отправляется в метод обратного вызова readclipboard (), который отображает его во втором текстовом представлении.
def readclipboard(self, clipboard, text, data): buffer = gtk.TextBuffer() buffer.set_text(text) self.tv2.set_buffer(buffer)
пример
Ниже приведен весь код для работы с буфером обмена —
import gtk class PyApp(gtk.Window): def __init__(self): super(PyApp, self).__init__() self.set_title("Clipboard demo") self.set_size_request(300,200) self.set_position(gtk.WIN_POS_CENTER) vbox = gtk.VBox(False, 5) self.tv1 = gtk.TextView() vbox.add(self.tv1) self.tv2 = gtk.TextView() vbox.add(self.tv2) hbox = gtk.HBox(True, 3) Set = gtk.Button("set") Set.set_size_request(70, 30) retrieve = gtk.Button("retrieve") hbox.add(Set) hbox.add(retrieve) halign = gtk.Alignment(1, 0, 0, 0) halign.add(hbox) vbox.pack_start(halign, False, False, 3) self.add(vbox) Set.connect("clicked", self.on_set) retrieve.connect("clicked", self.on_retrieve) self.connect("destroy", gtk.main_quit) self.show_all() def on_set(self, widget): buf = self.tv1.get_buffer() text = buf.get_text(buf.get_start_iter(), buf.get_end_iter()) self.clipboard = gtk.clipboard_get() self.clipboard.set_text(text) self.clipboard.store() def on_retrieve(self, widget): self.clipboard.request_text(self.readclipboard, user_data=None) def readclipboard(self, clipboard, text, data): buffer = gtk.TextBuffer() buffer.set_text(text) self.tv2.set_buffer(buffer) PyApp() gtk.main()
Приведенный выше код сгенерирует следующий вывод: