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: