PyGTK 剪贴板类
一个剪贴板对象可以保存两个进程或同一程序的两个部件之间的共享数据。gtk.Clipboard是gtk.SelectionData类的一个高级接口。
下面是gtk.Clipboard构造函数的原型-
gtk.Clipboard(display,selction)
这里,display参数对应的是gtk.gdk.Display对象,剪贴板将为其创建或检索。默认情况下,它是标准输出设备。选择参数默认为CLIPBOARD,一个代表内部字符串的对象。
PyGTK提供了一个方便的函数来创建一个带有默认值的剪贴板对象。
gtk.clipboard.get()
gtk.Clipboard类有下列方法
- Clipboard.store() – 将当前的剪贴板数据储存在某个地方,这样即使在应用程序退出后,它也会留在那里。
-
Clipboard.clear() – 这将删除剪贴板上的内容。
-
Clipboard.set_text(text) – 将剪贴板的内容设置为字符串。
-
Clipboard.request_text() – 这个请求将剪贴板的内容作为文本。当收到文本后, 回调 将被调用, 回调 的数据由 user_data 指定 。 callback 的签名是。
- def callback(clipboard, text, data) – text将包含从剪贴板中获取的 文本 。
作为剪贴板的演示,下面的代码在toplevel gtk.Window上使用了两个TextViews和两个按钮。设置 “按钮调用 on_set() 函数,将第一个TextView的文本放到剪贴板上。
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()
当第二个按钮(’检索’)被按下时,剪贴板上的数据被request_text()方法取走了。
self.clipboard.request_text(self.readclipboard, user_data = None)
user_data 的内容进入一个回调方法 readclipboard() ,在第二个文本视图上显示。
def readclipboard(self, clipboard, text, data):
buffer = gtk.TextBuffer()
buffer.set_text(text)
self.tv2.set_buffer(buffer)
例子
以下是剪贴板操作的全部代码-
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()
上述代码将产生以下输出 –