PyGTK - ลากและวาง

วิดเจ็ตที่มี X Window เชื่อมโยงสามารถลากและวางได้ ในโปรแกรมต้องกำหนดวิดเจ็ตที่เป็นแหล่งที่มาและ / หรือปลายทางสำหรับการลากแล้วปล่อยก่อน วิดเจ็ตที่กำหนดเป็นแหล่งที่มาสามารถส่งข้อมูลที่ลากได้ วิดเจ็ตปลายทางยอมรับเมื่อข้อมูลที่ลากหลุดออกไป

ขั้นตอนต่อไปนี้เกี่ยวข้องกับการตั้งค่าแอปพลิเคชั่นที่เปิดใช้งานการลากแล้วปล่อย -

Step 1 - การตั้งค่าวิดเจ็ตต้นทาง

Step 2 - วิธี drag_source_set () ระบุประเภทเป้าหมายสำหรับการดำเนินการลาก -

widget.drag_source_set(start_button_mask, targets, info)

Step 3 - อาร์กิวเมนต์ start_button_mask ระบุบิตมาสก์ของปุ่มที่เริ่มดำเนินการลาก

Step 4 - อาร์กิวเมนต์เป้าหมายคือรายการสิ่งที่เพิ่มขึ้นของโครงสร้างนี้ -

(target, flags, info)

อาร์กิวเมนต์เป้าหมายคือสตริงที่แสดงถึงประเภทการลากตัวอย่างเช่น text / plain หรือ image / x-xpixmap

Step 6 - แฟล็กต่อไปนี้ถูกกำหนดไว้ล่วงหน้า -

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Step 7 - จะไม่มีข้อ จำกัด เนื่องจากตั้งค่าสถานะเป็น 0

หากวิดเจ็ตไม่จำเป็นต้องทำหน้าที่เป็นแหล่งที่มาก็สามารถยกเลิกการตั้งค่าได้ -

widget.drag_source_unset()

สัญญาณต้นทางจะปล่อยสัญญาณ ตารางต่อไปนี้แสดงรายการสัญญาณและการเรียกกลับ

drag_begin def drag_begin_cb (วิดเจ็ต drag_context ข้อมูล):
drag_data_get def drag_data_get_cb (วิดเจ็ต, drag_context, selection_data, ข้อมูล, เวลา, ข้อมูล):
drag_data_delete def drag_data_delete_cb (วิดเจ็ต drag_context ข้อมูล):
drag_end def drag_end_cb (วิดเจ็ต drag_context ข้อมูล):

การตั้งค่าวิดเจ็ตปลายทาง

วิธี drag_dest_set () ระบุว่าวิดเจ็ตใดสามารถรับข้อมูลที่ลากได้

widget.drag_dest_set(flags, targets, action)

พารามิเตอร์แฟล็กสามารถรับค่าคงที่อย่างใดอย่างหนึ่งต่อไปนี้ -

gtk.DEST_DEFAULT_MOTION ตรวจสอบว่าการลากตรงกับรายการเป้าหมายและการดำเนินการที่เป็นไปได้ของวิดเจ็ตนี้หรือไม่จากนั้นเรียกใช้ drag_status () ตามความเหมาะสม
gtk.DEST_DEFAULT_HIGHLIGHT สิ่งนี้จะดึงจุดเด่นบนวิดเจ็ตนี้ตราบใดที่การลากอยู่เหนือวิดเจ็ตนี้
gtk.DEST_DEFAULT_DROP เมื่อเกิดการตกหล่นหากการลากตรงกับรายการเป้าหมายและการเรียกใช้การดำเนินการที่เป็นไปได้ของวิดเจ็ตนี้ drag_get_data()ในนามของวิดเจ็ต ไม่ว่าจะหยอดสำเร็จหรือไม่โทรdrag_finish(). หากการกระทำเป็นการย้ายและการลากสำเร็จ TRUE จะถูกส่งผ่านสำหรับพารามิเตอร์การลบไปที่drag_finish().
gtk.DEST_DEFAULT_ALL หากตั้งค่าไว้ระบุว่าควรดำเนินการเริ่มต้นทั้งหมด

เป้าหมายคือรายการสิ่งที่มีข้อมูลเป้าหมาย อาร์กิวเมนต์การดำเนินการเป็นบิตมาสก์หรือการรวมกันของค่าต่อไปนี้อย่างน้อยหนึ่งค่า -

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

ตัวจัดการ "drag-motion" ต้องพิจารณาว่าข้อมูลการลากเหมาะสมหรือไม่โดยการจับคู่เป้าหมายปลายทางกับไฟล์ gtk.gdk.DragContext เป้าหมายและเป็นทางเลือกโดยการตรวจสอบข้อมูลการลากโดยเรียกไฟล์ drag_get_data()วิธี. gtk.gdk.DragContext. drag_status() ต้องเรียกใช้เมธอดเพื่ออัปเดตไฟล์ drag_context สถานะ.

ตัวจัดการ "ลากวาง" ต้องกำหนดเป้าหมายที่ตรงกันโดยใช้ drag_dest_find_target() จากนั้นขอข้อมูลการลากโดยใช้ไฟล์ drag_get_data()วิธี. ข้อมูลจะอยู่ในตัวจัดการ "การลากข้อมูลที่ได้รับ"