为什么我在按钮按下事件中得到鼠标位置的分数值?
Why do I get fractional values for mouse position in button-press-event?
我试图在我的应用程序中处理鼠标事件,但我不明白为什么我的事件中的 x
和 y
是小数(我希望鼠标位置包含整数)。
我用来测试的简单应用程序:
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()
舍入事件坐标以与像素网格对齐。
我试图在我的应用程序中处理鼠标事件,但我不明白为什么我的事件中的 x
和 y
是小数(我希望鼠标位置包含整数)。
我用来测试的简单应用程序:
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()
舍入事件坐标以与像素网格对齐。