PyGTK - Classe Appunti

Un oggetto Appunti contiene dati condivisi tra due processi o due widget della stessa applicazione. Gtk.Clipboard è un'interfaccia di alto livello per la classe gtk.SelectionData.

Quello che segue è un prototipo del costruttore gtk.Clipboard -

gtk.Clipboard(display,selction)

Qui, il parametro di visualizzazione corrisponde all'oggetto gtk.gdk.Display per il quale devono essere creati o recuperati gli appunti. Per impostazione predefinita, è il dispositivo di output standard. Il parametro di selezione predefinito è APPUNTI, un oggetto che rappresenta una stringa interna.

PyGTK fornisce una comoda funzione per creare un oggetto appunti con i valori predefiniti.

gtk.clipboard.get()

La classe gtk.Clipboard ha i seguenti metodi:

  • Clipboard.store () - Questo memorizza i dati degli appunti correnti da qualche parte in modo che rimangano in giro anche dopo che l'applicazione è stata chiusa.

  • Clipboard.clear (): rimuove il contenuto degli appunti.

  • Clipboard.set_text (testo): imposta il contenuto degli appunti sulla stringa.

  • Clipboard.request_text (): richiede il contenuto degli appunti come testo. Quando il testo viene ricevuto successivamente,callback verrà chiamato con i dati specificati da user_data. La firma dicallback è:

    • def callback (appunti, testo, dati) - il testo conterrà il file text recuperato dagli appunti.

Come dimostrazione degli appunti, il codice seguente utilizza due TextView e due pulsanti su una finestra gtk.Window di primo livello. Il pulsante "Imposta" richiama il fileon_set() funzione che mette il testo dal primo textView negli appunti.

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

Quando viene premuto il secondo pulsante ('retrieved'), i dati dagli appunti vengono recuperati dal metodo request_text () -

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

Il contenuto di user_data va a un metodo di callback readclipboard() che lo mostra nella seconda visualizzazione di testo.

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

Esempio

Quanto segue è l'intero codice per il funzionamento degli appunti:

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

Il codice sopra genererà il seguente output: