Обработка событий GDK без GTK - PullRequest
3 голосов
/ 23 июня 2011

Я программирую (на python) GDK без GTK, просто как абстракцию x11. ЭТО ПОЧТА МОЙ ПОСЛЕДНИЙ ШАНС.

Моя проблема в том, что я не знаю, как захватить сигналы / события окна GDK или как их зовут.

Когда я делаю:

window = gdk.Window(
            gdk.get_default_root_window(),
            width=400,
            height=200,
            window_type=gdk.WINDOW_CHILD,
            wclass=gdk.INPUT_OUTPUT,
            event_mask=gdk.KEY_PRESS_MASK | gdk.MOTION_NOTIFY | gdk.EXPOSURE_MASK)

window.connect("key_press_event", on_key)

Я получаю:

unknown signal name: key_press_event

Ссылки GTK и PYGTK говорят о классах, функциях и константах, но ничего не говорят об их взаимосвязи, поэтому они не помогают. Это о главном цикле glib?

Мне нужно несколько примеров. Любой хороший учебник GDK или исходный код? Какой-нибудь пример glib.MainLoop для захвата сигналов GDK?

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 февраля 2012

Вы можете использовать gdk_event_handler_set для установки обработчика событий (который также является функцией, используемой gtk).Не знаю, какую привязку Python вы используете, но я думаю, вы легко найдете соответствующую функцию Python.(В gi это просто Gdk.Event.handler_set)

Вы можете проверить здесь для примера (есть также неблокированный пример).Хотя они в с.

1 голос
/ 24 июня 2011

Вы пытаетесь подключиться к key-press-event, который является gtk.Widget сигналом. gdk.Window не наследуется от gtk.Widget, поэтому у него нет этого сигнала.

В документации GTK маленькие разделы вверху с надписью «Иерархия объектов» рассказывают, как классы связаны друг с другом. В действительности нет такого понятия, как учебник по GDK, так как вряд ли кто-нибудь использует его без GTK Я не думаю, что это тоже очень полезно. Возможно, вы можете уточнить, чего вы пытаетесь достичь?

...