wxpython/lingvigilo.py
changeset 0 6371497b4e53
equal deleted inserted replaced
-1:000000000000 0:6371497b4e53
       
     1 #!/usr/bin/python
       
     2 # -*- coding: utf-8 -*-
       
     3 
       
     4 import sys,time,random,string,MySQLdb,re
       
     5 from wxPython.wx import *
       
     6 
       
     7 # Configuració
       
     8 legi_el = 'mysql'
       
     9 
       
    10 # Conf - mysql
       
    11 database = 'lingvigilo'
       
    12 dbuser = 'lingvigilouser'
       
    13 dbpass = 'carrinclo'
       
    14 dbtable_vortoj = 'vortoj_ru_ca'
       
    15 dbtable_frazoj = 'frazoj_ru_ca'
       
    16 
       
    17 # Conf - fitxer
       
    18 dbasefile = 'vortoj-ru-ca.txt'
       
    19 frazodosiero = 'frazoj.txt'
       
    20 frazoj_al = 'mysql'
       
    21 
       
    22 # Si s'especifica fitxer, l'origen és el fitxer.
       
    23 if (len(sys.argv) > 1):
       
    24 	dbasefile = sys.argv[1]
       
    25 	legi_el = 'file'
       
    26 
       
    27 def StringForSQL(str):
       
    28 	return re.sub(r"'",r"\'", str)
       
    29 
       
    30 # Prendre les paraules d'una base de dades MySQL
       
    31 def getMySQL():
       
    32 	db = MySQLdb.connect(host='vicerveza',user=dbuser,passwd=dbpass,
       
    33 		db=database)
       
    34 	cursor = db.cursor()
       
    35 	cursor.execute("SELECT * FROM "+dbtable_vortoj)
       
    36 	res_vortoj = cursor.fetchall()
       
    37 	res_vortoj_unicode = []
       
    38 	for vorto in res_vortoj:
       
    39 		vorto_vorto = unicode(vorto[1],'utf8')
       
    40 		vorto_tipo = unicode(vorto[2],'utf8')
       
    41 		vorto_traduko = unicode(vorto[3],'utf8')
       
    42 		
       
    43 		# Paràmetres opcionals
       
    44 		if vorto[4] == None:
       
    45 			vorto_param1 = ''
       
    46 		else:
       
    47 			vorto_param1 = unicode(vorto[4],'utf8')
       
    48 
       
    49 		if vorto[5] == None:
       
    50 			vorto_param2 = ''
       
    51 		else:
       
    52 			vorto_param2 = unicode(vorto[5],'utf8')
       
    53 
       
    54 		res_vortoj_unicode.append(
       
    55 			(vorto_vorto, vorto_tipo, vorto_traduko,
       
    56 			vorto_param1, vorto_param2))
       
    57 	db.close()
       
    58 	return res_vortoj_unicode
       
    59 
       
    60 # Prendre les paraules d'un fitxer
       
    61 def getFile():
       
    62 	dbase = open(dbasefile,"r")
       
    63 
       
    64 	lines = dbase.readlines()
       
    65 	dbase.close()
       
    66 
       
    67 	res_vortoj = []
       
    68 	for line in lines:
       
    69 		line = line.rstrip('\n')
       
    70 		vortoj = string.split(unicode(line.rstrip('\n'),'utf8'),'\t')
       
    71 		res_vortoj.append(vortoj)
       
    72 
       
    73 	return res_vortoj
       
    74 
       
    75 if legi_el == 'dosiero':
       
    76 	print "Legante vortojn el dosiero..."
       
    77 	vortoj = getFile()
       
    78 elif legi_el == 'mysql':
       
    79 	print "Legante vortojn el MySQLa datumbazo..."
       
    80 	vortoj = getMySQL()
       
    81 
       
    82 print "Legitaj", len(vortoj), "vortoj."
       
    83 
       
    84 def AldoniFrazonDosieren(vorto,teksto):
       
    85 	outfile = open(frazodosiero,"a")
       
    86 
       
    87 	lineout = vorto + "\t" + teksto +"\n"
       
    88 	outfile.write(lineout.encode('utf8'))
       
    89 	
       
    90 	outfile.close()
       
    91 
       
    92 def AldoniFrazonDatumbazen(vorto,teksto):
       
    93 	db = MySQLdb.connect(host='vicerveza',user=dbuser,passwd=dbpass,
       
    94 		db=database)
       
    95 	cursor = db.cursor()
       
    96 	cursor.execute("INSERT INTO "+
       
    97 		StringForSQL(dbtable_frazoj)+
       
    98 		" (vorto, frazo) VALUES('%s', '%s');" %
       
    99 		(StringForSQL(vorto.encode('utf8')),
       
   100 		StringForSQL(teksto.encode('utf8'))))
       
   101 	db.close()
       
   102 
       
   103 def AldoniFrazon(vorto,teksto):
       
   104 	if (frazoj_al == 'mysql'):
       
   105 		AldoniFrazonDatumbazen(vorto,teksto)
       
   106 	elif (frazoj_al == 'dosiero'):
       
   107 		AldoniFrazonDosieren(vorto,teksto)
       
   108 
       
   109 
       
   110 
       
   111 #def LoopFunction():
       
   112 #	index = random.randint(0, len(vortoj)-1)
       
   113 #	vorto = vortoj[index][0]
       
   114 #	teksto = askstring("Frazilon", "Skribu frazon por vorto '%s'" % vorto)
       
   115 #	if teksto == None:
       
   116 #		print 'Fi del programa'
       
   117 #		sys.exit()
       
   118 #	AldoniFrazonDatumbazen(vorto, teksto)
       
   119 
       
   120 def Senakcentigi(vorto):
       
   121 	return re.sub(r"'",r"", vorto)
       
   122 
       
   123 class main_window(wxFrame):
       
   124 	def __init__(self, parent, id, title):
       
   125 		wxFrame.__init__(self, parent, -1, title, size=(200,100),
       
   126 			style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
       
   127 
       
   128 		# Variables de la classe
       
   129 		# (sino no tira)
       
   130 		self.vorto = ("", "")
       
   131 
       
   132 		# Sizer vertical
       
   133 		self.topsizer = wxBoxSizer(wxVERTICAL)
       
   134 
       
   135 		# Agefim la pregunta i la textbox
       
   136 		self.label = wxStaticText(self, -1,
       
   137 			label="Skribu frazon per vorto\n 'provo'",
       
   138 			style=wxALIGN_CENTER)
       
   139 		self.textbox = wxTextCtrl(self, -1)
       
   140 		self.topsizer.Add(self.label, 1, wxALIGN_CENTER,
       
   141 			wxALL, 10)
       
   142 		self.topsizer.Add(self.textbox, 0, wxEXPAND, wxALL, 10)
       
   143 
       
   144 		# Afegim botons
       
   145 		self.buttonsizer = wxBoxSizer(wxHORIZONTAL)
       
   146 		okid = wxNewId()
       
   147 		cancelid = wxNewId()
       
   148 		helpid = wxNewId()
       
   149 		okbutton = wxButton(self, okid, "Konservu")
       
   150 		# Botó per defecte (resposta a l'intro)
       
   151 		okbutton.SetDefault()
       
   152 		self.buttonsizer.Add(okbutton, 0, wxALL, 10)
       
   153 		cancelbutton = wxButton(self, cancelid, "Forgesu")
       
   154 		self.buttonsizer.Add(cancelbutton, 0, wxALL, 10)
       
   155 		helpbutton = wxButton(self, helpid, "Helpo")
       
   156 		self.buttonsizer.Add(helpbutton, 0, wxALL, 10)
       
   157 		self.topsizer.Add(self.buttonsizer, 0, wxALIGN_CENTER)
       
   158 
       
   159 		# EVENTS DE BOTONS
       
   160 		EVT_BUTTON(okbutton, okid, self.KonservuFrazon )
       
   161 		EVT_BUTTON(cancelbutton, cancelid, self.ForgesuFrazon )
       
   162 		EVT_BUTTON(helpbutton, helpid, self.MontruHelpon )
       
   163 
       
   164 		# Key events
       
   165 		EVT_KEY_DOWN(self,self.KeyManager)
       
   166 
       
   167 		# Activem el sizer principal
       
   168 		self.SetSizer(self.topsizer)
       
   169 		# Mida mínima de finestra.
       
   170 		self.topsizer.SetSizeHints(self)
       
   171 
       
   172 		# Focus al text
       
   173 		self.textbox.SetFocus()
       
   174 		
       
   175 		self.Show(true)
       
   176 
       
   177 		# Actualitzem paraula.
       
   178 		self.RenovuVorton()
       
   179 
       
   180 	def RenovuVorton(self):
       
   181 		index = random.randint(0, len(vortoj)-1)
       
   182 		
       
   183 		self.vorto = vortoj[index]
       
   184 		#print("Elektita vorto: %s" % self.vorto[0])
       
   185 		self.label.SetLabel("Skribu frazon per vorto\n'%s'" %
       
   186 			Senakcentigi(self.vorto[0]))
       
   187 
       
   188 
       
   189 	#	if teksto == None:
       
   190 	#		print 'Fi del programa'
       
   191 	#		sys.exit()
       
   192 	#	AldoniFrazonDatumbazen(vorto, teksto)
       
   193 
       
   194 	def MontruHelpon(self,event):
       
   195 		mesagxo = ("Vorto: " + self.vorto[0] + "\n" +
       
   196 			"Tipo: " + self.vorto[1] + "\n" +
       
   197 			"Traduko: " + self.vorto[2] + "\n")
       
   198 
       
   199 		if (self.vorto[1] == "verb"):
       
   200 			mesagxo = (mesagxo + "Aspekto: " + self.vorto[3] + "\n")
       
   201 			aspekto = self.vorto[3]
       
   202 			if (self.vorto[3] == u"нсв"):
       
   203 				aliaaspekto = u"Св"
       
   204 			else:
       
   205 				aliaaspekto = u"Нсв"
       
   206 			mesagxo = (mesagxo + aliaaspekto + ": " +
       
   207 				self.vorto[4] + "\n")
       
   208 
       
   209 		wxMessageDialog(self, mesagxo, "Helpo", style=wxOK).ShowModal()
       
   210 
       
   211 	def KonservuFrazon(self,event):
       
   212 		# No guardem cadenes buides
       
   213 		if (self.textbox.GetValue() != ""):
       
   214 			AldoniFrazon(Senakcentigi(self.vorto[0]),
       
   215 				self.textbox.GetValue())
       
   216 			self.RenovuVorton()
       
   217 			self.textbox.Clear()
       
   218 
       
   219 	def ForgesuFrazon(self,event):
       
   220 		self.textbox.Clear()
       
   221 		self.RenovuVorton()
       
   222 
       
   223 	def KeyManager(self,event):
       
   224 		key = event.GetKeyCode()
       
   225 		if (key == WXK_ESCAPE):
       
   226 			print("Elirante...")
       
   227 			sys.exit()
       
   228 		elif (key == WXK_TAB):
       
   229 			# Igual que ForgesuFrazon(self,event)
       
   230 			# Puc fer-ho passant un event buit?
       
   231 			self.ForgesuFrazon(0)
       
   232 		elif (key == WXK_F1):
       
   233 			self.MontruHelpon(0)
       
   234 
       
   235 class App(wxApp):
       
   236 	def OnInit(self):
       
   237 		frame = main_window(None, -1, "Lingvigilo")
       
   238 		self.SetTopWindow(frame)
       
   239 		return true
       
   240 
       
   241 #def DemandiAlUzanto():
       
   242 
       
   243 # Main program
       
   244 app=App(0)
       
   245 app.MainLoop()