2012-10-02 48 views
0

我在Ubuntu下使用PyGTK開發了一個應用程序,允許用戶將文件拖入標籤小部件。這是Python 2.7。適用的代碼如下:使用PyGTK,如何獲取路徑名而不是拖放事件的uri?

import pygtk 
pygtk.require('2.0') 
import gtk 

w = gtk.Window() 
w.drag_set_set(0, [], 0) 
w.connect('drag_motion', motion_cb) 
w.connect('drag_drop', drop_cb) 
w.connect('drag_data_received', got_data_cb) 
w.connect('destroy', lambda w: gtk_main_quit()) 

l = gtk.Label() 
l.set_text('Drag File Here') 
w.add(l) 
w.show_all() 
gtk.main() 

def motion_cb(wid, context, x, y, time): 
    context.drag_status(gtk.gdk.ACTION_COPY, time) 
    return True 

def drop_cb(wid, context, x, y, time): 
    wid.drag_get_dta(context, context.targets[-1], time) 
    return True 

def got_data_cb(wid, context, x, y, data, info, time): 
    # the following line returns a URI? I want the absolute file path 
    print data.get_text() 

所以got_data_cb功能有gtk.SelectionData項目。當我打電話給get_text()時,它給了我一個URI。從Python 2.6開始,還有一個get_uris()函數我也是間諜。如何獲得返回的絕對文件路徑而不是此uri?我的目標是使用用戶選擇的文件作爲程序的命令行參數運行一個外部程序(我已經有這部分工作,除了我需要傳遞用戶選擇的文件的正確路徑)。

+0

你說得對,用''urlparse''來提取實際的文件系統路徑。對於從路徑中獲取的更多信息,您應該使用[''os.path.basename''](http://docs.python.org/library/os.path.html#os.path.basename)和[''os.path.dirname''](http://docs.python.org/library/os.path.html#os.path.dirname)(可能還有其他來自os.path)。您可能希望在輸入之前先分割輸入,以確保您自己處理每個uri,如果存在多個uris。 –

回答

0

好了,我看我可以採取額外的步驟做這樣

my_path = urlparse.urlparse(data.get_text()).path 

這會給我包括文件的完整目錄路徑。那麼我可以做

base_directory = my_path.rsplit('/', 1)[0] 
selected_file = my_path.rsplit('/', 1)[1].rstrip('\n') 
相關問題