Also, ich habe die Sache mit dem Escape-Key mal eingefügt, jetzt müsste es für jeden ein Leichtes sein weitere Shortcuts einzubauen (falls nötig).
Folgende Änderungen habe ich dafür vorgenommen ( die mit #<<<<<< markierten Zeilen sind neu, falls keine markiert sind ist der ganze Block neu):
def catch_button( self, window, event, data=None ):
keyval = event.keyval
#Escape
key_esc = gtk.gdk.keyval_from_name( 'Escape' )
if keyval == key_esc:
gtk.main_quit()
self.window.set_title( 'MyExit' )
self.window.connect( 'key-press-event', self.catch_button ) #<<<<<<
self.window.connect( 'delete_event', self.delete_event )
Ja ich weiß, ich sollte mir git/hg/irgwas angucken... Bald...
Wer mehr Infos zu den Keyboard-Geschichten braucht, mir hat diese Seite geholfen:
http://www.islascruz.org/html/index.php/blog/show/Pygtk:-About-keyboard-accelerators.html
Insgesamt sieht meine Version jetzt so aus:
#!/usr/bin/env python
import pygtk
pygtk.require( '2.0' )
import gtk
from os import system, path
from sys import argv
LOCK = 'xscreensaver-command -lock'
LOGOUT = 'openbox --exit'
REBOOT = 'dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart'
SHUTDOWN = 'dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop'
class MyExit:
def delete_event( self, widget, event, data=None ):
gtk.main_quit()
return False
def action( self, widget, data=None ):
if data == 'lock':
system( LOCK )
gtk.main_quit()
elif data == 'logout':
system( LOGOUT )
elif data == 'reboot':
system( REBOOT )
elif data == 'shutdown':
system( SHUTDOWN )
return False
def catch_button( self, window, event, data=None ):
keyval = event.keyval
#Escape
key_esc = gtk.gdk.keyval_from_name( 'Escape' )
if keyval == key_esc:
gtk.main_quit()
def __init__( self ):
self.window = gtk.Window( gtk.WINDOW_TOPLEVEL )
self.window.set_title( 'MyExit' )
self.window.connect( 'key-press-event', self.catch_button )
self.window.connect( 'delete_event', self.delete_event )
self.window.set_border_width( 20 )
self.window.set_decorated( False )
self.window.set_icon_name( 'exit' )
self.window.set_keep_above( True )
self.window.set_position( gtk.WIN_POS_CENTER )
self.box = gtk.HButtonBox()
self.box.set_spacing( 10 )
self.window.add( self.box )
self.box.show()
self.buttons = {}
here = path.dirname( argv[0] )
self.buttons['lock'] = gtk.Button( 'Lock Screen' )
self.buttons['lock'].connect( 'clicked', self.action, 'lock' )
self.buttons['lock'].set_image( gtk.image_new_from_file( path.join( here, 'lock.png' ) ) )
self.buttons['lock'].set_relief( gtk.RELIEF_NONE )
self.box.pack_start( self.buttons['lock'], True, True, 0 )
self.buttons['logout'] = gtk.Button( 'Logout' )
self.buttons['logout'].connect( 'clicked', self.action, 'logout' )
self.buttons['logout'].set_image( gtk.image_new_from_file( path.join( here, 'logout.png' ) ) )
self.buttons['logout'].set_relief( gtk.RELIEF_NONE )
self.box.pack_start( self.buttons['logout'], True, True, 0 )
self.buttons['reboot'] = gtk.Button( 'Reboot' )
self.buttons['reboot'].connect( 'clicked', self.action, 'reboot' )
self.buttons['reboot'].set_image( gtk.image_new_from_file( path.join( here, 'reboot.png' ) ) )
self.buttons['reboot'].set_relief( gtk.RELIEF_NONE )
self.box.pack_start( self.buttons['reboot'], True, True, 0 )
self.buttons['shutdown'] = gtk.Button( 'Shutdown' )
self.buttons['shutdown'].connect( 'clicked', self.action, 'shutdown' )
self.buttons['shutdown'].modify_bg( gtk.STATE_NORMAL, gtk.gdk.Color( '#FCC' ) )
self.buttons['shutdown'].set_image( gtk.image_new_from_file( path.join( here, 'shutdown.png' ) ) )
self.box.pack_start( self.buttons['shutdown'], True, True, 0 )
for key, button in self.buttons.items():
button.show()
self.window.show()
self.buttons['shutdown'].grab_focus()
def main():
gtk.main()
if __name__ == "__main__":
exit = MyExit()
main()