2014-06-07 4 views
2

pygtob FAQ에서 pygobject로 샘플 드래그 앤 드롭 예제를 포트에 넣으려고합니다.pygobject에서 파일 예제를 끌어서 놓기

from gi.repository import Gtk as gtk 
import urllib 
import os 

TARGET_TYPE_URI_LIST = 80 
dnd_list = [ ('text/uri-list', 0, TARGET_TYPE_URI_LIST) ] 

def get_file_path_from_dnd_dropped_uri(uri): 
    # get the path to file 
    path = "" 
    if uri.startswith('file:\\\\\\'): # windows 
     path = uri[8:] # 8 is len('file:///') 
    elif uri.startswith('file://'): # nautilus, rox 
     path = uri[7:] # 7 is len('file://') 
    elif uri.startswith('file:'): # xffm 
     path = uri[5:] # 5 is len('file:') 

    path = urllib.url2pathname(path) # escape special chars 
    path = path.strip('\r\n\x00') # remove \r\n and NULL 

    return path 

def on_drag_data_received(widget, context, x, y, selection, target_type, timestamp): 
    if target_type == TARGET_TYPE_URI_LIST: 
     uri = selection.data.strip('\r\n\x00') 
     print 'uri', uri 
     uri_splitted = uri.split() # we may have more than one file dropped 
     for uri in uri_splitted: 
      path = get_file_path_from_dnd_dropped_uri(uri) 
      print 'path to open', path 
      if os.path.isfile(path): # is it file? 
       data = file(path).read() 
       #print data 

w = gtk.Window() 
w.connect('drag_data_received', on_drag_data_received) 
w.drag_dest_set(gtk.DEST_DEFAULT_MOTION | 
       gtk.DEST_DEFAULT_HIGHLIGHT | gtk.DEST_DEFAULT_DROP, 
       dnd_list, gtk.gdk.ACTION_COPY) 

w.show_all() 
gtk.main() 

pygobject에서 끌어서 놓기 예제 작업을 할 수있게 도와주세요. 나는 창문 위에있다.

답변

2

드래그 예 작업 및 (는 Windows7에서 테스트) pygobject

from gi.repository import Gtk, GdkPixbuf, Gdk 
import urllib 
import os 
TARGET_TYPE_URI_LIST = 80 

def get_file_path_from_dnd_dropped_uri(uri): 
    # get the path to file 
    path = "" 
    if uri.startswith('file:\\\\\\'): # windows 
     path = uri[8:] # 8 is len('file:///') 
    elif uri.startswith('file://'): # nautilus, rox 
     path = uri[7:] # 7 is len('file://') 
    elif uri.startswith('file:'): # xffm 
     path = uri[5:] # 5 is len('file:') 

    path = urllib.url2pathname(path) # escape special chars 
    path = path.strip('\r\n\x00') # remove \r\n and NULL 

    return path 

def on_drag_data_received(widget, context, x, y, selection, target_type, timestamp): 
    if target_type == TARGET_TYPE_URI_LIST: 
     uri = selection.get_data().strip('\r\n\x00') 
     print 'uri', uri 
     uri_splitted = uri.split() # we may have more than one file dropped 
     for uri in uri_splitted: 
      path = get_file_path_from_dnd_dropped_uri(uri) 
      print 'path to open', path 
      if os.path.isfile(path): # is it file? 
       data = file(path).read() 
       #print data 

w = Gtk.Window() 
w.connect('drag_data_received', on_drag_data_received) 

w.drag_dest_set(Gtk.DestDefaults.MOTION| 
        Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, 
        [Gtk.TargetEntry.new("text/uri-list", 0, 80)], Gdk.DragAction.COPY) 



w.show_all() 
Gtk.main() 
를 사용 삭제