2013-05-17 4 views
2

Я хочу сделать быстрые клавиши, такие как t, которые будут работать, когда главное окно будет закрыто (но процесс запущен, так как программа имеет единицу appindicator). Я видел пакет keybinder, но, похоже, его нельзя использовать с Gtk3 и pygobject. Или может? Тогда как? Если нет, есть ли другой способ сделать это? Приложение для linux (ubuntu), я использую python 2.7.Как сделать глобальные быстрые клавиши с помощью python (и Gtk3)?

+0

добавлено примечание, оно отлично работает и для 2.7, я просто не хочу загромождать свой диск. я держу 2,7 довольно нетронутыми и делаю все, что стоит делать на py3k. – RobotHumans

ответ

4

Keybinder отлично работает с python3, Gtk3 и pygi. В исходном дереве просто не было рабочего примера.

#!/usr/bin/env python3 
""" 
example-gi-py3.py 

Looked at a pull request that was built for py2.x, but 
overwrote the original py instead of making a separate example. 
I wouldn't have accepted that pull request either. 

The keybinder.init() part wasn't in the original example. 

[email protected] 

public domain 
""" 

import gi 
gi.require_version('Gtk', '3.0') 
gi.require_version('Keybinder', '3.0') 

from gi.repository import Gtk 
from gi.repository import Keybinder 

def callback(keystr, user_data): 
    print ("Handling", user_data) 
    print ("Event time:", Keybinder.get_current_event_time()) 
    Gtk.main_quit() 

if __name__ == '__main__': 
    keystr = "<Ctrl><Alt>M" 
    Keybinder.init() 
    Keybinder.bind(keystr, callback, "keystring %s (user data)" % keystr) 
    print ("Press", keystr, "to handle keybinding and quit") 
    Gtk.main() 

Примечания: Не тщательно протестированы, но в качестве простого примера, кажется, работает.

+0

Добавленное примечание, я вложил запрос на перенос на github с этим примером, который не шел по исходному примеру. Может быть, это затянется. – RobotHumans

0

Я использую также Keybinder активировать поле ввода поиска в приложении GTK3:

from gi.repository import Keybinder 
… 
    class MyApp: 
    … 
     Keybinder.init() 
     Keybinder.bind("<Ctrl>F", self.set_search_entry_focus) 
… 
    def set_search_entry_focus(self, keystring): 
     self.search_entry.grab_focus() 

http://lazka.github.io/pgi-docs/Keybinder-3.0/

Но знайте, это будет также перехватывать фокус, если если вы используете другое приложение и приложение работает в фоновом режиме.

Смежные вопросы