4 Stimmen

Wie kann ich Links zu einer PyGTK-Anwendung unter Windows ziehen?

Der Evernote-Client hat eine nette Funktion, die es erlaubt, Links aus Firefox in das Evernote-Bearbeitungsfenster zu ziehen, was sowohl mit Lesezeichen als auch mit Links im Browserfenster funktioniert. Ich würde gerne eine ähnliche Funktion zu einer PyGTK-Anwendung hinzufügen. Hier ist, was ich bisher versucht habe (mit Py 2.7.2 und 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()

Dies funktioniert gut unter Linux: Sie können einen Link oder ein Lesezeichen aus Firefox in das GTK-Fenster ziehen und dort ablegen, und es zeigt die gezogene URL an. Leider funktioniert es nicht unter Windows. Ich habe es mit Windows 7 getestet. Hier akzeptiert die obige Anwendung nur Dateilinks, aber keine Internet-Links aus Firefox oder anderen Webbrowsern. Ist es möglich, es auch unter Windows zum Laufen zu bringen?

1voto

Johannes Sasongko Punkte 4128

Ich habe noch nie gesehen, dass GTK+ DnD unter Windows funktioniert, außer beim Ziehen vom Windows Explorer in eine GTK+ Anwendung. Sie können dies mit der Schleppziele Demo aus dem PyGTK-Tutorial. (Sogar das Ziehen aus dem Explorer hat einige seltsame Macken, z.B. löst es die Ziehbewegung nicht aus).

Ich denke, es ist entweder sehr fehlerhaft oder nicht implementiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X