首页 > 解决方案 > 为什么我会在按钮按下事件中获得鼠标位置的小数值?

问题描述

我试图在我的应用程序中处理鼠标事件,但我不明白为什么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。这种行为的原因可能是什么?

标签: pythongtkgtk3pygtk

解决方案


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

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


推荐阅读