Daten|teiler
Kopieren als Kulturtechnik

Wie man in Python ein App für SHR schreibt

19. April 2011 von Christian Imhorst

Für Python-Fans bieten die beiden Module Python-Elementary und Python-Evas eine schnelle und einfache Möglichkeit, grafische Oberflächen für den Enlightenment-Fenstermanager E17 und damit auch für das OpenMoko Betriebssystem SHR zu schreiben. Wer damit unter E17 experimentieren möchte, für den sind die beiden Module in Debian Sid (Unstable) bzw. in Experimental enthalten und unter Ubuntu ab 10.10 Maverick Meerkat, bzw. ab Linux Mint 10. In SHR sind sie schon dabei.

Für eine erste Hallo-Welt-Gui habe ich mich an das Elementary-Beispiel im Wiki von Enlightenment gehalten, das in C geschrieben ist, bzw. an das Beispiel im Wiki von SHR, das allerdings in VALA geschrieben wurde.

#!/usr/bin/python
#
# Example for a GUI written with Python-Elementary.
 
import elementary
import evas
 
class HelloWorldGui(object):
 
	def destroy(self, obj):
		# quit the window (mainloop)
		elementary.exit()
 
	def __init__(self):
		elementary.init()
 
		# new window - do the usual and give it a name, title and delete handler
		self.win = elementary.Window("HelloWorld", elementary.ELM_WIN_BASIC)
		self.win.title_set("Hello")
		# when the user clicks "close" on a window:
		self.win.callback_destroy_add(self.destroy)
 
		# add a standard background
		self.bg = elementary.Background(self.win)
		self.win.resize_object_add(self.bg)
		# do not allow bg to expand
		self.bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# add object as a resize object for the window
		self.win.resize_object_add(self.bg);
		self.bg.show()
 
		# add a box object - default is vertical. a box holds children 
		# in a row, either horizontally or vertically. nothing more.
		self.mainBox = elementary.Box(self.win)
		# do not allow box to expand
		self.mainBox.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# add object as a resize object for the window
		self.win.resize_object_add(self.mainBox)
		self.mainBox.show()
 
		# add a label widget 
		self.lbl = elementary.Label(self.win)
		# set text of the label
		self.lbl.label_set("Hello World!")
		# do not allow label to expand 
		self.lbl.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# pack the label at the end of the box 
		self.mainBox.pack_end(self.lbl)
		self.lbl.show()
 
		# add a quit button
		self.btnquit = elementary.Button(self.win)
		# set label for button
		self.btnquit.label_set("Quit")
		# do not allow button to expand 
		self.btnquit.size_hint_align_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# pack the button at the end of the box
		self.mainBox.pack_end(self.btnquit)
		# when button is clicked
		self.btnquit.callback_clicked_add(self.destroy)
		self.btnquit.show()
 
		# size of the window
		self.win.resize(150,80)
		# now we are done, show the window
		self.win.show()
 
		# run the mainloop
		elementary.run()
		elementary.shutdown()	
 
# endof class HelloWorldGui
 
gui = HelloWorldGui()

Die Datei habe ich dann auf das OpenMoko kopiert und dort im Terminal ausgeführt. Das Ergebnis sieht zwar nicht sehr schön aus, kann sich aber sehen lassen.

Geschrieben in Gnu/Linux, Python, SHR