Python 鼠标悬停时绘制图像部分

2 投票
1 回答
575 浏览
提问于 2025-04-15 19:44

我的问题和Python GTK有关。

我有一张图片,是JPG格式的,我想把它画到一个绘图区域上。我想要在鼠标指针所在的位置显示出一部分图片,比如说一个10像素乘10像素的正方形。鼠标周围10像素乘10像素的区域以外的地方都应该隐藏,也就是显示成黑色。

我对PyGtk还很陌生,请问有人能帮我吗?

谢谢!

1 个回答

2
#!/usr/bin/python                                      

import os
import sys
import gtk

MASK_COLOR = 0x000000

def composite(source, start_x=345, start_y=345):
  width = 50                                    
  height  = 50                                  
  alpha = 255                                   
  dest = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8 ,800,800)
  dest.fill(MASK_COLOR)                                           
  source.composite(dest,                                          
                   start_x,                                       
                   start_y,
                   width,
                   height,
                   0,
                   0,
                   1,
                   1,
                   gtk.gdk.INTERP_NEAREST,
                   alpha)

  return dest


def it_moved(widget, event, window, masked, original):
  r = window.get_display().get_window_at_pointer()
  masked.set_from_pixbuf(composite(original.get_pixbuf(), r[1], r[2]))
  return True


if __name__ == '__main__':
  window = gtk.Window()
  eb = gtk.EventBox()
  original = gtk.Image()
  original.set_from_file(sys.argv[1])

  masked = gtk.Image()
  masked.set_from_pixbuf(composite(original.get_pixbuf()))

  eb.add(masked)
  eb.set_property('events', gtk.gdk.POINTER_MOTION_MASK)
  eb.connect('motion_notify_event', it_moved, window, masked, original)
  window.add(eb)
  window.set_size_request(800,800)
  window.show_all()
  gtk.main()

这个代码应该能做到你所描述的效果。我选择展示一个50x50的区域,因为你原来的区域有点小,不太容易在指针下看清楚。我也没有把这个区域隐藏起来。

撰写回答