Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Gtk:如何检测EventBox上的鼠标位置?_Python_Gtk - Fatal编程技术网

Python Gtk:如何检测EventBox上的鼠标位置?

Python Gtk:如何检测EventBox上的鼠标位置?,python,gtk,Python,Gtk,我一直在尝试用Python编写简单的CAD应用程序。我在修补pyglet,得到了一些结果:,但我决定切换回Gtk,我撞到了墙: 我无法获取EventBox上的鼠标指针位置(对于pyglet,它是图片中窗口应用程序左下角的标签)。为它设计了什么信号?或者我应该使用另一种方法 我将非常感谢您提供的任何信息或资源。提前谢谢 问题:如何检测EventBox上的鼠标位置 Gtk.EventBox小部件是Gtk.Bin的一个子类,它也有自己的窗口。它非常有用,因为它允许您捕获没有自己窗口的小部件的事件

我一直在尝试用Python编写简单的CAD应用程序。我在修补pyglet,得到了一些结果:,但我决定切换回Gtk,我撞到了墙:

我无法获取EventBox上的鼠标指针位置(对于pyglet,它是图片中窗口应用程序左下角的标签)。为它设计了什么信号?或者我应该使用另一种方法

我将非常感谢您提供的任何信息或资源。提前谢谢

问题:如何检测EventBox上的鼠标位置

  • Gtk.EventBox
    小部件是
    Gtk.Bin
    的一个子类,它也有自己的窗口。它非常有用,因为它允许您捕获没有自己窗口的小部件的事件

  • 将位字段
    events
    中的
    events
    添加到
    self
    的事件掩码中

  • 一组位标志,用于指示窗口将接收哪些事件

    • 指针(通常是鼠标)已移动
Gtk.EventBox
应该有标志,而不是窗口

box = Gtk.EventBox()
box.connect("motion-notify-event", self.on_mouse_move)
box.add_events(Gdk.EventMask.POINTER_MOTION_MASK)

stovfl的帮助下,解决方案得以实现。 应用程序 由绘图区域、框架、事件框和标签组成,用于显示鼠标指针坐标。绘图区域添加到长方体,长方体添加到框架,框架添加到栅格

from gi.repository import Gtk
from gi.repository import Gdk
# (...)
    box = Gtk.EventBox()
    box.add_events(Gdk.EventMask.POINTER_MOTION_MASK)  # 1
    box.connect("button-press-event", self.on_click)
    box.connect("motion-notify-event", self.on_mouse_move)  # 2
    self.canvas = Gtk.DrawingArea()
    self.canvas.connect("draw", self.on_draw)
    self.canvas.set_size_request(800, 600)
    box.add(self.canvas)
    grid = Gtk.Grid()
    frame = Gtk.Frame()
    frame.set_label("KHAD")
    frame.add(box)
    grid.attach(frame, 0, 1, 1, 1)
    self.add(grid)
    # (...)
    self.locationLabel = Gtk.Label("X,Y")
    self.locationLabel.set_alignment(0, 0)
    grid.attach(self.locationLabel, 0, 2, 1, 1)
解决办法是:

  • 指针\u运动\u掩码
    添加到事件框:
    框。添加事件(Gdk.EventMask.POINTER\u运动\u掩码)
  • 使用读取和更新标签(左下角;它与
    self.locationLabel.set\u alignment(0,0)
    )的方法连接框的
    motion notify event

  • 编辑的可能重复:我正在python中寻找解决方案在我找到的“可能重复”中,我设置了连接:
    box.connect(“motion notify event”,self.on\u move)
    ,但它只在单击区域时起作用。剩下的问题:如何用python在方框上设置
    GDK\u指针\u运动\u掩码
    ?让我们来看看。