System Tray in Python mit GTK


Green Tree Python
Attribution-NonCommercial-ShareAlike License by Sebastian Niedlich (Grabthar)

Im Moment beschäftige ich mich ein wenig mit Python und GTK.  GTK kenn ich schon ein wenig länger, aber Python programmiere ich erst seit einer Woche und ich muß sagen, es macht wirklich Spaß und produziert im Gegensatz zu Perl sehr gut lesbaren Code:)

Nun schreibe ich gerade ein kleines Notizbuch, dass auch einen Platz im System Tray haben soll. Also mal in der GTK Referenz irgendwas in der Richtung Window.visible() gesucht aber Fehlanzeige.

Da ich auch durch googlen nichts manierliches gefunden habe hier meine kleine Interpretation des Problems in Python. HF:)

#!/usr/bin/env python

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

class PythonTray:
	def __init__(self,
			icon,		#Pfadangabe zu einem Bild (String)
			tooltip,	#Tooltiptext (String)
			event_handler	#Eventhandler fuer das Trayzeichen mitgeben
			):
		"""
		Erzeugt das Trayicon
		"""
		tray_object = egg.trayicon.TrayIcon(tooltip)
		tray_object.set_tooltip_text(tooltip)
		#bild laden + skalieren
		image_widget = gtk.Image();
		pixbuf = gtk.gdk.pixbuf_new_from_file(icon)
		scaled_buf = pixbuf.scale_simple(32,32,gtk.gdk.INTERP_BILINEAR)
		image_widget.set_from_pixbuf(scaled_buf)

		event_box = gtk.EventBox()
		event_box.add(image_widget)
		event_box.connect('button_press_event', event_handler)
		tray_object.add(event_box)
		tray_object.show_all()

	def showWindow(self,
		"""
		Blendet ein Fenster ein und aus
		"""
			window	#handle fuer's Fenster
			):

		if not(window.is_active()):
			window.show_now()
			window.present()
		else:
			window.hide()

class Trayexample:
	tray = PythonTray
	#kill den shit
	def destroy(self, widget, data=None):
		gtk.main_quit()

	###delete event ueberschreiben
	def delete_event(self, widget, event, data =None):
		self.window.hide()
		return True

	def applet_face_click(self, window, event, *data):
		if event.button ==1:
			#haesslich
			self.tray.showWindow(window=self.window)
			#self.showWindow()
		if event.button ==3:
			self.destroy(self.window)

	def __init__(self):	#Konstruktor
		#neues Fenster erzeugen
		self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
		self.window.connect("delete_event", self.delete_event)	###Das X wird ignoriert :)
		self.window.set_size_request(640,480)		###fenstergroesse
		self.window.set_title('SystemTray Example')
		self.window.connect("destroy", self.destroy)
		self.window.set_icon_from_file('/usr/share/icons/gnome/scalable/apps/im-aim.svg')
		#Tray Krams
		self.tray= PythonTray ("/usr/share/icons/gnome/scalable/apps/im-aim.svg","MyTray",self.applet_face_click)
		#self.window.show()

	def main(self):

		gtk.main()

if __name__ == "__main__"	:
	hello = Trayexample()
	hello.main()

hier kann das Skript runterladen

Reblog this post [with Zemanta]
Advertisements
Dieser Beitrag wurde unter python, schlaue tipps für dein Leben abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s