0

我在 Ubuntu 下使用 PyGTK 开发了一个应用程序,它允许用户将文件拖到标签小部件中。这是 Python 2.7。适用代码如下:

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?我的目标是使用用户选择的文件作为程序的命令行参数来运行外部程序(我已经让这部分工作,除了我需要为用户选择的文件传递正确的路径)。

4

1 回答 1

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')
于 2012-10-05T01:15:41.223 回答