--- /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()