我在linux下使用pygtk编写接口。在Windows(XP)下尝试我的程序时,我遇到了一个非常小的问题。这太荒谬了,但我有点痴迷,周围的一些人我应该和别人说话,所以我在这里。
我正在对包含图像的一些EventBox进行拖放操作。我们的想法是通过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,一切正常!
感谢您的关注。欢迎任何建议。