Как я могу программно показать / скрыть окно моего приложения с помощью глобальной комбинации клавиш?
Я пишу клон Notational Velocity для Gnome/Ubuntu, используя Quickly (PyGI), и я хочу позволить пользователям устанавливать глобальную комбинацию клавиш, которая будет переключать видимость окна приложения, когда приложение запущено (что-то вроде Tilda делает для его эмулятор терминала). Т.е. после запуска приложения пользователь может нажать F2, чтобы скрыть окно, а затем снова нажать F2, чтобы сделать его видимым и вывести его на передний план. Я не хочу использовать внешнее приложение горячих клавиш или что-либо, что требует настроек вне приложения. Как бы я пошел по этому поводу?
Здесь похожий вопрос: как я могу прослушать событие глобального нажатия клавиши? но главный ответ - это громоздкое непрограммное решение. Один комментатор упоминает "захват клавиатуры с помощью вызова X api", но я не уверен, с чего начать.
2 ответа
Библиотека Keybinder делает именно это. Если вы проверяете pull-запросы, то есть запросы на примеры, использующие pygi, один из которых я для py3k.
Я понимаю, что это внешняя настройка, а не в приложении, но я решил написать, как это сделать, поскольку не могу найти документацию в Интернете.
Недавно мне нужно было прочитать некоторые настройки compiz для моей программы, поэтому выяснить, как их изменить, было довольно просто. Вы можете программно установить настройки compiz в python, используя python-compizconfig. Я немного поиграл с этим, и вы можете установить значения следующим образом:
import compizconfig
context=compizconfig.Context()
commandplugin=context.Plugins['commands']
c0=commandplugin.Screen['command0']
c0.Value='xeyes'
key0=commandplugin.Screen['run_command0_key']
key0.Value='<Control><Primary>g'
context.Write() #Note that sometimes you have to pass False to get it to update settings
Вышеуказанный плагин команды compiz для запуска xeyes использует комбинацию клавиш control-g. Вам, вероятно, придется сделать проверку, чтобы убедиться, что плагин запущен (по умолчанию мой был отключен в ccsm). Обратите внимание, что для получения многих настроек вы можете использовать keys() функция для их перечисления (то есть) context.Plugins.keys()
Вот ссылка на код, который помог мне понять, как это работает, поскольку я не могу найти никакой документации: http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/compizconfig-python/precise/view/head:/src/compizconfig.pyx