PyGObject Tips 書き直しもやっと最後の項目になった。
そのドラッグアンドドロップについてチマチマ調べている。
とりあえず文字列のドロップを追加することに、したんだけど。
ようするに Gedit 等で文字列選択してドラッグしたもののことね。
下記コメントアウトが昔書いたやり方です。
#!/usr/bin/env python3 import sys, gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GLib#, Gdk class Win(Gtk.ApplicationWindow): ''' TreeView ''' def __init__(self, app): Gtk.ApplicationWindow.__init__(self, application=app, title='Py') # DnD ''' uri = Gtk.TargetEntry.new('text/uri-list', 0, 0) plain = Gtk.TargetEntry.new('text/plain', 0, 0) self.drag_dest_set( Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP, [uri, plain], Gdk.DragAction.COPY ) ''' self.drag_dest_add_uri_targets() self.drag_dest_add_text_targets() ###self.drag_dest_add_image_targets() # self.label = Gtk.Label(label='Please drop your files') self.add(self.label) self.show_all() def do_drag_data_received(self, context, x, y, data, info, time): ''' data: GtkSelectionData ''' #print(data.targets_include_text()) # All False name = data.get_data_type().name() self.props.title = name #if name == 'text/plain': if name == 'UTF8_STRING': s = data.get_text() self.label.set_text(s) elif name == 'text/uri-list': uris = data.get_uris() l = [] for uri in uris: fn = GLib.filename_from_uri(uri)[0] l.append(GLib.path_get_basename(fn)) self.label.set_text('\n'.join(l)) else: self.label.set_text(name) class App(Gtk.Application): def __init__(self): Gtk.Application.__init__(self) def do_startup(self): Gtk.Application.do_startup(self) Win(self) def do_activate(self): self.props.active_window.present() app = App() app.run(sys.argv)
えぇ。。。
gtk_drag_dest_add_text_targets を指定するだけだった。
てか UTF8_STRING という ContentType があったんだ、知らなかった。
新しいのかと思ったら GTK+2.6 からみたい、何故知らなかったんだ俺!
gtk_selection_data_targets_include_text は何をやっても False だ。
上記手段で判別はできるけど、この関数っていったい何なんだろう?
gtk_drag_dest_add_image_targets は簡単に試す手段が無かった。
だいたい使い方は解るので Tips ページを作る時に。
今週こそ終わらせなきゃ、おかげで mac 関連が完全に止まっているし。
macOS がバージョンアップする前にさわっておきたい。