0

我正在linux下使用pygtk编写接口。在 Windows (XP) 下尝试我的程序时,我遇到了一个非常微小的小问题。这很荒谬,但我有点着迷了,我周围的一些人认为我应该和某人谈谈,所以我来了。

我正在对一些包含图像的事件框进行拖放。想法是通过 Pixbuf 将拖动图标设置为 EventBox 中的 Image。在 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