Init from svn. The wxpython is the final one.
#!/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()