Wie man in Python ein App für SHR schreibt
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.