PyGTK - Clase de portapapeles

Un objeto de Portapapeles contiene datos compartidos entre dos procesos o dos widgets de la misma aplicación. El gtk.Clipboard es una interfaz de alto nivel para la clase gtk.SelectionData.

El siguiente es un prototipo del constructor gtk.Clipboard -

gtk.Clipboard(display,selction)

Aquí, el parámetro de visualización corresponde al objeto gtk.gdk.Display para el que se va a crear o recuperar el portapapeles. De forma predeterminada, es el dispositivo de salida estándar. El parámetro de selección predeterminado es CLIPBOARD, un objeto que representa una cadena interna.

PyGTK proporciona una función conveniente para crear un objeto de portapapeles con valores predeterminados.

gtk.clipboard.get()

La clase gtk.Clipboard tiene los siguientes métodos:

  • Clipboard.store (): almacena los datos actuales del portapapeles en algún lugar para que permanezcan incluso después de que la aplicación se haya cerrado.

  • Clipboard.clear (): elimina el contenido del portapapeles.

  • Clipboard.set_text (texto): establece el contenido del portapapeles en la cadena.

  • Clipboard.request_text (): solicita el contenido del portapapeles como texto. Cuando el texto se reciba más tarde,callback será llamado con los datos especificados por user_data. La firma decallback es:

    • def callback (portapapeles, texto, datos): el texto contendrá el text recuperado del portapapeles.

Como demostración del portapapeles, el siguiente código usa dos TextViews y dos botones en un gtk.Window de nivel superior. El botón 'Establecer' llama alon_set() función que coloca el texto del primer textView en el portapapeles.

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()

Cuando se presiona el segundo botón ('recuperado'), los datos del portapapeles se obtienen mediante el método request_text () -

self.clipboard.request_text(self.readclipboard,        user_data = None)

El contenido de user_data va a un método de devolución de llamada readclipboard() que lo muestra en la segunda vista de texto.

def readclipboard(self, clipboard, text, data):
   buffer = gtk.TextBuffer()
   buffer.set_text(text)
   self.tv2.set_buffer(buffer)

Ejemplo

El siguiente es el código completo para la operación del portapapeles:

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()

El código anterior generará la siguiente salida: