Obwohl es das wahrscheinlich schon gibt (ich meine CrunchBang hätte sowas) hab ich ein kleines Programm geschrieben, das per GUI die Möglichkeit gibt den Bildschirm zu sperren (xscreensaver), die Openbox-Session zu beenden, den Rechner neuzustarten und selbigen herunterzufahren.

Edit: Mit dem neuen Update kommen (Dank an Army) Suspend und Hibernate dazu, es wird ConsoleKit statt HAL verwendet (dafür muss der WM in einer ck-session laufen) und die Befehle für Logout und Lock Screen sind einfacher anzupassen.

Edit2: Die neue Version erleichtert das Anpassen der Sprache, zusätzlich gibt es eine Möglichkeit das Fenster in den Tray zu minimieren bzw. direkt im Tray zu starten. Dafür wird das Programm mit "-background" , "-bg", "-back" oder "BG" als Parameter aufgerufen.
#!/usr/bin/env python

"""
This programm offers a GUI for several power-management options
such as shutdown, reboot, hibernate and suspend
as well as customizable lock-screen and logout commands
"""

import pygtk
pygtk.require( '2.0' )
import gtk

from os import system
from sys import argv

# Put your custom lock-screen command here
LOCK = "xscreensaver-command -lock"
# Put your WM's logout command here
LOGOUT = "openbox --exit"

# Language - In order to edit the langugage you can modify the second element of each sub-list. You can also edit the order but please keep shutdown the last (otherwise you will have to modify the code that highlights and focuses the shutdown button)
lang = [
	[ 'lock', 'Lock Screen' ],
	[ 'logout', 'Logout' ],
	[ 'suspend', 'Suspend' ],
	[ 'hibernate', 'Hibernate' ],
	[ 'reboot', 'Reboot' ],
	[ 'shutdown', 'Shutdown' ]
]
"""
# German
lang = [
	[ 'lock', 'Bildschirm sperren' ],
	[ 'logout', 'Logout' ],
	[ 'suspend', 'Ruhezustand (RAM)' ],
	[ 'hibernate', 'Ruhezustand (Disk)' ],
	[ 'reboot', 'Neustart' ],
	[ 'shutdown', 'Herunterfahren' ]
]
"""

# Functions that implement the basic functionality
def lock():
	system( LOCK )
	
def logout():
	system( LOGOUT )
	
def suspend():
	system( 'dbus-send --system --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Suspend' )
		
def hibernate():
	system( 'dbus-send --system --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Hibernate' )
	
def reboot():
	system( 'dbus-send --system --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart' )
		
def shutdown():
	system( 'dbus-send --system --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop' )
	
class ExitMenu:

	def delete_event( self, widget, event, data=None ):
		gtk.main_quit()
		return False
	
	def state_event( self, widget, event, data=None ):
		if event.changed_mask & gtk.gdk.WINDOW_STATE_ICONIFIED and event.new_window_state & gtk.gdk.WINDOW_STATE_ICONIFIED:
			self.window.hide()
			self.status.set_visible( True )
	
	def status_clicked( self, widget, data=None ):
		self.window.deiconify()
		self.window.show()
		self.status.set_visible( False )
	
	def action( self, widget, data=None ):
		if data == 'lock':
			lock()
		elif data == 'logout':
			logout()
		elif data == 'suspend':
			suspend()
		elif data == 'hibernate':
			hibernate()
		elif data == 'reboot':
			reboot()
		elif data == 'shutdown':
			shutdown()
		gtk.main_quit()
		
	def popup_menu( self, widget, button, time, data=None ):
		if data:
			data.show_all()
			data.popup( None, None, None, 3, time )
		
	def __init__( self ):
		self.window = gtk.Window( gtk.WINDOW_TOPLEVEL )
		self.window.set_title( "Exit" )
		self.window.connect( "delete_event", self.delete_event )
		self.window.connect( "window-state-event", self.state_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.menu = gtk.Menu()
		
		buttons = []
		for l in lang:
			# Button
			b = gtk.Button( l[1] )
			b.connect( 'clicked', self.action, l[0] )
			b.set_relief( gtk.RELIEF_NONE )
			b.show()
			self.box.pack_start( b, True, True, 0 )
			buttons.append( b )
			# MenuItem
			m = gtk.MenuItem( l[1] )
			m.connect( 'activate', self.action, l[0] )
			self.menu.append( m )
		
		# Modify shutdown-button
		buttons[-1].modify_bg( gtk.STATE_NORMAL, gtk.gdk.Color( '#FCC' ) )
		buttons[-1].set_relief( gtk.RELIEF_NORMAL )
		
		# Status Icon
		self.status = gtk.status_icon_new_from_stock( gtk.STOCK_QUIT )
		self.status.connect( 'activate', self.status_clicked )
		self.status.connect( 'popup_menu', self.popup_menu, self.menu )
		
		self.box.show()
		
		# Focus shutdown-button
		buttons[-1].grab_focus()
	
	
def main():
	gtk.main()
	
if __name__ == "__main__":
	em = ExitMenu()
   
	if len( argv ) > 1 and argv[1] in [ "-background" , "-bg", "-back", "BG"]:
		em.window.hide()
		em.status.set_visible( True )
	else:
		em.window.show()
		em.status.set_visible( False )
   	
	main()
Den Code könnt ihr verwenden, wie ihr lustig seid 😉

Aussehen tut das Ganze dann so:
Nicht schlecht.
Kevin D: schriebDen Code könnt ihr verwenden, wie ihr lustig seid 😉
Merci, werd mal versuchen, das für PekWM anzupassen.

Jean-Paul
Wenn du dein Programm mal anpassen willst, wenn die Ära von hal vorbei ist, dann kannst du folgende Kommandos benutzen

Runterfahren:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Neustarten:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
Suspend:
dbus-send --system --print-reply --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Suspend
Hibernate:
dbus-send --system --print-reply --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Hibernate
Natürlich gehen die Kommandos auch jetzt schon, vorausgesetzt es ist eine ConsoleKit-Session am laufen (in der .xinitrc brauchst dann ein exec ck-launch-session $WindowManager)
Army schriebWenn du dein Programm mal anpassen willst, wenn die Ära von hal vorbei ist, dann kannst du folgende Kommandos benutzen
[...]
Also ck-session is bei mir am laufen... Ich werd das mal anpassen und ausprobieren, danke 🙂
Coole Sache. Habs gleich mal bei mir "eingebaut"
Danke 🙂
Wieder mal ein Update, hoffe, dass es so besser ist 😉
Schöne Sache!

Ich habe leider keine Ahnung von Python, aber hättest du Lust einen Timer einzubauen?

Ich nutze das recht viel. Shutdown in 30 min und in der verbleibenen Zeit schnell einen Download fertig laden zu lassen oder noch schnell ein paar Dateien aufs Handy für den nächsten Tag kopieren, etc...

Man könnte das evtl. in Form eines Eingabefeldes realisieren, das standardmäßig auf 0 steht (Aktion sofort ausführen) und bei Bedarf die verbleibende Zeit in Minuten aufnimmt..
Denke, kann ich sehr gut gebrauchen. Das erleichtert mir das Herunterfahren, Neustarten etc. doch enorm 😉
@cl10k: Is ne gute Idee, wiederspricht allerdings nen bisschen der Einfachheit die das Ganze haben sollte... Ich könnte das allerdings als eigenständiges Programm entwickeln
cl10k schriebSchöne Sache!

Ich habe leider keine Ahnung von Python, aber hättest du Lust einen Timer einzubauen?

Ich nutze das recht viel. Shutdown in 30 min und in der verbleibenen Zeit schnell einen Download fertig laden zu lassen oder noch schnell ein paar Dateien aufs Handy für den nächsten Tag kopieren, etc...

Man könnte das evtl. in Form eines Eingabefeldes realisieren, das standardmäßig auf 0 steht (Aktion sofort ausführen) und bei Bedarf die verbleibende Zeit in Minuten aufnimmt..
Hab das mal umgesetzt (Integration in das eigentliche Programm folgt vllt. noch)
#!/usr/bin/env python

import pygtk
pygtk.require( '2.0' )
import gtk

from os import system
from time import sleep

# Put your custom lock-screen command here
LOCK = "xscreensaver-command -lock"
# Put your WM's logout command here
LOGOUT = "openbox --exit"

# Language - In order to edit the langugage you can modify the second element of each sub-list. You can also edit the order but please keep shutdown the last (otherwise you will have to modify the code that highlights and focuses the shutdown button)
lang = [
	[ 'lock', 'Lock Screen' ],
	[ 'logout', 'Logout' ],
	[ 'suspend', 'Suspend' ],
	[ 'hibernate', 'Hibernate' ],
	[ 'reboot', 'Reboot' ],
	[ 'shutdown', 'Shutdown' ]
]
"""
# German
lang = [
	[ 'lock', 'Bildschirm sperren' ],
	[ 'logout', 'Logout' ],
	[ 'suspend', 'Ruhezustand (RAM)' ],
	[ 'hibernate', 'Ruhezustand (Disk)' ],
	[ 'reboot', 'Neustart' ],
	[ 'shutdown', 'Herunterfahren' ]
]
"""

# Functions that implement the basic functionality
def lock():
	system( LOCK )
	
def logout():
	system( LOGOUT )
	
def suspend():
	system( 'dbus-send --system --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Suspend' )
		
def hibernate():
	system( 'dbus-send --system --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Hibernate' )
	
def reboot():
	system( 'dbus-send --system --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart' )
		
def shutdown():
	system( 'dbus-send --system --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop' )

class TimedExitGUI:

	def delete_event( self, widget, event, data=None ):
		gtk.main_quit()
		return False
		
	def action( self, widget, data=None ):
		time = self.spinTime.get_value_as_int()
		sleep( time )
		if data == 'lock':
			lock()
		elif data == 'logout':
			logout()
		elif data == 'suspend':
			suspend()
		elif data == 'hibernate':
			hibernate()
		elif data == 'reboot':
			reboot()
		elif data == 'shutdown':
			shutdown()
		gtk.main_quit()
		
	def __init__( self ):
		self.window = gtk.Window( gtk.WINDOW_TOPLEVEL )
		self.window.connect( "delete_event", self.delete_event )
		self.window.set_border_width( 20 )
		self.window.set_icon_name( 'exit' )
		self.window.set_position( gtk.WIN_POS_CENTER )
		self.window.set_title( "Timed Exit" )
		
		self.labelTime = gtk.Label( "Time" )
		self.labelTime.show()
		self.labelSeconds = gtk.Label( "s" )
		self.labelSeconds.show()
		
		self.spinTime = gtk.SpinButton(  gtk.Adjustment( 0, 0, 72000, 1, 10 ), 1, 0 )
		self.spinTime.set_alignment( 1.0 )
		self.spinTime.set_text( "0" )
		self.spinTime.show()
		
		self.boxH = gtk.HBox()
		self.boxH.pack_start( self.labelTime, False, False, 0 )
		self.boxH.pack_start( self.spinTime, False, False, 10 )
		self.boxH.pack_start( self.labelSeconds, False, False, 0 )
		self.boxH.show()
		
		self.sep = gtk.HSeparator()
		self.sep.show()
		
		self.boxButtons = gtk.HButtonBox()
		buttons = []
		for l in lang:
			# Button
			b = gtk.Button( l[1] )
			b.connect( 'clicked', self.action, l[0] )
			b.set_relief( gtk.RELIEF_NONE )
			b.show()
			self.boxButtons.pack_start( b, True, True, 0 )
			buttons.append( b )
		
		# Modify shutdown-button
		buttons[-1].modify_bg( gtk.STATE_NORMAL, gtk.gdk.Color( '#FCC' ) )
		buttons[-1].set_relief( gtk.RELIEF_NORMAL )
		
		self.boxButtons.show()
		
		self.boxV = gtk.VBox()
		self.boxV.pack_start( self.boxButtons, True, True, 0 )
		self.boxV.pack_start( self.sep, False, False, 10 )
		self.boxV.pack_start( self.boxH, True, True, 0 )
		self.boxV.show()
		
		self.window.add( self.boxV )
		self.window.show()
		
		# Focus shutdown-button
		buttons[-1].grab_focus()
		
		
def main():
	gtk.main()
	
if __name__ == "__main__":
	ts = TimedExitGUI()   	
	main()
Biddesehr 😉

(Auch hier gilt: Ihr dürft den Code verwenden wie ihr lustig seid...)
  • [gelöscht]

  • Bearbeitet
Super Service! Vielen Dank 🙂

Dürfte ich dich noch bitten den Timer in Minuten zu ändern? Eine Angabe in Sekunden macht hier eigentlich wenig Sinn.

Ansonsten schöne Sache!

Ich merke, es wird immer interessanter sich Python anzusehen. Nachdem die Klausuren vorbei sind, werde ich das mal in Angriff nehmen. Es ist teilweise sehr beeindruckend welche Tools die Community damit so zaubert....
cl10k schriebSuper Service! Vielen Dank 🙂

Dürfte ich dich noch bitten den Timer in Minuten zu ändern? Eine Angabe in Sekunden macht hier eigentlich wenig Sinn.

Ansonsten schöne Sache!

Ich merke, es wird immer interessanter sich Python anzusehen. Nachdem die Klausuren vorbei sind, werde ich das mal in Angriff nehmen. Es ist teilweise sehr beeindruckend welche Tools die Community damit so zaubert....
Also ich für meinen Teil kann dir Python nur empfehlen... Die Sprache ist einfach gut gemacht und es gibt fast alle Bibliotheken dies sonst meist nur für C gibt auch für Python bzw. sie lassen sich einfach anbinden.

Den Timer auf Minuten umzustellen könnte ja deine erste Übung sein (Ist kein großer Aufwand) 😉

Falls du das nicht selber machen möchtest:
#!/usr/bin/env python

import pygtk
pygtk.require( '2.0' )
import gtk

from os import system
from time import sleep

# Put your custom lock-screen command here
LOCK = "xscreensaver-command -lock"
# Put your WM's logout command here
LOGOUT = "openbox --exit"

# Language - In order to edit the langugage you can modify each second element. You can also edit the order but please keep shutdown the last (otherwise you will have to modify the code that highlights and focuses the shutdown button)
lang = [
	[ 'lock', 'Lock Screen' ],
	[ 'logout', 'Logout' ],
	[ 'suspend', 'Suspend' ],
	[ 'hibernate', 'Hibernate' ],
	[ 'reboot', 'Reboot' ],
	[ 'shutdown', 'Shutdown' ]
]
"""
# German
lang_ger = [
	[ 'lock', 'Bildschirm sperren' ],
	[ 'logout', 'Logout' ],
	[ 'suspend', 'Ruhezustand (RAM)' ],
	[ 'hibernate', 'Ruhezustand (Disk)' ],
	[ 'reboot', 'Neustart' ],
	[ 'shutdown', 'Herunterfahren' ]
]
"""

# Functions that implement the basic functionality
def lock():
	system( LOCK )
	
def logout():
	system( LOGOUT )
	
def suspend():
	system( 'dbus-send --system --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Suspend' )
		
def hibernate():
	system( 'dbus-send --system --dest="org.freedesktop.DeviceKit.Power" /org/freedesktop/DeviceKit/Power org.freedesktop.DeviceKit.Power.Hibernate' )
	
def reboot():
	system( 'dbus-send --system --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart' )
		
def shutdown():
	system( 'dbus-send --system --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop' )

class TimedExitGUI:

	def delete_event( self, widget, event, data=None ):
		gtk.main_quit()
		return False
		
	def action( self, widget, data=None ):
		time = self.spinTime.get_value_as_int()
		sleep( time * 60 )
		if data == 'lock':
			lock()
		elif data == 'logout':
			logout()
		elif data == 'suspend':
			suspend()
		elif data == 'hibernate':
			hibernate()
		elif data == 'reboot':
			reboot()
		elif data == 'shutdown':
			shutdown()
		gtk.main_quit()
		
	def __init__( self ):
		self.window = gtk.Window( gtk.WINDOW_TOPLEVEL )
		self.window.connect( "delete_event", self.delete_event )
		self.window.set_border_width( 20 )
		self.window.set_icon_name( 'exit' )
		self.window.set_position( gtk.WIN_POS_CENTER )
		self.window.set_title( "Timed Exit" )
		
		self.labelTime = gtk.Label( "Time" )
		self.labelTime.show()
		self.labelSeconds = gtk.Label( "min" )
		self.labelSeconds.show()
		
		self.spinTime = gtk.SpinButton(  gtk.Adjustment( 0, 0, 72000, 1, 10 ), 1, 0 )
		self.spinTime.set_alignment( 1.0 )
		self.spinTime.set_text( "0" )
		self.spinTime.show()
		
		self.boxH = gtk.HBox()
		self.boxH.pack_start( self.labelTime, False, False, 0 )
		self.boxH.pack_start( self.spinTime, False, False, 10 )
		self.boxH.pack_start( self.labelSeconds, False, False, 0 )
		self.boxH.show()
		
		self.sep = gtk.HSeparator()
		self.sep.show()
		
		self.boxButtons = gtk.HButtonBox()
		buttons = []
		for l in lang:
			# Button
			b = gtk.Button( l[1] )
			b.connect( 'clicked', self.action, l[0] )
			b.set_relief( gtk.RELIEF_NONE )
			b.show()
			self.boxButtons.pack_start( b, True, True, 0 )
			buttons.append( b )
		
		# Modify shutdown-button
		buttons[-1].modify_bg( gtk.STATE_NORMAL, gtk.gdk.Color( '#FCC' ) )
		buttons[-1].set_relief( gtk.RELIEF_NORMAL )
		
		self.boxButtons.show()
		
		self.boxV = gtk.VBox()
		self.boxV.pack_start( self.boxButtons, True, True, 0 )
		self.boxV.pack_start( self.sep, False, False, 10 )
		self.boxV.pack_start( self.boxH, True, True, 0 )
		self.boxV.show()
		
		self.window.add( self.boxV )
		self.window.show()
		
		# Focus shutdown-button
		buttons[-1].grab_focus()
		
		
def main():
	gtk.main()
	
if __name__ == "__main__":
	ts = TimedExitGUI()   	
	main()
Jetzt bin ich wunschlos glücklich - vielen Dank!

Ich werde mir Python auf jeden Fall ansehen, nur in den Semesterferien ist einfach keine Zeit dafür...

lg cl10k
Oh, look what i did 🙂

http://p.0x7be.de/i8vsgll6s/plain (Benutzt die Version von Kevin)

Damit kann man sehr einfach Übersetzungen anbieten, indem man sie einfach im home-Verzeichnis als .shutdown.lang ablegt. Beispiel:
[de]
lock = Bildschirm sperren
logout = Abmelden
suspend = Ruhezustand (RAM)
hibernate = Ruhezustand (HDD)
reboot = Neu starten
shutdown = System herunterfahren
title = Runterfahren, neu starten, oder Pausieren
time = Zeit
min = Min.

[fi]
lock = Lukitse näyttö
logout = Lirjautua ulos
suspend = Keskeyttää
hibernate = Lepotilaan
reboot = Uudelleenkäynnistä
shutdown = Seisokkia
title = Sammuttamisen ohjelmisto
time = Temne
min = min.
Im Programm selbst muss man einfach da, wo man auch den lock-PArameter definiert, die entsprechende Sprache, zum Beispiel fi angeben, um – hier – Finnisch zu bekommen.

Wenn was fehlt, wird stattdessen einfach die englische Entsprechung genommen.
5 Tage später
Ich habe das Programm (für meinen Gebrauch) noch ein bisschen angepasst.
Hibernate und Suspend habe ich in dieser Version rausgenommen, da ich sie nicht verwende, sie lassen sich aber ganz einfach ergänzen. Hinzugekommen sind Icons auf den Buttons. Die Icons könnt ihr natürlich selber bestimmen, ich schlage folgendes vor:
cp /usr/share/icons/Tango/22x22/actions/system-lock-screen.png lock.png
cp /usr/share/icons/Tango/22x22/actions/system-log.out.png logout.png
cp /usr/share/icons/Tango/22x22/actions/view-refresh.png reboot.png
Und für das Shutdown-Icon: http://www.iconfinder.net/icondetails/33844/128/ (auf 22x22 skalieren nicht vergessen 😉)
#!/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 __init__( self ):
		self.window = gtk.Window( gtk.WINDOW_TOPLEVEL )
		self.window.set_title( 'MyExit' )
		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()
	
Viel Spaß damit 😉
  • [gelöscht]

Super. Mein Vorschlag wäre noch einen Cancel Button zu ergänzen.
Gast schriebSuper. Mein Vorschlag wäre noch einen Cancel Button zu ergänzen.
Da hab ich auch schon drüber nachgedacht aber mir graut es irgendwie davor, den auf einer Ebene mit den "richtigen" Buttons zu setzen... Cancel geht bei mir, wenn nötig, mit Alt-F4 oder Rechtsklick auf das Icon in Tint2 😉
Kevin D. schriebIch habe das Programm (für meinen Gebrauch) noch ein bisschen angepasst.
Schade, dass du den Kram aus meinem Diff nicht mit eingebaut hast, so hätte das Programm jetzt nämlich nicht nur Icons, sondern auch i18n.
Dirk Sohler schrieb
Kevin D. schriebIch habe das Programm (für meinen Gebrauch) noch ein bisschen angepasst.
Schade, dass du den Kram aus meinem Diff nicht mit eingebaut hast, so hätte das Programm jetzt nämlich nicht nur Icons, sondern auch i18n.
Hmn ja tut mir Leid 🙁 Wie gesacht ich hab das für meinen persönlichen Gebrauch angepasst, da brauch ich kein i18n und wollte das so slim wie möglich halten. Wenn ich aber eine neue "Release"-Version mache, packe ich deinen Vorschlag aber auf jeden Fall mit rein 😉