PyGTK - Classe Clipboard
Um objeto Clipboard contém dados compartilhados entre dois processos ou dois widgets do mesmo aplicativo. O gtk.Clipboard é uma interface de alto nível para a classe gtk.SelectionData.
O seguinte é um protótipo do construtor gtk.Clipboard -
gtk.Clipboard(display,selction)
Aqui, o parâmetro de exibição corresponde ao objeto gtk.gdk.Display para o qual a área de transferência deve ser criada ou recuperada. Por padrão, é o dispositivo de saída padrão. O parâmetro de seleção é padronizado para CLIPBOARD, um objeto que representa uma string interna.
O PyGTK fornece uma função conveniente para criar um objeto da área de transferência com padrões.
gtk.clipboard.get()
A classe gtk.Clipboard tem os seguintes métodos -
Clipboard.store () - armazena os dados atuais da área de transferência em algum lugar para que permaneçam mesmo após o encerramento do aplicativo.
Clipboard.clear () - Remove o conteúdo da área de transferência.
Clipboard.set_text (text) - Isso define o conteúdo da área de transferência para a string.
Clipboard.request_text () - Solicita o conteúdo da área de transferência como texto. Quando o texto é recebido mais tarde,callback será chamado com os dados especificados por user_data. A assinatura decallback é:
def callback (área de transferência, texto, dados) - o texto conterá o text recuperado da área de transferência.
Como demonstração da área de transferência, o código a seguir usa dois TextViews e dois botões em um gtk.Window de nível superior. O botão 'Definir' chama oon_set() função que coloca o texto do primeiro textView na área de transferência.
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 o segundo botão ('recuperado') é pressionado, os dados da área de transferência são buscados pelo método request_text () -
self.clipboard.request_text(self.readclipboard, user_data = None)
O conteúdo de user_data vai para um método de retorno de chamada readclipboard() que o exibe no segundo textview.
def readclipboard(self, clipboard, text, data):
buffer = gtk.TextBuffer()
buffer.set_text(text)
self.tv2.set_buffer(buffer)
Exemplo
A seguir está todo o código para a operação da área de transferência -
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()
O código acima irá gerar a seguinte saída -