PyGTK - klasa schowka
Obiekt Clipboard przechowuje dane udostępnione między dwoma procesami lub dwoma widżetami tej samej aplikacji. Gtk.Clipboard jest interfejsem wysokiego poziomu dla klasy gtk.SelectionData.
Poniżej znajduje się prototyp konstruktora gtk.Clipboard -
gtk.Clipboard(display,selction)
Tutaj parametr display odpowiada obiektowi gtk.gdk.Display, dla którego ma zostać utworzony lub pobrany schowek. Domyślnie jest to standardowe urządzenie wyjściowe. Parametr selekcji przyjmuje wartość domyślną CLIPBOARD, obiekt reprezentujący internowany łańcuch.
PyGTK zapewnia wygodną funkcję tworzenia obiektów schowka z ustawieniami domyślnymi.
gtk.clipboard.get()
Klasa gtk.Clipboard ma następujące metody -
Clipboard.store () - Przechowuje gdzieś aktualne dane ze schowka, dzięki czemu pozostaną one dostępne nawet po zamknięciu aplikacji.
Clipboard.clear () - usuwa zawartość schowka.
Clipboard.set_text (text) - Ustawia zawartość schowka na ciąg.
Clipboard.request_text () - żąda zawartości schowka jako tekstu. Kiedy tekst zostanie później odebrany,callback zostanie wywołana z danymi określonymi przez user_data. Podpiscallback jest:
def callback (schowek, tekst, dane) - tekst będzie zawierał rozszerzenie text pobrane ze schowka.
Aby zademonstrować działanie schowka, poniższy kod wykorzystuje dwa TextViews i dwa przyciski na górnym poziomie gtk.Window. Przycisk „Ustaw” wywołujeon_set() funkcja, która umieszcza tekst z pierwszego textView w schowku.
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()
Po naciśnięciu drugiego przycisku („pobrane”) dane ze schowka są pobierane przez metodę request_text () -
self.clipboard.request_text(self.readclipboard, user_data = None)
Zawartość user_data przechodzi do metody wywołania zwrotnego readclipboard() który wyświetla go na drugim widoku tekstu.
def readclipboard(self, clipboard, text, data):
buffer = gtk.TextBuffer()
buffer.set_text(text)
self.tv2.set_buffer(buffer)
Przykład
Poniżej znajduje się cały kod do obsługi schowka -
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()
Powyższy kod wygeneruje następujące dane wyjściowe -