PyGTK - 剪貼簿類



剪貼簿物件儲存兩個程序或同一應用程式中兩個部件之間共享的資料。gtk.Clipboard 是 gtk.SelectionData 類的更高級別介面。

以下是 gtk.Clipboard 建構函式的原型:

gtk.Clipboard(display,selction)

這裡,display 引數對應於要為其建立或檢索剪貼簿的 gtk.gdk.Display 物件。預設情況下,它是標準輸出裝置。selection 引數預設為 CLIPBOARD,一個表示內部字串的物件。

PyGTK 提供了一個便利函式,可以使用預設值建立剪貼簿物件。

gtk.clipboard.get()

gtk.Clipboard 類具有以下方法:

  • Clipboard.store() - 將當前剪貼簿資料儲存在某個位置,以便即使應用程式退出後也能保留。

  • Clipboard.clear() - 刪除剪貼簿內容。

  • Clipboard.set_text(text) - 將剪貼簿的內容設定為字串。

  • Clipboard.request_text() - 請求剪貼簿的內容作為文字。稍後收到文字時,將使用user_data指定的資料呼叫callbackcallback的簽名為

    • def callback(clipboard, text, data) - text 將包含從剪貼簿檢索到的text

為了演示剪貼簿,以下程式碼在頂級 gtk.Window 上使用兩個 TextView 和兩個按鈕。“設定”按鈕呼叫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(),後者將其顯示在第二個 textview 上。

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

以上程式碼將生成以下輸出:

Clipboard Demo
廣告

© . All rights reserved.