0

ユーザーがファイルをラベルウィジェットにドラッグできるようにするPyGTKを使用して、Ubuntuでアプリケーションを開発しました。これは 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 に答える