Gtk: Как определить положение мыши над EventBox? - PullRequest
1 голос
/ 03 ноября 2019

Я пытался написать простое приложение САПР на Python. Я возился с pyglet, получил некоторые результаты: simple CAD app with pyglet, но я решил вернуться к Gtk и ударил по стене:

Я не могу получить указатель мышиповерх EventBox (с pyglet это была метка в левом нижнем углу окна приложения на картинке). Какой сигнал предназначен для этого? Или я должен использовать другой подход?

Я буду признателен за любую информацию или ресурсы. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 04 ноября 2019

Вопрос : Как определить положение мыши над EventBox?

У Gtk.EventBox должен был быть флаг, а не окно!

box = Gtk.EventBox()
box.connect("motion-notify-event", self.on_mouse_move)
box.add_events(Gdk.EventMask.POINTER_MOTION_MASK)
0 голосов
/ 04 ноября 2019

С помощью stovfl решение было достигнуто. Приложение a simple CAD in python/gtk состояло из области рисования, рамки, поля событий и метки для отображения координат указателя мыши. Область рисования была добавлена ​​в поле, поле было добавлено в рамку, которая была добавлена ​​в сетку.

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)

Решение было:

  1. Добавить POINTER_MOTION_MASKк окну события: box.add_events(Gdk.EventMask.POINTER_MOTION_MASK).
  2. Соедините motion-notify-event коробки с методом, который считывал и обновлял метку (левый нижний угол; она была выровнена по self.locationLabel.set_alignment(0, 0)).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...