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?我的目標是使用用戶選擇的文件作爲程序的命令行參數運行一個外部程序(我已經有這部分工作,除了我需要傳遞用戶選擇的文件的正確路徑)。
你說得對,用''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。 –