PyGTK - класс буфера обмена
Объект буфера обмена содержит общие данные между двумя процессами или двумя виджетами одного и того же приложения. Gtk.Clipboard - это интерфейс высокого уровня для класса gtk.SelectionData.
Ниже приведен прототип конструктора gtk.Clipboard:
gtk.Clipboard(display,selction)
Здесь параметр display соответствует объекту gtk.gdk.Display, для которого должен быть создан или извлечен буфер обмена. По умолчанию это стандартное устройство вывода. Параметр выбора по умолчанию - CLIPBOARD, объект, представляющий интернированную строку.
PyGTK предоставляет удобную функцию для создания объекта буфера обмена со значениями по умолчанию.
gtk.clipboard.get()
Класс gtk.Clipboard имеет следующие методы:
Clipboard.store () - где-то хранятся текущие данные буфера обмена, так что они останутся там даже после выхода из приложения.
Clipboard.clear () - удаляет содержимое буфера обмена.
Clipboard.set_text (text) - устанавливает содержимое буфера обмена в строку.
Clipboard.request_text () - запрашивает содержимое буфера обмена в виде текста. Когда текст будет получен позже,callback будет вызываться с данными, указанными user_data. Подписьcallback является:
def callback (буфер обмена, текст, данные) - текст будет содержать text извлекается из буфера обмена.
В качестве демонстрации буфера обмена следующий код использует два TextView и две кнопки на верхнем уровне 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()
Приведенный выше код сгенерирует следующий вывод -