diff -r 000000000000 -r 6371497b4e53 wxpython/lingvigilo.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wxpython/lingvigilo.py Thu May 18 22:59:47 2006 +0200 @@ -0,0 +1,245 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import sys,time,random,string,MySQLdb,re +from wxPython.wx import * + +# Configuració +legi_el = 'mysql' + +# Conf - mysql +database = 'lingvigilo' +dbuser = 'lingvigilouser' +dbpass = 'carrinclo' +dbtable_vortoj = 'vortoj_ru_ca' +dbtable_frazoj = 'frazoj_ru_ca' + +# Conf - fitxer +dbasefile = 'vortoj-ru-ca.txt' +frazodosiero = 'frazoj.txt' +frazoj_al = 'mysql' + +# Si s'especifica fitxer, l'origen és el fitxer. +if (len(sys.argv) > 1): + dbasefile = sys.argv[1] + legi_el = 'file' + +def StringForSQL(str): + return re.sub(r"'",r"\'", str) + +# Prendre les paraules d'una base de dades MySQL +def getMySQL(): + db = MySQLdb.connect(host='vicerveza',user=dbuser,passwd=dbpass, + db=database) + cursor = db.cursor() + cursor.execute("SELECT * FROM "+dbtable_vortoj) + res_vortoj = cursor.fetchall() + res_vortoj_unicode = [] + for vorto in res_vortoj: + vorto_vorto = unicode(vorto[1],'utf8') + vorto_tipo = unicode(vorto[2],'utf8') + vorto_traduko = unicode(vorto[3],'utf8') + + # Paràmetres opcionals + if vorto[4] == None: + vorto_param1 = '' + else: + vorto_param1 = unicode(vorto[4],'utf8') + + if vorto[5] == None: + vorto_param2 = '' + else: + vorto_param2 = unicode(vorto[5],'utf8') + + res_vortoj_unicode.append( + (vorto_vorto, vorto_tipo, vorto_traduko, + vorto_param1, vorto_param2)) + db.close() + return res_vortoj_unicode + +# Prendre les paraules d'un fitxer +def getFile(): + dbase = open(dbasefile,"r") + + lines = dbase.readlines() + dbase.close() + + res_vortoj = [] + for line in lines: + line = line.rstrip('\n') + vortoj = string.split(unicode(line.rstrip('\n'),'utf8'),'\t') + res_vortoj.append(vortoj) + + return res_vortoj + +if legi_el == 'dosiero': + print "Legante vortojn el dosiero..." + vortoj = getFile() +elif legi_el == 'mysql': + print "Legante vortojn el MySQLa datumbazo..." + vortoj = getMySQL() + +print "Legitaj", len(vortoj), "vortoj." + +def AldoniFrazonDosieren(vorto,teksto): + outfile = open(frazodosiero,"a") + + lineout = vorto + "\t" + teksto +"\n" + outfile.write(lineout.encode('utf8')) + + outfile.close() + +def AldoniFrazonDatumbazen(vorto,teksto): + db = MySQLdb.connect(host='vicerveza',user=dbuser,passwd=dbpass, + db=database) + cursor = db.cursor() + cursor.execute("INSERT INTO "+ + StringForSQL(dbtable_frazoj)+ + " (vorto, frazo) VALUES('%s', '%s');" % + (StringForSQL(vorto.encode('utf8')), + StringForSQL(teksto.encode('utf8')))) + db.close() + +def AldoniFrazon(vorto,teksto): + if (frazoj_al == 'mysql'): + AldoniFrazonDatumbazen(vorto,teksto) + elif (frazoj_al == 'dosiero'): + AldoniFrazonDosieren(vorto,teksto) + + + +#def LoopFunction(): +# index = random.randint(0, len(vortoj)-1) +# vorto = vortoj[index][0] +# teksto = askstring("Frazilon", "Skribu frazon por vorto '%s'" % vorto) +# if teksto == None: +# print 'Fi del programa' +# sys.exit() +# AldoniFrazonDatumbazen(vorto, teksto) + +def Senakcentigi(vorto): + return re.sub(r"'",r"", vorto) + +class main_window(wxFrame): + def __init__(self, parent, id, title): + wxFrame.__init__(self, parent, -1, title, size=(200,100), + style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE) + + # Variables de la classe + # (sino no tira) + self.vorto = ("", "") + + # Sizer vertical + self.topsizer = wxBoxSizer(wxVERTICAL) + + # Agefim la pregunta i la textbox + self.label = wxStaticText(self, -1, + label="Skribu frazon per vorto\n 'provo'", + style=wxALIGN_CENTER) + self.textbox = wxTextCtrl(self, -1) + self.topsizer.Add(self.label, 1, wxALIGN_CENTER, + wxALL, 10) + self.topsizer.Add(self.textbox, 0, wxEXPAND, wxALL, 10) + + # Afegim botons + self.buttonsizer = wxBoxSizer(wxHORIZONTAL) + okid = wxNewId() + cancelid = wxNewId() + helpid = wxNewId() + okbutton = wxButton(self, okid, "Konservu") + # Botó per defecte (resposta a l'intro) + okbutton.SetDefault() + self.buttonsizer.Add(okbutton, 0, wxALL, 10) + cancelbutton = wxButton(self, cancelid, "Forgesu") + self.buttonsizer.Add(cancelbutton, 0, wxALL, 10) + helpbutton = wxButton(self, helpid, "Helpo") + self.buttonsizer.Add(helpbutton, 0, wxALL, 10) + self.topsizer.Add(self.buttonsizer, 0, wxALIGN_CENTER) + + # EVENTS DE BOTONS + EVT_BUTTON(okbutton, okid, self.KonservuFrazon ) + EVT_BUTTON(cancelbutton, cancelid, self.ForgesuFrazon ) + EVT_BUTTON(helpbutton, helpid, self.MontruHelpon ) + + # Key events + EVT_KEY_DOWN(self,self.KeyManager) + + # Activem el sizer principal + self.SetSizer(self.topsizer) + # Mida mínima de finestra. + self.topsizer.SetSizeHints(self) + + # Focus al text + self.textbox.SetFocus() + + self.Show(true) + + # Actualitzem paraula. + self.RenovuVorton() + + def RenovuVorton(self): + index = random.randint(0, len(vortoj)-1) + + self.vorto = vortoj[index] + #print("Elektita vorto: %s" % self.vorto[0]) + self.label.SetLabel("Skribu frazon per vorto\n'%s'" % + Senakcentigi(self.vorto[0])) + + + # if teksto == None: + # print 'Fi del programa' + # sys.exit() + # AldoniFrazonDatumbazen(vorto, teksto) + + def MontruHelpon(self,event): + mesagxo = ("Vorto: " + self.vorto[0] + "\n" + + "Tipo: " + self.vorto[1] + "\n" + + "Traduko: " + self.vorto[2] + "\n") + + if (self.vorto[1] == "verb"): + mesagxo = (mesagxo + "Aspekto: " + self.vorto[3] + "\n") + aspekto = self.vorto[3] + if (self.vorto[3] == u"нсв"): + aliaaspekto = u"Св" + else: + aliaaspekto = u"Нсв" + mesagxo = (mesagxo + aliaaspekto + ": " + + self.vorto[4] + "\n") + + wxMessageDialog(self, mesagxo, "Helpo", style=wxOK).ShowModal() + + def KonservuFrazon(self,event): + # No guardem cadenes buides + if (self.textbox.GetValue() != ""): + AldoniFrazon(Senakcentigi(self.vorto[0]), + self.textbox.GetValue()) + self.RenovuVorton() + self.textbox.Clear() + + def ForgesuFrazon(self,event): + self.textbox.Clear() + self.RenovuVorton() + + def KeyManager(self,event): + key = event.GetKeyCode() + if (key == WXK_ESCAPE): + print("Elirante...") + sys.exit() + elif (key == WXK_TAB): + # Igual que ForgesuFrazon(self,event) + # Puc fer-ho passant un event buit? + self.ForgesuFrazon(0) + elif (key == WXK_F1): + self.MontruHelpon(0) + +class App(wxApp): + def OnInit(self): + frame = main_window(None, -1, "Lingvigilo") + self.SetTopWindow(frame) + return true + +#def DemandiAlUzanto(): + +# Main program +app=App(0) +app.MainLoop()