2013-06-05 51 views
4

大約兩週我一直在學習GTK + 3.0。我想製作一個優秀的桌面應用程序,但越來越多地發現GTK,更加神祕,我一直爲網絡開發,只有6個多月的android開發,並且我有一年的Windows Presentation Foundation經驗,並且從未發現過如此艱苦做任何事情,比如GTK,它現在試圖在應用程序中實現一個拖拽文件,最後我找到了一個例子,雖然它不能完全理解某些代碼行的需要。解釋工作原理在GTK + 3.0上拖動'n Drop'

所需的解釋是關於方法Gtk.Window.drag_dest_setWindow.on_drag_motionWindow.on_drag_drop

爲什麼necesary使用Gdk.drag_status? 爲什麼我需要做widget.drag_get_data(context, context.list_targets()[-1], time)

from gi.repository import Gtk, Gdk 

class Window(Gtk.Window): 
    ''' 
    Main Window 
    ''' 
    def __init__(self): 
     super(Window, self).__init__(title=TITLE) 

     self.connect('delete-event', Gtk.main_quit) 

     ''' 
     set up drag 
     ''' 
     self.connect('drag-motion', self.on_drag_motion) 
     self.connect('drag-drop', self.on_drag_drop) 
     self.connect('drag-data-received', self.on_drag_data_received) 
     self.drag_dest_set(0, [], 0) 

     self.show() 
     Gtk.main() 

    def on_drag_motion(self, widgt, context, c, y, time): 
     Gdk.drag_status(context, Gdk.DragAction.COPY, time) 
     return True 

    def on_drag_drop(self, widget, context, x, y, time): 
     widget.drag_get_data(context, context.list_targets()[-1], time) 

    def on_drag_data_received(self, widget, drag_context, x, y, data, info, time): 
     files = data.get_text().rstrip('\n').split('\n') 

     for file in files: 
      print(file) 

if __name__ == '__main__': 
    Window() 
+0

好問題,令人驚訝的是該示例讓您在應用程序中拖動,但不拖動文件。如果你想知道'Gtk.Window.drag_dest_set'和類似的東西,運行'Gtk.Window.drag_dest_set .__ doc__'來查看它期望的參數。 – NoBugs

回答