Учебники

PyGTK — класс буфера обмена

Объект 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()

Приведенный выше код сгенерирует следующий вывод: