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()วิธี. ข้อมูลจะอยู่ในตัวจัดการ "การลากข้อมูลที่ได้รับ"