python - Hvordan kan jeg trække links til en PyGTK-applikation under Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Evernote-klienten har en flot funktion, der gør det muligt at trække links fra Firefox til Evernote-redigeringsvinduet, som fungerer med både bogmærker og links i browservinduet. Jeg vil gerne tilføje en lignende funktion til en PyGTK-applikation. Her er hvad jeg forsøgte så langt (ved hjælp af Py 2.7.2 og 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
\%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()


Dette fungerer pænt under Linux: Du kan trække og slippe et link eller et bogmærke fra Firefox til GTK-vinduet, og det viser den trækede URL. Uheldigvis virker det ikke under Windows. Jeg har testet med Windows 7. Her accepterer ovenstående applikation kun filforbindelser, men ikke internetforbindelser fra Firefox eller andre webbrowsere. Er det muligt at få det til at fungere under Windows?

Bedste reference


Jeg har aldrig set inter-app GTK + DnD-arbejde i Windows, bortset fra at trække fra Windows Stifinder til en GTK + -app. Du kan teste dette ved hjælp af demo-pull-demoen fra PyGTK-tutorialen. (Selv med at trække fra Explorer har nogle ulige quirks, f.eks. ikke udløse drag-motion.) [2]


Jeg synes det er bare enten meget buggy eller ikke implementeret.