Linuxでpygtkを使用してインターフェースを作成しています。私のプログラムを Windows (XP) で試してみると、非常に小さな小さな問題が発生しました。ばかげていますが、私は少し夢中になっていて、私の周りの何人かは誰かに話すべきだと言ったので、私はここにいます.
画像を含むいくつかの EventBox でドラッグ アンド ドロップを行っています。アイデアは、Pixbuf を介して EventBox のイメージにドラッグ アイコンを設定することです。Linux では set_icon_pixbuf に問題はなく、問題なく動作します。
Windows XP では (残念ながら最近のものはありません)、アイコンがカーソルのホットポイントを覆うと、ドロップが発生しなくなりました。回避策はありますか? 私はグーグルで似たようなものを見たことがないので、ここで運を試しています.
誰かが試してみたい場合は、この動作を再現するコード スニペットを作成しました。
import gtk
TARGET_TYPE_BT = 0
BUTTON = [('button', gtk.TARGET_SAME_APP, TARGET_TYPE_BT)]
def on_drag_begin(widget, context) :
context.set_icon_pixbuf(pixbuf, size / 2, size / 2)
def on_drag_data_get(widget, context, selec, targ, time) :
selec.set( selec.target, 8, widget.get_label())
def on_drag_data_received(widget, context, x, y, selec, targ, time) :
widget.set_label(selec.data)
size = 48
pixbuf = gtk.gdk.Pixbuf( gtk.gdk.COLORSPACE_RGB, True, 8, size, size)
pixbuf.fill(0xff7777ff)
buttons = [gtk.Button('Spam'), gtk.Button('Spam, spam, egg and spam')]
hbox = gtk.HBox(True)
for button in buttons :
button.connect('drag_begin', on_drag_begin)
button.connect('drag_data_get', on_drag_data_get)
button.connect('drag_data_received', on_drag_data_received)
button.drag_source_set(gtk.gdk.BUTTON1_MASK, BUTTON, gtk.gdk.ACTION_MOVE)
button.drag_dest_set(gtk.DEST_DEFAULT_ALL, BUTTON, gtk.gdk.ACTION_MOVE )
hbox.pack_start(button)
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.connect("destroy", lambda w: gtk.main_quit())
win.add(hbox)
win.show_all()
for button in buttons :
button.window.set_cursor(gtk.gdk.Cursor( gtk.gdk.HAND1 ))
gtk.main()
このコードでは、アイコンのサイズに予想外の相関関係があるようです。24 を試してみると、すべて正常に動作します。
ご清聴ありがとうございました。どんな提案でも大歓迎です。