LINUX.ORG.RU

PyGTK сочетания клавиш

 , ,


0

1

Доброго времени суток. Пишу небольшую программку на питоне и gtk+ 3. Возникла необходимость сделать ряд горячих клавиш для нее. Подскажите пожалуйста как это можно реализовать? Попробовал сигналы button-press-event, button-release-event и keys-changed на основном GtkWindow не сработало.

★★

Последнее исправление: nuxster (всего исправлений: 1)

Ответ на: комментарий от Novator

Попробуй 'key-press-event' ('key-release-event') для главного окна.

OMG.

ТС, на будущее, дока по pygtk2 вполне актуальна и для gtk3. С точностью до названия классов. http://www.pygtk.org/docs/pygtk/class-gtkaccelmap.html

Но лучше всего просто просмотреть сишный reference, он почти один-в-один ложится на питон.

А вообще, я бы просто привязал accel group к главному окну и добавил шоткат туда.

anonymous
()
Ответ на: комментарий от nuxster

эти действия уже можно выполнить каким-либо иным способом, например через меню или кнопку тулбара?

если да - на нужный элемент вешаешь AccelKey и через GtkAccelMap можешь этим управлять - сбросить в файл, отредактировать его как нужно и подгружать при старте.

если нет, и данные действия уникальны, и должны выполняться только по горячим клавишам - создаешь AccelGroup, наполняешь его, как душе угодно и привязываешь к нужному GtkWindow

ananas ★★★★★
()
Ответ на: комментарий от Novator

Сделал так:

def get_key(self, widget, event):
        keyname = Gdk.keyval_name(event.keyval)
        return keyname

Получаю название клавиши. В принципе то, что нужно. Но как говорилось выше правильно ли это?

nuxster ★★
() автор топика
Ответ на: комментарий от nuxster

И я пока так и не разобрался как отловить сочетание клавиш а не клавиши по отдельности. :(

nuxster ★★
() автор топика
Ответ на: комментарий от nuxster

А как мне перехватить к примеру сочетание Ctrl+R или Ctrl+Shift?

Выводи в консольке коды при нажатии на нужные клавиши и разберешься.

как отловить сочетание клавиш а не клавиши по отдельности. :(

Гляди флаги в событии:
event.state.control_mask, event.state.mod1_mask и так далее.

Но как говорилось выше правильно ли это?

Там анонимус говорил. А у анонимуса репутация противоречивая, с сильными флуктациями в отрицательную сторону ))

Я практик, и щитаю что любая технология, к-я заставляет прогу работать с меньшими выкрутасами и большей скоростью, должна браться на вооружение :)

Novator ★★★★★
()
Последнее исправление: Novator (всего исправлений: 1)
Ответ на: комментарий от Novator

к-я заставляет прогу работать с меньшими выкрутасами

event.state.control_mask, event.state.mod1_mask и так далее.

Ок.

anonymous
()
Ответ на: комментарий от Novator

Спасибо я примерно так и сделал!

nuxster ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.