Есть ли простой способ с Pygi сделать целое окно мишенью для внешнего ввода?

Пример:
Перетащите файл в разработанное для поляны окно, и оно вызовет Handler.open_from_path (path)

2
задан 14 July 2012 в 01:29

1 ответ

Установите для своего окна "main_win" виджет обратного вызова drag_data_received значение on_main_win_drag_data_received. URI напечатан в строке состояния.

from gi.repository import Gtk, Gdk

builder = Gtk.Builder()
builder.add_from_file("assets/ui/design.glade")

class UI():
    def __init__(self):
        #get window
        self.window = builder.get_object("main_win")
        #add drop target
        self.window.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.COPY)
        self.window.drag_dest_add_uri_targets()
        self.window.set_title("Main Window")
        #show the window
        self.window.show_all()

#get an instance of the gui specific code
ui = UI()

class Worker():
    """
    Real worker code
    """

#get a worker instance
worker = Worker()

def log(uri):
    status = builder.get_object("status_bar")
    context = status.get_context_id('')
    status.pop(context)
    status.push(context, uri.rstrip())

class Handler():
    """
    Gtk callback handlers
    """
    def on_main_win_delete_event(self, *args, **kwds):
        Gtk.main_quit()
    def on_main_win_drag_data_received(self, widget, drag_context, x, y, data, info, time):
        log(data.get_data())

#connect handlers
builder.connect_signals(Handler())

if __name__ == '__main__':
    Gtk.main()

Проверено и работоспособно.

0
ответ дан 14 July 2012 в 01:29

Другие вопросы по тегам:

Похожие вопросы: