如何在Windows下将链接拖到PyGTK应用程序?

时间:2012-03-11 17:20:54

标签: python windows drag-and-drop gtk pygtk

Evernote客户端有一个很好的功能,允许从Firefox拖动链接到Evernote编辑窗口,该窗口可以在浏览器窗口中同时使用书签和链接。我想为PyGTK应用程序添加类似的功能。这是我到目前为止所尝试的(使用Py 2.7.2和PyGTK 2.24.0):

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

flags = gtk.TARGET_OTHER_APP
targets = [
    ('text/uri-list', flags, 0),
    ('text/plain', flags, 1),
    ('text/x-uri', flags, 2),
    ('text/x-moz-url', flags, 3),
    ('application/x-bookmark', flags, 4),
    ('application/x-mswinurl', flags, 5),
    ('application/x-desktop', flags, 6)]

def receive_data(wid, context, x, y, data, info, time):
    type = data.type
    url = data.data
    if info == 2:
        url = url.decode('utf-16')
    url = url.splitlines()[0]
    text = '%s\n%s' % (type, url)
    label.set_text(text)
    context.finish(True, False, time)

window = gtk.Window()
window.set_size_request(400, 80)

label = gtk.Label()
label.set_justify(gtk.JUSTIFY_CENTER)
label.set_ellipsize(pango.ELLIPSIZE_END)
window.add(label)

window.drag_dest_set(gtk.DEST_DEFAULT_ALL, targets,
    gtk.gdk.ACTION_COPY|gtk.gdk.ACTION_MOVE)

window.connect('drag_data_received', receive_data)
window.connect('destroy', lambda window: gtk.main_quit())

window.show_all()
gtk.main()

这在Linux下运行良好:您可以将链接或书签从Firefox拖放到GTK窗口,它会显示拖动的URL。不幸的是,它在Windows下无法运行。我已经使用Windows 7进行了测试。这里,上述应用程序只接受文件链接,但不接受来自Firefox或其他Web浏览器的Internet链接。是否有可能让它在Windows下运行?

1 个答案:

答案 0 :(得分:1)

除了从Windows资源管理器拖动到GTK +应用程序之外,我从未见过应用程序间GTK + DnD在Windows中工作。您可以使用PyGTK教程中的drag targets demo对此进行测试。 (即使从资源管理器拖动也有一些奇怪的怪癖,例如没有触发拖动动作。)

我认为这只是非常错误或未实施。