PyGTK - Seret dan Jatuhkan

Widget yang memiliki X Window terkait dapat melakukan drag and drop. Dalam program ini, widget sebagai sumber dan / atau tujuan untuk drag-and-drop harus ditetapkan terlebih dahulu. Widget yang ditetapkan sebagai sumber dapat mengirimkan data yang ditarik. Widget tujuan menerimanya saat data yang diseret dijatuhkan di atasnya.

Langkah-langkah berikut ini terlibat dalam menyiapkan aplikasi yang mendukung seret dan lepas -

Step 1 - Menyiapkan widget sumber.

Step 2 - Metode drag_source_set () menentukan jenis target untuk operasi seret -

widget.drag_source_set(start_button_mask, targets, info)

Step 3 - Argumen start_button_mask menentukan bitmask tombol yang memulai operasi seret.

Step 4 - Argumen target adalah daftar tupel dari struktur ini -

(target, flags, info)

Argumen target adalah string yang mewakili jenis seret, misalnya, teks / biasa atau gambar / x-xpixmap.

Step 6 - Bendera berikut ditentukan sebelumnya -

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Step 7 - Tidak akan ada batasan karena bendera disetel ke 0.

Jika widget tidak diperlukan untuk bertindak sebagai sumber, itu bisa tidak disetel -

widget.drag_source_unset()

Sinyal sumber memancarkan sinyal. Tabel berikut mencantumkan sinyal dan callbacknya.

drag_begin def drag_begin_cb (widget, drag_context, data):
drag_data_get def drag_data_get_cb (widget, drag_context, selection_data, info, waktu, data):
drag_data_delete def drag_data_delete_cb (widget, drag_context, data):
drag_end def drag_end_cb (widget, drag_context, data):

Menyiapkan Widget Tujuan

Metode drag_dest_set () menentukan widget mana yang dapat menerima data yang diseret.

widget.drag_dest_set(flags, targets, action)

Parameter flags dapat mengambil salah satu dari konstanta berikut -

gtk.DEST_DEFAULT_MOTION Ini memeriksa apakah seret cocok dengan daftar kemungkinan target dan tindakan widget ini, lalu memanggil drag_status () yang sesuai.
gtk.DEST_DEFAULT_HIGHLIGHT Ini menarik sorotan pada widget ini selama drag di widget ini
gtk.DEST_DEFAULT_DROP Saat penurunan terjadi, jika tarik cocok dengan daftar target yang mungkin dan panggilan tindakan dari widget ini drag_get_data()atas nama widget. Apakah drop berhasil atau tidak, hubungidrag_finish(). Jika tindakannya adalah pindah dan drag berhasil, maka TRUE akan diteruskan untuk parameter delete kedrag_finish().
gtk.DEST_DEFAULT_ALL Jika disetel, tentukan bahwa semua tindakan default harus diambil.

Targetnya adalah daftar tupel yang berisi informasi target. Argumen tindakan adalah topeng bit atau kombinasi dari satu atau beberapa nilai berikut -

  • gtk.gdk.ACTION_DEFAULT
  • gtk.gdk.ACTION_COPY
  • gtk.gdk.ACTION_MOVE
  • gtk.gdk.ACTION_LINK
  • gtk.gdk.ACTION_PRIVATE
  • gtk.gdk.ACTION_ASK

Penangan "gerakan tarik" harus menentukan apakah data tarik sesuai dengan mencocokkan target tujuan dengan gtk.gdk.DragContext target dan secara opsional dengan memeriksa data tarik dengan memanggil drag_get_data()metode. Itugtk.gdk.DragContext. drag_status() harus dipanggil untuk memperbarui drag_context status.

Penangan "seret-lepas" harus menentukan target yang cocok menggunakan drag_dest_find_target() metode dan kemudian meminta data seret menggunakan drag_get_data()metode. Data akan tersedia di penangan "seret-data-diterima".