wxpython/lingvigilo.py
changeset 0 6371497b4e53
--- /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()