<p>在<strong>stovfl</strong>的帮助下,解决了这个问题。
应用程序
<a href="https://i.stack.imgur.com/ZNCZP.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZNCZP.png" alt="a simple CAD in python/gtk"/></a>
由绘图区域、框架、事件框和标签组成,用于显示鼠标指针坐标。绘图区域被添加到长方体,长方体被添加到框架,框架被添加到栅格。你知道吗</p>
<pre><code>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)
</code></pre>
<p>解决方案是:</p>
<ol>
<li>将<code>POINTER_MOTION_MASK</code>添加到事件框:<code>box.add_events(Gdk.EventMask.POINTER_MOTION_MASK)</code>。你知道吗</li>
<li>用一个方法连接方框的<code>motion-notify-event</code>,该方法读取并更新一个标签(在左下角;它与<code>self.locationLabel.set_alignment(0, 0)</code>对齐)。你知道吗</li>
</ol>