PyGTK - Lớp Clipboard

Một đối tượng Clipboard chứa dữ liệu được chia sẻ giữa hai tiến trình hoặc hai widget của cùng một ứng dụng. Gtk.Clipboard là một giao diện cấp cao cho lớp gtk.SelectionData.

Sau đây là nguyên mẫu của hàm tạo gtk.Clipboard -

gtk.Clipboard(display,selction)

Ở đây, tham số hiển thị tương ứng với đối tượng gtk.gdk.Display mà clipboard sẽ được tạo hoặc truy xuất. Theo mặc định, nó là thiết bị đầu ra tiêu chuẩn. Tham số lựa chọn mặc định là CLIPBOARD, một đối tượng đại diện cho một chuỗi được thực hiện.

PyGTK cung cấp một chức năng tiện lợi để tạo một đối tượng clipboard với các giá trị mặc định.

gtk.clipboard.get()

Lớp gtk.Clipboard có các phương thức sau:

  • Clipboard.store () - Điều này lưu trữ dữ liệu clipboard hiện tại ở đâu đó để nó sẽ ở xung quanh ngay cả khi ứng dụng đã thoát.

  • Clipboard.clear () - Thao tác này sẽ xóa nội dung của khay nhớ tạm.

  • Clipboard.set_text (văn bản) - Điều này đặt nội dung của khay nhớ tạm vào chuỗi.

  • Clipboard.request_text () - Điều này yêu cầu nội dung của khay nhớ tạm dưới dạng văn bản. Khi văn bản được nhận sau đó,callback sẽ được gọi với dữ liệu được chỉ định bởi user_data. Chữ ký củacallback Là:

    • gọi lại def (khay nhớ tạm, văn bản, dữ liệu) - văn bản sẽ chứa text được truy xuất từ ​​khay nhớ tạm.

Để minh họa cho clipboard, đoạn mã sau sử dụng hai TextView và hai nút trên gtk.Window cấp cao nhất. Nút 'Đặt' gọion_set() chức năng đặt văn bản từ textView đầu tiên vào khay nhớ tạm.

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

Khi nhấn nút thứ hai ('đã truy xuất'), dữ liệu từ khay nhớ tạm được tìm nạp bằng phương thức request_text () -

self.clipboard.request_text(self.readclipboard,        user_data = None)

Nội dung của user_data chuyển đến một phương thức gọi lại readclipboard() hiển thị nó trên chế độ xem văn bản thứ hai.

def readclipboard(self, clipboard, text, data):
   buffer = gtk.TextBuffer()
   buffer.set_text(text)
   self.tv2.set_buffer(buffer)

Thí dụ

Sau đây là toàn bộ mã cho hoạt động của khay nhớ tạm:

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ạn mã trên sẽ tạo ra kết quả sau: