Перетащите видео с YouTube в окно Python / Gtk - PullRequest
1 голос
/ 15 января 2020

Я хочу перетащить видео с YouTube из веб-браузера в окно Gtk. Окно Gtk получает URL видео.

Тестовый скрипт ниже работает только в 20% случаев. Иногда окно Gtk получает желаемый URL в виде обычного текста. Большую часть времени он получает что-то вроде application / x-moz-file-promise-dest-filename (от Firefox) или chromium / x-renderer-taint (от Chromium).

Некоторые похожие скрипты работают 100% времени. Этот позволяет пользователю перетаскивать на Gtk.Label. Этот ответ позволяет пользователю перетаскивать на Gtk.TreeView. Предположительно перетаскивание на любой из этих виджетов отфильтровывает все, кроме URL, но это мне не помогает; У меня нет Gtk.Label или Gtk.TreeView.

Помимо перехода в Gtk.Window, я пробовал paneds, vboxes и listboxes с одинаковыми результатами. Я попытался использовать Gtk.Window.drag_dest_add_text_targets (), который полностью ломает скрипт.

РЕДАКТИРОВАТЬ: Исправление заключается в следующем.

#!/usr/bin/env python3

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GObject

class DragDropWindow(Gtk.Window):

    def __init__(self):

        Gtk.Window.__init__(self, title='Drag and drop test')
        self.set_default_size(400, 400)

        # Set up drag and drop
#       self.connect("drag-motion", self.motion_cb)
#       self.connect("drag-drop", self.drop_cb)
        self.connect("drag-data-received", self.got_data_cb)
#       self.drag_dest_set(0, [], 0)
        self.drag_dest_set_target_list(None)
        self.drag_dest_add_text_targets()

#    def motion_cb(self, wid, context, x, y, time):
#        Gdk.drag_status(context,Gdk.DragAction.COPY, time)
#        return True

#    def drop_cb(self, wid, context, x, y, time):
#        wid.drag_get_data(context, context.list_targets()[-1], time)

    def got_data_cb(self, wid, context, x, y, data, info, time):
        if info == 0:
            text = data.get_text()
            datatype = data.get_target()

            print("Received text: %s" % text)
            print("Data type:     %s" % datatype)

        context.finish(True, False, time)

win = DragDropWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
...