Εργάζομαι στην υλοποίηση μιας δραστηριότητας (activity) για το xo-laptop (
http://wiki.laptop.org/go/OLPC_Greece ).
Παρακάτω παραθέτω τον κώδικα ενός από τα αρχεία που αποτελούν την εφαρμογή-δραστηριότητα.
Το αρχείο αυτό περιέχει όλα GUI objects (κουμπιά, πλαίσια κειμένου, φωτογραφίες, κτλ.) καθώς και τον κώδικα που τα διαχειρίζεται όλα αυτά.
Το xo-laptop διαθέτει linux fedora. Και χρησιμοποιεί σαν γραφικό περιβάλλον το sugar (
http://translate.flossmanuals.net/Sugar_el/Introduction ).
Όταν τρέχω την εφαρμογή στο olpc (xo-laptop) με κωδικοποίηση utf-8 όλα είναι εντάξει εκτός από το ότι δεν μπορεί να διαχειριστεί τα strings σαν πίνακες.
Δηλαδή την λέξη "ΒΌΤΑΝΟ" την αναγνωρίζει ΚΑΙ την προβάλει, ΑΛΛΆ δεν μπορεί να λειτουργήσει το παιχνίδι (πρόκειται για το γνωστό παιχνίδι Κρεμάλα)
όταν πρέπει να τσεκάρει ξεχωριστά κάθε γράμμα της λέξης. Όταν δηλαδή πρέπει να καλέσει το (lexi="ΒΌΤΑΝΟ") lexi[0] ή lexi[1] κτλ.
Γι αυτό αποφάσισα να χρησιμοποιήσω κωδικοποίηση iso8859-7. Αλλά με αυτή δεν μου εμφανίζει τους χαρακτήρες στην οθόνη.
Θέλω να τονίσω ότι δεν μου τους εμφανίζει το SUGAR!! και όχι το γενικά το laptop!! Το script που αναφέρω στην προηγούμενη δημοσίευση
με iso8859-7 δουλεύει κανονικά!!!
- Κώδικας: Επιλογή όλων
# -*- coding=iso8859-7 -*-
try :
import gtk
import gobject
except:
raise SystemExit
import pygtk
if gtk.pygtk_version<(2.0):
print "pygtk 2.0 or later require for this widget"
raise SystemExit
import pango
import random
import time
from os import open
from datetime import date
from sugar.activity import activity
class KremalaActivity(activity.Activity):
def __init__(self, handle):
activity.Activity.__init__(self, handle)
self.set_title("Kremala Activity")
# Show the toolbox elements
toolbox = activity.ActivityToolbox(self)
self.set_toolbox(toolbox)
toolbox.show()
#mporei kai na mhn xreiazetai auth h grammh
table=gtk.Table()
table.set_homogeneous(False)
table.set_row_spacings(4)
table.set_col_spacings(4)
#listes me tis lekseis
self.list_geo=["ΚΩΝΣΤΑΝΤΙΝΟΥΠΟΛΗ", "ΒΑΤΙΚΑΝΟ","ΤΑΥΓΕΤΟΣ","ΝΟΡΒΗΓΙΑ","ΟΛΥΜΠΟΣ","ΙΜΑΛΑΙΑ",
"ΚΑΣΠΙΑ"]
self.list_hist=["ΓΑΛΙΛΑΙΟΣ","ΜΑΥΡΟΓΕΝΟΥΣ","ΓΙΑΛΤΑ","ΙΟΥΣΤΙΝΙΑΝΟΣ","ΑΡΙΣΤΟΤΕΛΗΣ","ΕΙΛΩΤΕΣ",
"ΛΕΩΝΙΔΑΣ"]
self.list_nat=["ΟΞΥΓΟΝΟ","ΧΛΩΡΟΦΥΛΗ","ΣΑΡΚΟΦΑΓΟ","ΒΟΤΑΝΟ","ΠΛΑΓΚΤΟΝ","ΠΕΤΡΕΛΑΙΟ",
"ΦΥΛΛΟΒΟΛΟ"]
self.list_question_geo=["Είναι η μοναδική πόλη που βρίσκεται ανάμεσα σε 2 χώρες",
"Ευρωπαϊκό κράτος που έχει έκταση μόλις μισό τετραγωνικό χιλιόμετρο",
"Σε αυτό το βουνό βρισκόταν ο <ΚΑΙΑΔΑΣ>",
"Χώρα όπου βρίσκονται οι ψηλότεροι καταράκτες της Ευρώπης",
"Είναι το υψηλότερο όρος της Ελλάδας",
"Είναι η υψηλότερη οροσειρά του κόσμου",
"Είναι η μεγαλύτερη λίμνη του κόσμου και έχει αλμυρό νερό"]
self.list_question_hist=["Είπε τη φράση: < ΚΙ ΟΜΩΣ ΚΙΝΕΙΤΑΙ >",
"Ηρωίδα της Ελληνικής Επανάστασης που έδιωξε ο Κωλλέτης απο το Ναύπλιο",
"Διάσκεψη στην οποία συζητήθηκε η ίδρυση του Ο.Η.Ε.",
"Βυζαντινός Αυτοκράτορας",
"Δάσκαλος του Μέγα Αλεξάνδρου",
"Έτσι λέγοταν οι < δούλοι > στην αρχαία Σπάρτη",
"Βασιλιάς της Σπάρτης που είπε το γνωστό < ΜΟΛΩΝ ΛΑΒΕ >"]
self.list_question_nat=["Χωρίς αυτό δεν υπάρχει ζωή",
"Απαραίτητη ουσία για το χρώμα των φυτών",
"Είναι το ζώο που τρέφεται μόνο με κρέας",
"Φυτό το οποίο έχει θεραπευτικές ιδιότητες",
"Με αυτό τρέφονται τα μικρά ψάρια",
"Παχύρευστη, μαύρη ουσία που αποκαλείται και < ΜΑΥΡΟΣ ΧΡΥΣΟΣ >",
"Έτσι λέγεται το δέντρο που ρίχνει τα φύλλα του το Φθινώπορο"]
button_activity=gtk.Button("Έξοδος")
button_activity.connect("clicked",lambda wid:gtk.main_quit())
tooltip = gtk.Tooltips()
tooltip.set_tip(button_activity, "αποσύνδεση")
entryname=gtk.Entry()
entryname.modify_font(pango.FontDescription(str='sans bold 10'))
entryname.set_max_length(100)
self.entname=entryname.get_text()
button_save=gtk.Button("save")
button_save.connect("clicked",self.buttonsave)
tooltips = gtk.Tooltips()
tooltips.set_tip(button_save, "save the name")
self.m=6
vbox=gtk.VBox()
event_box = gtk.EventBox()
event_box.modify_bg(gtk.STATE_NORMAL, event_box.get_colormap().alloc_color("#75B844"))
image = gtk.Image()
image.set_from_file(self.make_image_name(self.m))
self.image=image
event_box.add(self.image)
vbox.add(event_box)
vbox1=gtk.VBox()
event_box1= gtk.EventBox()
event_box1.modify_bg(gtk.STATE_NORMAL, event_box1.get_colormap().alloc_color("#FFF333"))
image1 = gtk.Image()
image1.set_from_file('imgg/skepsi.jpg')
self.image1=image1
event_box1.add(self.image1)
vbox1.add(event_box1)
#kathgories
table_category=gtk.Table()
table_category.set_homogeneous(False)
table_category.set_row_spacings(2)
table_category.set_col_spacings(2)
buttongeo=gtk.Button("GEOGRAPHY")
buttongeo.connect("clicked", self.random_word, self.list_geo)
tooltips = gtk.Tooltips()
tooltips.set_tip(buttongeo, "BUTTON GEOGRAFIA")
buttonhist=gtk.Button("ISTORIA")
buttonhist.connect("clicked", self.random_word, self.list_hist)
tooltips = gtk.Tooltips()
tooltips.set_tip(buttonhist, "BUTTON ISTORIA")
buttonnat=gtk.Button("PERIVALLON")
buttonnat.connect("clicked", self.random_word, self.list_nat)
tooltips = gtk.Tooltips()
tooltips.set_tip(buttonnat, "BUTTON PERIVALLON")
self.buttongeo=buttongeo
self.buttonhist=buttonhist
self.buttonnat=buttonnat
table_category.attach(buttongeo,0,1,0,1)
table_category.attach(buttonhist,0,1,1,2)
table_category.attach(buttonnat,0,1,2,3)
vbox2=gtk.VBox()
event_box2= gtk.EventBox()
event_box2.modify_bg(gtk.STATE_NORMAL, event_box2.get_colormap().alloc_color("#75B844"))
image2 = gtk.Image()
image2.set_from_file('imgg/img_kategory.jpg')
self.image2=image2
event_box2.add(self.image2)
vbox2.add(event_box2)
textview2=gtk.TextView() #leksi
textview2.set_editable(False)
textview2.set_cursor_visible(False)
textview2.set_justification(gtk.JUSTIFY_CENTER)
textview2.modify_font(pango.FontDescription(str='sans bold 18'))
self.textbuffer2=textview2.get_buffer()
entrygr=gtk.Entry()
entrygr.set_editable(False)
entrygr.modify_font(pango.FontDescription(str='sans bold 16'))
entrygr.set_max_length(13)
self.entgr=entrygr.get_text()
tooltips = gtk.Tooltips()
tooltips.set_tip(entrygr, "edo emfanizontai ta lathos gramata")
textview1=gtk.TextView() #erotisi
textview1.set_editable(False)
textview1.set_cursor_visible(False)
textview1.set_justification(gtk.JUSTIFY_LEFT)
textview1.modify_font(pango.FontDescription(str='sans bold 8'))
self.textbuffer1=textview1.get_buffer()
labelname=gtk.Label("onoma:")
labelname.modify_font(pango.FontDescription(str='sans bold 10'))
labelname.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('red'))
entrymin=gtk.Entry()
entrymin.set_editable(False)
entrymin.modify_font(pango.FontDescription(str='sans bold 10'))
entrymin.set_max_length(100)
self.entmin=entrymin.get_text()
entryprot=gtk.Entry()
entryprot.set_editable(False)
entryprot.modify_font(pango.FontDescription(str='sans bold 12'))
entryprot.set_max_length(70)
self.entprot=entryprot.get_text()
#dhmiourgei to plhktrologio me ta gramata
pad=gtk.Table()
table.set_homogeneous(False)
pad.set_row_spacings(2)
pad.set_col_spacings(1)
but_a=gtk.Button('A')
but_a.connect("clicked", self.add_letter, 'a')
self.but_a=but_a
but_b=gtk.Button('B')
but_b.connect("clicked", self.add_letter, 'b')
self.but_b=but_b
but_c=gtk.Button('C')
but_c.connect("clicked", self.add_letter, 'c')
self.but_c=but_c
but_d=gtk.Button('D')
but_d.connect("clicked", self.add_letter, 'd')
self.but_d=but_d
but_e=gtk.Button('E')
but_e.connect("clicked", self.add_letter, 'e')
self.but_e=but_e
but_f=gtk.Button('F')
but_f.connect("clicked", self.add_letter, 'f')
self.but_f=but_f
but_g=gtk.Button('G')
but_g.connect("clicked", self.add_letter, 'g')
self.but_g=but_g
but_h=gtk.Button('H')
but_h.connect("clicked", self.add_letter, 'h')
self.but_h=but_h
but_i=gtk.Button('I')
but_i.connect("clicked", self.add_letter, 'i')
self.but_i=but_i
but_j=gtk.Button('J')
but_j.connect("clicked", self.add_letter, 'j')
self.but_j=but_j
but_k=gtk.Button('K')
but_k.connect("clicked", self.add_letter, 'k')
self.but_k=but_k
but_l=gtk.Button('L')
but_l.connect("clicked", self.add_letter, 'l')
self.but_l=but_l
but_m=gtk.Button('M')
but_m.connect("clicked", self.add_letter, 'm')
self.but_m=but_m
but_n=gtk.Button('N')
but_n.connect("clicked", self.add_letter, 'n')
self.but_n=but_n
but_o=gtk.Button('O')
but_o.connect("clicked", self.add_letter, 'o')
self.but_o=but_o
but_p=gtk.Button('P')
but_p.connect("clicked", self.add_letter, 'p')
self.but_p=but_p
but_q=gtk.Button('Q')
but_q.connect("clicked", self.add_letter, 'q')
self.but_q=but_q
but_r=gtk.Button('R')
but_r.connect("clicked", self.add_letter, 'r')
self.but_r=but_r
but_s=gtk.Button('S')
but_s.connect("clicked", self.add_letter, 's')
self.but_s=but_s
but_t=gtk.Button('T')
but_t.connect("clicked", self.add_letter, 't')
self.but_t=but_t
but_u=gtk.Button('U')
but_u.connect("clicked", self.add_letter, 'u')
self.but_u=but_u
but_v=gtk.Button('V')
but_v.connect("clicked", self.add_letter, 'v')
self.but_v=but_v
but_w=gtk.Button('W')
but_w.connect("clicked", self.add_letter, 'w')
self.but_w=but_w
but_x=gtk.Button('X')
but_x.connect("clicked", self.add_letter, 'x')
self.but_x=but_x
but_y=gtk.Button('Y')
but_y.connect("clicked", self.add_letter, 'y')
self.but_y=but_y
but_z=gtk.Button('Z')
but_z.connect("clicked", self.add_letter, 'z')
self.but_z=but_z
pad.attach(but_a,0,1,0,1)
pad.attach(but_b,1,2,0,1)
pad.attach(but_c,2,3,0,1)
pad.attach(but_d,3,4,0,1)
pad.attach(but_e,4,5,0,1)
pad.attach(but_f,5,6,0,1)
pad.attach(but_g,6,7,0,1)
pad.attach(but_h,7,8,0,1)
pad.attach(but_i,8,9,0,1)
pad.attach(but_j,9,10,0,1)
pad.attach(but_k,10,11,0,1)
pad.attach(but_l,11,12,0,1)
pad.attach(but_m,12,13,0,1)
pad.attach(but_n,0,1,1,2)
pad.attach(but_o,1,2,1,2)
pad.attach(but_p,2,3,1,2)
pad.attach(but_q,3,4,1,2)
pad.attach(but_r,4,5,1,2)
pad.attach(but_s,5,6,1,2)
pad.attach(but_t,6,7,1,2)
pad.attach(but_u,7,8,1,2)
pad.attach(but_v,8,9,1,2)
pad.attach(but_w,9,10,1,2)
pad.attach(but_x,10,11,1,2)
pad.attach(but_y,11,12,1,2)
pad.attach(but_z,12,13,1,2)
#vazei ola ta widgets sto table
table.attach(button_activity,6,7,0,1)
table.attach(labelname,2,3,0,1)
table.attach(entryname,3,5,0,1)
table.attach(button_save,5,6,0,1)
table.attach(vbox,0,2,0,4)
table.attach(table_category,2,4,1,2)
table.attach(vbox2,4,10,1,2)
table.attach(textview2,2,10,2,3)
table.attach(entrygr, 2,10,3,4)
table.attach(textview1,0,10,4,5)
table.attach(vbox1,0,1,5,6)
table.attach(entrymin, 1,10,5,6)
table.attach(entryprot, 0,10,6,7)
table.attach(pad, 0,10,7,8)
##
## window.add(table)
## window.show_all()
self.set_canvas(table)
self.show_all()
self.view2=textview2
self.entrygr=entrygr
self.entrymin=entrymin
self.entryprot=entryprot
self.entryname=entryname
self.button_save=button_save
self.button_activity=button_activity
self.image.set_from_file(self.make_image_name(6))
self.list_button=[self.but_a, self.but_b,self.but_c,self.but_d,self.but_e,self.but_f,
self.but_g,self.but_h,self.but_i,self.but_j,self.but_k,self.but_l,
self.but_m,self.but_n,self.but_o,self.but_p,self.but_q,self.but_r,
self.but_s,self.but_t,self.but_u,self.but_v,self.but_w,self.but_x,
self.but_y,self.but_z]
self.buttongeo.set_sensitive(False)
self.buttonhist.set_sensitive(False)
self.buttonnat.set_sensitive(False)
self.disable_keyboard(False)
self.entryprot.set_text("Exeis 6 prospatheies gia na breis th leksi")
#metavlites
self.w=" " #apithikeuetai h epilegmenh leksi
self.p=" " #apothikeuontai oi paules
self.list_again=[] #lista me ta gramata pou dinontai
self.gr=' ' #to grama pou epilegei o xrhsths
self.categ=" "
#epistrefei thn eikona
def make_image_name(self, image_number):
return "imgg/image" + str(image_number) + ".jpg"
#synarthsh poy allazei tis eikones analoga me thn timh tou metrhth m
def change_image(self):
for i in range(6):
if self.m==i:
self.image.set_from_file(self.make_image_name(i))
return True
#vriskei ta gramata ths leksis
def show_gr(self):
new="" #apothikeuetai h nea leksi
for i in range(len(self.w)):
if self.gr==self.w[i]: #an to grama uparxei sth leksi
new=new+self.gr #to vazei sto new
else:
new=new+self.p[i] #allios vazei paula, to p[] periexei paules
self.p=new
self.textbuffer2.set_text(new) #emfanizei sto textview2 th nea leksi
#eisagei stoixeia sto arxeio elements_file.txt, to opoio periexei statistika stoixeia ton paikton
def insert_text_file(self, strng):
file_obj=open('elements_file.txt', 'a') #anoigei to arxeio gia eisagogh stoixeion
file_obj.write(strng)
file_obj.close()
#otan path8ei to save, apo8ikeuontai kapoia stoixeia sto elements_file.txt
def buttonsave(self,widget):
self.disable_buttCateg(True)
self.disable_keyboard(True)
self.button_save.set_sensitive(False) #apenergopoihsh tou button save, etsi oste #ka8e neos paikths na apo8hkeuei mia fora
#to onoma tou oso exei anoixto to paixnidi
ss=" "
ss="\nonoma: "+self.entryname.get_text()+"\n" #onoma paikth
xronos=date.today() #hmerominia
y=xronos.strftime("%m-%d-%y") #y=periexei thn hmerominia p.x. 03-05-09
u=time.localtime() #ora
w=u.strftime("%H:%M:%S") #w=periexei thn ora p.x. 12:25:13
## rr=str(y)
## uu=str(w)
## self.insert_text_file(ss+"hmerominia - ora: "+rr+" / "+uu+"\n")
self.insert_text_file(ss+"hmerominia - ora: "+y+" / "+w+"\n")
#kaleitai otan o piakths vrei th leksi
def sosti_leksi(self):
if self.w==self.p: #an h epilegmenh leksi 'w' einai ish me thn metabliti 'p'
#poy periexei ta sosta gramata poy vriskei o paikths
self.entrymin.set_text("Sugxarhthria, kerdises!!!")
self.disable_keyboard(False)
self.image1.set_from_file('imgg/Kerdises.jpg')
s=self.categ+": "+str(1)+" nikh me "+str(6-self.m)+" prospatheies\n"
self.insert_text_file(s)
#apenergopoiei to plhktrologio
def disable_keyboard(self, valuebool):
for i in range(26):
self.list_button[i].set_sensitive(valuebool)
#apenergopoihsh button kathgorion
def disable_buttCateg(self, timi):
self.buttongeo.set_sensitive(timi)
self.buttonhist.set_sensitive(timi)
self.buttonnat.set_sensitive(timi)
#kaleitai otan o piakths den vrei th leksi
def lathos_leksi(self):
self.entrymin.set_text("Dystyxos exases. H sosth leksi einai: "+self.w)
self.disable_keyboard(False)
self.image1.set_from_file('imgg/exases.jpg')
rr=self.categ+": "+str(1)+" htta\n"
self.insert_text_file(rr)
#elegxei an to grama exei dothei ksana
def gr_again(self, g, lista):
for k in range(len(lista)):
if lista[k]==g:
return True
#kaleitai otan patithei kapoio grama
def add_letter(self,widget, grama):
self.gr=grama
self.entrymin.set_text("")
again=self.gr_again(self.gr, self.list_again)
if again==True:
self.entrymin.set_text("To gramma uparxei hdh. Dose allo gramma.")
else:
self.find_w()
#h synarthsh me oles tis leitourgies gia na brethei h leksi
def find_w(self):
self.list_again.append(self.gr) #vazei to grama sth lista me ta dosmena gramata
t=self.w.find(self.gr) #elegxei an to grama uparxei sth leksi
if t==-1: #an den uparxei
self.m=self.m-1 #meionei ton metrhth prospatheion
if self.m==0: #an einai mhden, emfanizei thn protash,
#emfanizei to la8os grama kai to skitso,
#kalei thn lathos_leksi
self.entryprot.set_text("Exeis "+str(self.m)+" prospatheies gia na breis th leksi")
self.entrygr.insert_text(self.gr+" ",len(self.entgr)-1)
self.image.set_from_file(self.make_image_name(0))
self.lathos_leksi()
elif self.m>0: #an einai megalytero tou mhdenos,
#emfanizei thn protash,
#emfanizei to la8os grama kai to skitso
self.entryprot.set_text("Exeis "+str(self.m)+" prospatheies gia na breis th leksi")
self.entrygr.insert_text(self.gr+" ",len(self.entgr)-1)
self.change_image()
else: #an uparxei to gramma kalei tis show_gr() kai sosti_leksi()
self.show_gr()
self.sosti_leksi()
#epistrefei thn kathgoria pou epelekse o paikths gia na graftei sto arxeio me ta stoixeia
def name_category(self, lista):
if lista==self.list_geo:
self.categ="geografia"
elif lista==self.list_hist:
self.categ="history"
elif lista==self.list_nat:
self.categ="periballon"
return self.categ
def question(self, listakat):
q=""
if listakat==self.list_geo:
for i in range(7):
if self.list_geo[i]==self.w:
q=self.list_question_geo[i]
elif listakat==self.list_hist:
for i in range(7):
if self.list_hist[i]==self.w:
q=self.list_question_hist[i]
elif listakat==self.list_nat:
for i in range(7):
if self.list_nat[i]==self.w:
q=self.list_question_nat[i]
return q
#kaleitai otan path8ei button kapoias kathgorias
def random_word(self, widget, lista):
self.name_category(lista)
self.m=6
self.clear()
self.w=random.choice(lista)
n=len(self.w)
self.p="-"*n
iter=self.textbuffer2.get_iter_at_offset(0)
self.textbuffer2.insert(iter,self.p)
ques=self.question(lista)
self.textbuffer1.set_text(ques)
##"\n"+"\n"+
#katharizei thn othonh se kathe neo paixnidi
def clear(self):
self.entrygr.set_text(" ")
self.entrymin.set_text(" ")
self.entryprot.set_text("Exeis 6 prospatheies gia na breis th leksi")
self.textbuffer2.set_text(" ")
self.list_again=[]
self.image.set_from_file(self.make_image_name(6))
self.image1.set_from_file('imgg/skepsi.jpg')
self.disable_keyboard(True)
def main():
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
KremalaActivity(win)
gtk.main()
return 0
if __name__ == "__main__":
main()
Ευχαριστώ πάρα πολύ και πάλι.