例:
空き地で設計されたウィンドウにファイルをドロップすると、Handler.open_from_path(path)がトリガーされます
ウィンドウの「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()
テスト済みで機能的。