为什么我在按钮按下事件中得到鼠标位置的分数值?

Why do I get fractional values for mouse position in button-press-event?

我试图在我的应用程序中处理鼠标事件,但我不明白为什么我的事件中的 xy 是小数(我希望鼠标位置包含整数)。

我用来测试的简单应用程序:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk

class Example(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self)
        self.set_default_size(800, 600)

        drawing_area = Gtk.DrawingArea();
        drawing_area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK)
        drawing_area.connect("button-press-event", self.handle_image_click)
        self.add(drawing_area)

    def handle_image_click(self, widget, event):
        print("click", event.x, event.y)

win = Example()
win.show_all()
Gtk.main()

示例输出:

click 734.751708984375 306.2582092285156
click 631.0667114257812 416.09857177734375
click 435.015625 462.9517822265625

我正在使用 Gtk 3.24.20 和 python-gobject 3.36.1。这种行为的原因可能是什么?

事件坐标来自窗口系统,窗口系统可以为指针坐标提供亚像素精度。此外,GTK 将规范化事件坐标以处理 HiDPI 比例因子,这意味着即使物理坐标没有,逻辑位置也可能具有小数部分。

如果需要,您可以使用 floor()ceil() 舍入事件坐标以与像素网格对齐。