0

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 を試してみると、すべて正常に動作します。

ご清聴ありがとうございました。どんな提案でも大歓迎です。

4

0 に答える 0