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

发布于 2024-08-23 08:12:25 字数 184 浏览 1 评论 0原文

我的问题与 Python GTK 有关

我有一个图像 -a JPG - 我将其绘制到绘图区域。我想显示图像的一部分 - 例如 10 像素 x 10 像素的正方形 - 仅显示鼠标指针当前所在的位置。距鼠标 10 x 10 像素平方的所有内容都应隐藏,即黑色。

我是 PyGtk 的新手,有人可以帮忙吗?

谢谢

My question relates to Python GTK

I have an image -a JPG - which I draw onto a drawing area. I want to reveal a portion of the image -say a 10pix by 10 px square -only where the mouse pointer is currently at. Everything 10 x 10 px square away from the mouse should hidden i.e. black.

I'm am new to PyGtk please can anyone help?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柳若烟 2024-08-30 08:12:25
#!/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 的区域,因为您的区域太小,无法在指针下方看到。我也没有隐瞒这一点。

#!/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()

This should do something like you describe. I chose to show a 50x50 area since yours was kinda small to see under the pointer. I didn't hide that either.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文